mirror of https://github.com/sbt/sbt.git
Don't inspect signatures post erasure if macros are involved
This commit is contained in:
parent
111511dc6d
commit
9764b7f6ef
|
|
@ -180,6 +180,11 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType,
|
||||||
private def printMember(label: String, in: Symbol, t: Type) = println(label + " in " + in + " : " + t + " (debug: " + debugString(t) + " )")
|
private def printMember(label: String, in: Symbol, t: Type) = println(label + " in " + in + " : " + t + " (debug: " + debugString(t) + " )")
|
||||||
private def defDef(in: Symbol, s: Symbol): List[xsbti.api.Def] =
|
private def defDef(in: Symbol, s: Symbol): List[xsbti.api.Def] =
|
||||||
{
|
{
|
||||||
|
def isMacro(sym: Symbol): Boolean =
|
||||||
|
sym.isMacro || (sym.info.members.sorted exists isMacro) || (sym.children exists isMacro)
|
||||||
|
//sym.isMacro || (sym.children exists isMacro) || (sym.isType && sym.asType.toType.members.sorted.exists(isMacro))
|
||||||
|
val inspectPostErasure = !isMacro(in.enclosingTopLevelClass)
|
||||||
|
|
||||||
def build(t: Type, typeParams: Array[xsbti.api.TypeParameter], valueParameters: List[xsbti.api.ParameterList]): List[xsbti.api.Def] =
|
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]): xsbti.api.ParameterList =
|
||||||
|
|
@ -202,10 +207,15 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType,
|
||||||
// <- has type (I)I after erasure
|
// <- has type (I)I after erasure
|
||||||
// If we change A from value class to normal class, we need to recompile all clients
|
// If we change A from value class to normal class, we need to recompile all clients
|
||||||
// of def foo.
|
// of def foo.
|
||||||
val beforeErasure = parameterList(params) :: valueParameters
|
val beforeErasure =
|
||||||
val afterErasure = global exitingPostErasure (parameterList(mType.params) :: valueParameters)
|
build(resultType, typeParams, parameterList(params) :: valueParameters)
|
||||||
|
val afterErasure =
|
||||||
|
if (inspectPostErasure)
|
||||||
|
build(resultType, typeParams, global exitingPostErasure (parameterList(mType.params) :: valueParameters))
|
||||||
|
else
|
||||||
|
Nil
|
||||||
|
|
||||||
build(resultType, typeParams, beforeErasure) ++ build(resultType, typeParams, afterErasure)
|
beforeErasure ++ afterErasure
|
||||||
case Nullary(resultType) => // 2.9 and later
|
case Nullary(resultType) => // 2.9 and later
|
||||||
build(resultType, typeParams, valueParameters)
|
build(resultType, typeParams, valueParameters)
|
||||||
case returnType =>
|
case returnType =>
|
||||||
|
|
@ -226,16 +236,17 @@ class ExtractAPI[GlobalType <: CallbackGlobal](val global: GlobalType,
|
||||||
// <- has type (I)I after erasure
|
// <- has type (I)I after erasure
|
||||||
// If we change A from value class to normal class, we need to recompile all clients
|
// If we change A from value class to normal class, we need to recompile all clients
|
||||||
// of def foo.
|
// of def foo.
|
||||||
val beforeErasure = processType(in, dropConst(returnType))
|
val beforeErasure = makeDef(processType(in, dropConst(returnType)))
|
||||||
val afterErasure = {
|
val afterErasure =
|
||||||
|
if (inspectPostErasure) {
|
||||||
val erasedReturn = dropConst(global exitingPostErasure viewer(in).memberInfo(s)) map {
|
val erasedReturn = dropConst(global exitingPostErasure viewer(in).memberInfo(s)) map {
|
||||||
case MethodType(_, r) => r
|
case MethodType(_, r) => r
|
||||||
case other => other
|
case other => other
|
||||||
}
|
}
|
||||||
processType(in, erasedReturn)
|
List(makeDef(processType(in, erasedReturn)))
|
||||||
}
|
} else Nil
|
||||||
|
|
||||||
makeDef(beforeErasure) :: makeDef(afterErasure) :: Nil
|
beforeErasure :: afterErasure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
def parameterS(s: Symbol): xsbti.api.MethodParameter =
|
def parameterS(s: Symbol): xsbti.api.MethodParameter =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue