Class StructuralEqualityComparer
java.lang.Object
org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor<Boolean,Void>
org.checkerframework.framework.type.StructuralEqualityComparer
- All Implemented Interfaces:
AtmComboVisitor<Boolean,
Void>
A visitor used to compare two type mirrors for "structural" equality. Structural equality implies
that, for two objects, all fields are also structurally equal and for primitives their values are
equal.
See also DefaultTypeHierarchy, and SubtypeVisitHistory
-
Field Summary
Modifier and TypeFieldDescriptionprotected final StructuralEqualityVisitHistory
History saving the result of previous comparisons. -
Constructor Summary
ConstructorDescriptionStructuralEqualityComparer
(StructuralEqualityVisitHistory typeargVisitHistory) Create a StructuralEqualityComparer. -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
areAllEqual
(Collection<? extends AnnotatedTypeMirror> types1, Collection<? extends AnnotatedTypeMirror> types2) Compare each type in types1 and types2 pairwise and return true if they are all equal.boolean
areEqualInHierarchy
(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, AnnotationMirror top) protected boolean
arePrimaryAnnosEqual
(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2) Return true if type1 and type2 have the same set of annotations.protected boolean
checkOrAreEqual
(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2) First check visitHistory to see if type1 and type2 have been compared once already.defaultAction
(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, Void p) Called by the default implementation of every AbstractAtmComboVisitor visit method.defaultErrorMessage
(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, Void p) Called for every combination that isn't specifically handled.visitArray_Array
(AnnotatedTypeMirror.AnnotatedArrayType type1, AnnotatedTypeMirror.AnnotatedArrayType type2, Void p) Two arrays are equal if: Their sets of primary annotations are equal, and Their component types are equalvisitDeclared_Declared
(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, Void p) 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 rawvisitDeclared_Primitive
(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedPrimitiveType type2, Void p) visitIntersection_Intersection
(AnnotatedTypeMirror.AnnotatedIntersectionType type1, AnnotatedTypeMirror.AnnotatedIntersectionType type2, Void p) Two intersection types are equal if: Their sets of primary annotations are equal Their sets of bounds (the types being intersected) are equalvisitNull_Null
(AnnotatedTypeMirror.AnnotatedNullType type1, AnnotatedTypeMirror.AnnotatedNullType type2, Void unused) visitPrimitive_Declared
(AnnotatedTypeMirror.AnnotatedPrimitiveType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, Void p) visitPrimitive_Primitive
(AnnotatedTypeMirror.AnnotatedPrimitiveType type1, AnnotatedTypeMirror.AnnotatedPrimitiveType type2, Void p) Two primitive types are equal if: Their sets of primary annotations are equalvisitTypevar_Typevar
(AnnotatedTypeMirror.AnnotatedTypeVariable type1, AnnotatedTypeMirror.AnnotatedTypeVariable type2, Void p) Two type variables are equal if: Their bounds are equal Note: Primary annotations will be taken into account when the bounds are retrievedvisitWildcard_Wildcard
(AnnotatedTypeMirror.AnnotatedWildcardType type1, AnnotatedTypeMirror.AnnotatedWildcardType type2, Void p) Two wildcards are equal if: Their bounds are equal Note: Primary annotations will be taken into account when the bounds are retrievedMethods inherited from class org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor
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_Typevar, visitWildcard_Union
-
Field Details
-
visitHistory
History saving the result of previous comparisons.
-
-
Constructor Details
-
StructuralEqualityComparer
Create a StructuralEqualityComparer.- Parameters:
typeargVisitHistory
- history saving the result of previous comparisons
-
-
Method Details
-
defaultAction
Description copied from interface:AtmComboVisitor
Called by the default implementation of every AbstractAtmComboVisitor visit method. This method issues a runtime exception by default. In general, it should handle the case where a visit method has been called with a pair of type mirrors that should never be passed to this particular visitor.- Parameters:
type1
- the first AnnotatedTypeMirror parameter to the visit method calledtype2
- the second AnnotatedTypeMirror parameter to the visit method calledp
- subtype specific parameter passed to every visit method- Returns:
- a value of type RETURN_TYPE, if no exception is thrown
-
defaultErrorMessage
Called for every combination that isn't specifically handled.- Parameters:
type1
- the first AnnotatedTypeMirror parameter to the visit method calledtype2
- the second AnnotatedTypeMirror parameter to the visit method calledp
- subtype specific parameter passed to every visit method- Returns:
- error message explaining the two types' classes are not the same
-
areEqualInHierarchy
public boolean areEqualInHierarchy(AnnotatedTypeMirror type1, AnnotatedTypeMirror type2, AnnotationMirror top) -
arePrimaryAnnosEqual
Return true if type1 and type2 have the same set of annotations.- Parameters:
type1
- a typetype2
- a type- Returns:
- true if type1 and type2 have the same set of annotations
-
areAllEqual
protected boolean areAllEqual(Collection<? extends AnnotatedTypeMirror> types1, Collection<? extends AnnotatedTypeMirror> types2) Compare each type in types1 and types2 pairwise and return true if they are all equal. This method throws an exceptions if types1.size() != types2.size()- Returns:
- true if for each pair (t1 = types1.get(i); t2 = types2.get(i)), areEqual(t1,t2)
-
checkOrAreEqual
First check visitHistory to see if type1 and type2 have been compared once already. If so return true; otherwise compare them and put them in visitHistory.- Parameters:
type1
- the first typetype2
- the second type- Returns:
- whether the two types are equal
-
visitArray_Array
public Boolean visitArray_Array(AnnotatedTypeMirror.AnnotatedArrayType type1, AnnotatedTypeMirror.AnnotatedArrayType type2, Void p) Two arrays are equal if:- Their sets of primary annotations are equal, and
- Their component types are equal
- Specified by:
visitArray_Array
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitArray_Array
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitDeclared_Declared
public Boolean visitDeclared_Declared(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, Void p) 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
- Specified by:
visitDeclared_Declared
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitDeclared_Declared
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitIntersection_Intersection
public Boolean visitIntersection_Intersection(AnnotatedTypeMirror.AnnotatedIntersectionType type1, AnnotatedTypeMirror.AnnotatedIntersectionType type2, Void p) Two intersection types are equal if:- Their sets of primary annotations are equal
- Their sets of bounds (the types being intersected) are equal
- Specified by:
visitIntersection_Intersection
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitIntersection_Intersection
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitPrimitive_Primitive
public Boolean visitPrimitive_Primitive(AnnotatedTypeMirror.AnnotatedPrimitiveType type1, AnnotatedTypeMirror.AnnotatedPrimitiveType type2, Void p) Two primitive types are equal if:- Their sets of primary annotations are equal
- Specified by:
visitPrimitive_Primitive
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitPrimitive_Primitive
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitNull_Null
public Boolean visitNull_Null(AnnotatedTypeMirror.AnnotatedNullType type1, AnnotatedTypeMirror.AnnotatedNullType type2, Void unused) - Specified by:
visitNull_Null
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitNull_Null
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitTypevar_Typevar
public Boolean visitTypevar_Typevar(AnnotatedTypeMirror.AnnotatedTypeVariable type1, AnnotatedTypeMirror.AnnotatedTypeVariable type2, Void p) Two type variables are equal if:- Their bounds are equal
- Specified by:
visitTypevar_Typevar
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitTypevar_Typevar
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitWildcard_Wildcard
public Boolean visitWildcard_Wildcard(AnnotatedTypeMirror.AnnotatedWildcardType type1, AnnotatedTypeMirror.AnnotatedWildcardType type2, Void p) Two wildcards are equal if:- Their bounds are equal
- Specified by:
visitWildcard_Wildcard
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitWildcard_Wildcard
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitDeclared_Primitive
public Boolean visitDeclared_Primitive(AnnotatedTypeMirror.AnnotatedDeclaredType type1, AnnotatedTypeMirror.AnnotatedPrimitiveType type2, Void p) - Specified by:
visitDeclared_Primitive
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitDeclared_Primitive
in classAbstractAtmComboVisitor<Boolean,
Void>
-
visitPrimitive_Declared
public Boolean visitPrimitive_Declared(AnnotatedTypeMirror.AnnotatedPrimitiveType type1, AnnotatedTypeMirror.AnnotatedDeclaredType type2, Void p) - Specified by:
visitPrimitive_Declared
in interfaceAtmComboVisitor<Boolean,
Void> - Overrides:
visitPrimitive_Declared
in classAbstractAtmComboVisitor<Boolean,
Void>
-