From 49431eb6f8a990e85f24a779d552249e6194e181 Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Sun, 24 Jan 2016 09:30:08 +0100 Subject: [PATCH] determine bytecode type with transformedType ... not exitingPostErasure, as this phase-travel crashes the compile (it's only really meant for going back in time, right?) --- .../interface/src/main/scala/xsbt/ExtractAPI.scala | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/compile/interface/src/main/scala/xsbt/ExtractAPI.scala b/compile/interface/src/main/scala/xsbt/ExtractAPI.scala index 172f8f090..3810a23bd 100644 --- a/compile/interface/src/main/scala/xsbt/ExtractAPI.scala +++ b/compile/interface/src/main/scala/xsbt/ExtractAPI.scala @@ -225,10 +225,10 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType, def build(t: Type, typeParams: Array[xsbti.api.TypeParameter], valueParameters: List[xsbti.api.ParameterList]): List[xsbti.api.Def] = { - def parameterList(syms: List[Symbol]): xsbti.api.ParameterList = + def parameterList(syms: List[Symbol], erase: Boolean = false): xsbti.api.ParameterList = { val isImplicitList = syms match { case head :: _ => isImplicit(head); case _ => false } - new xsbti.api.ParameterList(syms.map(parameterS).toArray, isImplicitList) + new xsbti.api.ParameterList(syms.map(parameterS(erase)).toArray, isImplicitList) } t match { case PolyType(typeParams0, base) => @@ -249,7 +249,7 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType, build(resultType, typeParams, parameterList(params) :: valueParameters) val afterErasure = if (inspectPostErasure) - build(resultType, typeParams, global exitingPostErasure (parameterList(mType.params) :: valueParameters)) + build(resultType, typeParams, parameterList(mType.params, erase = true) :: valueParameters) else Nil @@ -277,7 +277,7 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType, val beforeErasure = makeDef(processType(in, dropConst(returnType))) val afterErasure = if (inspectPostErasure) { - val erasedReturn = dropConst(global exitingPostErasure viewer(in).memberInfo(s)) map { + val erasedReturn = dropConst(transformedType(viewer(in).memberInfo(s))) map { case MethodType(_, r) => r case other => other } @@ -287,8 +287,10 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType, beforeErasure :: afterErasure } } - def parameterS(s: Symbol): xsbti.api.MethodParameter = - makeParameter(simpleName(s), s.info, s.info.typeSymbol, s) + def parameterS(erase: Boolean)(s: Symbol): xsbti.api.MethodParameter = { + val tp = if (erase) transformedType(s.info) else s.info + makeParameter(simpleName(s), tp, tp.typeSymbol, s) + } // paramSym is only for 2.8 and is to determine if the parameter has a default def makeParameter(name: String, tpe: Type, ts: Symbol, paramSym: Symbol): xsbti.api.MethodParameter =