mirror of https://github.com/sbt/sbt.git
fix structural type comparison
This commit is contained in:
parent
9a914bea4b
commit
58d9f3b0a0
|
|
@ -309,10 +309,10 @@ class SameAPI(tagsA: TypeVars, tagsB: TypeVars, includePrivate: Boolean, include
|
||||||
def sameTypeDirect(a: Type, b: Type): Boolean =
|
def sameTypeDirect(a: Type, b: Type): Boolean =
|
||||||
(a, b) match
|
(a, b) match
|
||||||
{
|
{
|
||||||
case (sa: SimpleType, sb: SimpleType) => debug(sameSimpleType(sa, sb), "Different simple types: " + DefaultShowAPI(sa) + " and " + DefaultShowAPI(sb))
|
case (sa: SimpleType, sb: SimpleType) => debug(sameSimpleTypeDirect(sa, sb), "Different simple types: " + DefaultShowAPI(sa) + " and " + DefaultShowAPI(sb))
|
||||||
case (ca: Constant, cb: Constant) => debug(sameConstantType(ca, cb), "Different constant types: " + DefaultShowAPI(ca) + " and " + DefaultShowAPI(cb))
|
case (ca: Constant, cb: Constant) => debug(sameConstantType(ca, cb), "Different constant types: " + DefaultShowAPI(ca) + " and " + DefaultShowAPI(cb))
|
||||||
case (aa: Annotated, ab: Annotated) => debug(sameAnnotatedType(aa, ab), "Different annotated types")
|
case (aa: Annotated, ab: Annotated) => debug(sameAnnotatedType(aa, ab), "Different annotated types")
|
||||||
case (sa: Structure, sb: Structure) => debug(sameStructure(sa, sb), "Different structure type")
|
case (sa: Structure, sb: Structure) => debug(sameStructureDirect(sa, sb), "Different structure type")
|
||||||
case (ea: Existential, eb: Existential) => debug(sameExistentialType(ea, eb), "Different existential type")
|
case (ea: Existential, eb: Existential) => debug(sameExistentialType(ea, eb), "Different existential type")
|
||||||
case (pa: Polymorphic, pb: Polymorphic) => debug(samePolymorphicType(pa, pb), "Different polymorphic type")
|
case (pa: Polymorphic, pb: Polymorphic) => debug(samePolymorphicType(pa, pb), "Different polymorphic type")
|
||||||
case _ => differentCategory("type", a, b)
|
case _ => differentCategory("type", a, b)
|
||||||
|
|
@ -332,18 +332,23 @@ class SameAPI(tagsA: TypeVars, tagsB: TypeVars, includePrivate: Boolean, include
|
||||||
sameAnnotations(a.annotations, b.annotations)
|
sameAnnotations(a.annotations, b.annotations)
|
||||||
def sameStructure(a: Structure, b: Structure): Boolean =
|
def sameStructure(a: Structure, b: Structure): Boolean =
|
||||||
samePending(a,b)(sameStructureDirect)
|
samePending(a,b)(sameStructureDirect)
|
||||||
|
|
||||||
private[this] def samePending[T](a: T, b: T)(f: (T,T) => Boolean): Boolean =
|
private[this] def samePending[T](a: T, b: T)(f: (T,T) => Boolean): Boolean =
|
||||||
if(pending add ((a,b)) ) f(a,b) else true
|
if(pending add ((a,b)) ) f(a,b) else true
|
||||||
|
|
||||||
def sameStructureDirect(a: Structure, b: Structure): Boolean =
|
def sameStructureDirect(a: Structure, b: Structure): Boolean =
|
||||||
|
{
|
||||||
sameSeq(a.parents, b.parents)(sameType) &&
|
sameSeq(a.parents, b.parents)(sameType) &&
|
||||||
sameMembers(a.declared, b.declared) &&
|
sameMembers(a.declared, b.declared) &&
|
||||||
sameMembers(a.inherited, b.inherited)
|
sameMembers(a.inherited, b.inherited)
|
||||||
|
}
|
||||||
|
|
||||||
def sameMembers(a: Seq[Definition], b: Seq[Definition]): Boolean =
|
def sameMembers(a: Seq[Definition], b: Seq[Definition]): Boolean =
|
||||||
sameDefinitions(a, b, false)
|
sameDefinitions(a, b, false)
|
||||||
|
|
||||||
def sameSimpleType(a: SimpleType, b: SimpleType): Boolean =
|
def sameSimpleType(a: SimpleType, b: SimpleType): Boolean =
|
||||||
|
samePending(a,b)(sameSimpleTypeDirect)
|
||||||
|
def sameSimpleTypeDirect(a: SimpleType, b: SimpleType): Boolean =
|
||||||
(a, b) match
|
(a, b) match
|
||||||
{
|
{
|
||||||
case (pa: Projection, pb: Projection) => debug(sameProjection(pa, pb), "Different projection")
|
case (pa: Projection, pb: Projection) => debug(sameProjection(pa, pb), "Different projection")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue