public class StructuralEqualityComparer extends AbstractAtmComboVisitor<Boolean,VisitHistory>
See also DefaultTypeHierarchy, and VisitHistory
Constructor and Description |
---|
StructuralEqualityComparer() |
StructuralEqualityComparer(DefaultRawnessComparer fallback) |
Modifier and Type | Method and Description |
---|---|
protected boolean |
areAllEqual(Collection<? extends AnnotatedTypeMirror> types1,
Collection<? extends AnnotatedTypeMirror> types2,
VisitHistory visited)
Compare each type in types1 and types2 pairwise and return true if they are all equal.
|
boolean |
areEqual(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2)
Returns true if type1 and type2 are structurally equivalent.
|
boolean |
areEqual(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2,
VisitHistory visited)
The same as areEqual(type1, type2) except now a visited is passed along in order to avoid
infinite recursion on recursive bounds.
|
boolean |
areEqualInHierarchy(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2,
AnnotationMirror top) |
protected boolean |
arePrimeAnnosEqual(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2)
Return true if type1 and type2 have the same set of annotations.
|
boolean |
boundsMatch(AnnotatedTypeMirror.AnnotatedTypeVariable type1,
AnnotatedTypeMirror.AnnotatedTypeVariable type2) |
protected boolean |
checkOrAreEqual(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2,
VisitHistory visited)
First check visited to see if type1 and type2 have been compared once already.
|
protected Boolean |
defaultAction(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2,
VisitHistory visitHistory)
Called by the default implementation of every AbstractAtmComboVisitor visit method.
|
protected String |
defaultErrorMessage(AnnotatedTypeMirror type1,
AnnotatedTypeMirror type2,
VisitHistory visited)
Called for every combination in which !type1.getClass().equals(type2.getClass()) except for
Wildcard_Typevar.
|
Boolean |
visitArray_Array(AnnotatedTypeMirror.AnnotatedArrayType type1,
AnnotatedTypeMirror.AnnotatedArrayType type2,
VisitHistory visited)
Two arrays are equal if:
Their sets of primary annotations are equal, and
Their component types are equal
|
Boolean |
visitDeclared_Declared(AnnotatedTypeMirror.AnnotatedDeclaredType type1,
AnnotatedTypeMirror.AnnotatedDeclaredType type2,
VisitHistory visited)
Two declared types are equal if:
The types are of the same class/interfaces
Their sets of primary annotations are equal
Their sets of type arguments are equal or one type is raw
|
Boolean |
visitDeclared_Primitive(AnnotatedTypeMirror.AnnotatedDeclaredType type1,
AnnotatedTypeMirror.AnnotatedPrimitiveType type2,
VisitHistory visitHistory) |
Boolean |
visitIntersection_Intersection(AnnotatedTypeMirror.AnnotatedIntersectionType type1,
AnnotatedTypeMirror.AnnotatedIntersectionType type2,
VisitHistory visited)
//TODO: SHOULD PRIMARY ANNOTATIONS OVERRIDE INDIVIDUAL BOUND ANNOTATIONS? //TODO: IF SO THEN
WE SHOULD REMOVE THE arePrimeAnnosEqual AND FIX AnnotatedIntersectionType Two intersection
types are equal if:
Their sets of primary annotations are equal
Their sets of bounds (the types being intersected) are equal
|
Boolean |
visitNull_Null(AnnotatedTypeMirror.AnnotatedNullType type1,
AnnotatedTypeMirror.AnnotatedNullType type2,
VisitHistory visited)
Two null types are equal if:
Their sets of primary annotations are equal
|
Boolean |
visitPrimitive_Declared(AnnotatedTypeMirror.AnnotatedPrimitiveType type1,
AnnotatedTypeMirror.AnnotatedDeclaredType type2,
VisitHistory visitHistory) |
Boolean |
visitPrimitive_Primitive(AnnotatedTypeMirror.AnnotatedPrimitiveType type1,
AnnotatedTypeMirror.AnnotatedPrimitiveType type2,
VisitHistory visited)
Two primitive types are equal if:
Their sets of primary annotations are equal
|
protected Boolean |
visitTypeArgs(AnnotatedTypeMirror.AnnotatedDeclaredType type1,
AnnotatedTypeMirror.AnnotatedDeclaredType type2,
VisitHistory visited)
A helper class for visitDeclared_Declared.
|
Boolean |
visitTypevar_Typevar(AnnotatedTypeMirror.AnnotatedTypeVariable type1,
AnnotatedTypeMirror.AnnotatedTypeVariable type2,
VisitHistory visited)
Two type variables are equal if:
Their bounds are equal
Note: Primary annotations will be taken into account when the bounds are retrieved
|
Boolean |
visitWildcard_Typevar(AnnotatedTypeMirror.AnnotatedWildcardType type1,
AnnotatedTypeMirror.AnnotatedTypeVariable type2,
VisitHistory visited)
Since the Checker Framework doesn't engage in capture conversion, and since sometimes type
variables are "inferred" to be wildcards, this method allows the comparison of a wildcard to
a type variable even though they should never truly be equal.
|
Boolean |
visitWildcard_Wildcard(AnnotatedTypeMirror.AnnotatedWildcardType type1,
AnnotatedTypeMirror.AnnotatedWildcardType type2,
VisitHistory visited)
Two wildcards are equal if:
Their bounds are equal
Note: Primary annotations will be taken into account when the bounds are retrieved
|
visit, visitArray_Declared, visitArray_Executable, visitArray_Intersection, visitArray_None, visitArray_Null, visitArray_Primitive, visitArray_Typevar, visitArray_Union, visitArray_Wildcard, visitDeclared_Array, visitDeclared_Executable, visitDeclared_Intersection, visitDeclared_None, visitDeclared_Null, visitDeclared_Typevar, visitDeclared_Union, visitDeclared_Wildcard, visitExecutable_Array, visitExecutable_Declared, visitExecutable_Executable, visitExecutable_Intersection, visitExecutable_None, visitExecutable_Null, visitExecutable_Primitive, visitExecutable_Typevar, visitExecutable_Union, visitExecutable_Wildcard, visitIntersection_Array, visitIntersection_Declared, visitIntersection_Executable, visitIntersection_None, visitIntersection_Null, visitIntersection_Primitive, visitIntersection_Typevar, visitIntersection_Union, visitIntersection_Wildcard, visitNone_Array, visitNone_Declared, visitNone_Executable, visitNone_Intersection, visitNone_None, visitNone_Null, visitNone_Primitive, visitNone_Union, visitNone_Wildcard, visitNull_Array, visitNull_Declared, visitNull_Executable, visitNull_Intersection, visitNull_None, visitNull_Primitive, visitNull_Typevar, visitNull_Union, visitNull_Wildcard, visitPrimitive_Array, visitPrimitive_Executable, visitPrimitive_Intersection, visitPrimitive_None, visitPrimitive_Null, visitPrimitive_Typevar, visitPrimitive_Union, visitPrimitive_Wildcard, visitTypevar_Array, visitTypevar_Declared, visitTypevar_Executable, visitTypevar_Intersection, visitTypevar_None, visitTypevar_Null, visitTypevar_Primitive, visitTypevar_Union, visitTypevar_Wildcard, visitUnion_Array, visitUnion_Declared, visitUnion_Executable, visitUnion_Intersection, visitUnion_None, visitUnion_Null, visitUnion_Primitive, visitUnion_Typevar, visitUnion_Union, visitUnion_Wildcard, visitWildcard_Array, visitWildcard_Declared, visitWildcard_Executable, visitWildcard_Intersection, visitWildcard_None, visitWildcard_Null, visitWildcard_Primitive, visitWildcard_Union
public StructuralEqualityComparer()
public StructuralEqualityComparer(DefaultRawnessComparer fallback)
protected Boolean defaultAction(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, VisitHistory visitHistory)
AbstractAtmComboVisitor
defaultAction
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
type1
- the first AnnotatedTypeMirror parameter to the visit method calledtype2
- the second AnnotatedTypeMirror parameter to the visit method calledvisitHistory
- subtype specific parameter passed to every visit methodpublic boolean areEqual(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2)
public boolean areEqual(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, VisitHistory visited)
public boolean areEqualInHierarchy(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, AnnotationMirror top)
protected boolean arePrimeAnnosEqual(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2)
protected boolean areAllEqual(Collection<? extends AnnotatedTypeMirror> types1, Collection<? extends AnnotatedTypeMirror> types2, VisitHistory visited)
visited
- a store of what types have already been visitedprotected boolean checkOrAreEqual(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, VisitHistory visited)
protected String defaultErrorMessage(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, VisitHistory visited)
defaultErrorMessage
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
type1
- the first AnnotatedTypeMirror parameter to the visit method calledtype2
- the second AnnotatedTypeMirror parameter to the visit method calledvisited
- subtype specific parameter passed to every visit methodpublic Boolean visitArray_Array(AnnotatedTypeMirror.AnnotatedArrayType type1, AnnotatedTypeMirror.AnnotatedArrayType type2, VisitHistory visited)
visitArray_Array
in interface AtmComboVisitor<Boolean,VisitHistory>
visitArray_Array
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitDeclared_Declared(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, VisitHistory visited)
visitDeclared_Declared
in interface AtmComboVisitor<Boolean,VisitHistory>
visitDeclared_Declared
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
protected Boolean visitTypeArgs(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, VisitHistory visited)
public Boolean visitIntersection_Intersection(AnnotatedTypeMirror.AnnotatedIntersectionType type1, AnnotatedTypeMirror.AnnotatedIntersectionType type2, VisitHistory visited)
visitIntersection_Intersection
in interface AtmComboVisitor<Boolean,VisitHistory>
visitIntersection_Intersection
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitNull_Null(AnnotatedTypeMirror.AnnotatedNullType type1, AnnotatedTypeMirror.AnnotatedNullType type2, VisitHistory visited)
visitNull_Null
in interface AtmComboVisitor<Boolean,VisitHistory>
visitNull_Null
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitPrimitive_Primitive(AnnotatedTypeMirror.AnnotatedPrimitiveType type1, AnnotatedTypeMirror.AnnotatedPrimitiveType type2, VisitHistory visited)
visitPrimitive_Primitive
in interface AtmComboVisitor<Boolean,VisitHistory>
visitPrimitive_Primitive
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitTypevar_Typevar(AnnotatedTypeMirror.AnnotatedTypeVariable type1, AnnotatedTypeMirror.AnnotatedTypeVariable type2, VisitHistory visited)
visitTypevar_Typevar
in interface AtmComboVisitor<Boolean,VisitHistory>
visitTypevar_Typevar
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public boolean boundsMatch(AnnotatedTypeMirror.AnnotatedTypeVariable type1, AnnotatedTypeMirror.AnnotatedTypeVariable type2)
public Boolean visitWildcard_Wildcard(AnnotatedTypeMirror.AnnotatedWildcardType type1, AnnotatedTypeMirror.AnnotatedWildcardType type2, VisitHistory visited)
TODO: IDENTIFY TESTS THAT LEAD TO RECURSIVE BOUNDED WILDCARDS, PERHAPS THE RIGHT THING IS TO MOVE THE CODE THAT IDENTIFIES REFERENCES TO THE SAME WILDCARD TYPE HERE. WOULD WE EVER WANT TO HAVE A REFERENCE TO THE SAME WILDCARD WITH DIFFERENT ANNOTATIONS?
visitWildcard_Wildcard
in interface AtmComboVisitor<Boolean,VisitHistory>
visitWildcard_Wildcard
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitDeclared_Primitive(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedPrimitiveType type2, VisitHistory visitHistory)
visitDeclared_Primitive
in interface AtmComboVisitor<Boolean,VisitHistory>
visitDeclared_Primitive
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitPrimitive_Declared(AnnotatedTypeMirror.AnnotatedPrimitiveType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, VisitHistory visitHistory)
visitPrimitive_Declared
in interface AtmComboVisitor<Boolean,VisitHistory>
visitPrimitive_Declared
in class AbstractAtmComboVisitor<Boolean,VisitHistory>
public Boolean visitWildcard_Typevar(AnnotatedTypeMirror.AnnotatedWildcardType type1, AnnotatedTypeMirror.AnnotatedTypeVariable type2, VisitHistory visited)
A wildcard is equal tyo a type variable if:
visitWildcard_Typevar
in interface AtmComboVisitor<Boolean,VisitHistory>
visitWildcard_Typevar
in class AbstractAtmComboVisitor<Boolean,VisitHistory>