Class TUConstraint
java.lang.Object
org.checkerframework.framework.util.typeinference.constraint.TUConstraint
Subclasses of TUConstraint represent constraints between a type parameter, whose type arguments
are being inferred, and the types used to do that inference. These constraints are used by the
TASolver to infer arguments.
TU constraints come in the classic form of subtype, supertype, and equality constraints.
T <: U
-- implies T is a subtype of U, it is represented by TSubU
T >: U
-- implies T is a supertype of U, it is represented by TSuperU
T = U
-- implies T is equal to U, it is represented by TIsU
Note, it is important that the type parameter is represented by an AnnotatedTypeVariable because if a use of the type parameter has a primary annotation, then the two types represented in by a TUConstraint are NOT constrained in the hierarchy of that annotation. e.g.
<T> void method(List<@NonNull T> t1, T t2)
method(new ArrayList<@NonNull String>(), null);
The above method call would eventually be reduced to constraints: [@NonNull String
== @NonNull T, @Nullable null <: T]
In this example, if we did not ignore the first constraint then the type argument would be exactly @NonNull String and the second argument would be invalid. However, the correct inference would be @Nullable String and both arguments would be valid.
-
Field Summary
Modifier and TypeFieldDescriptionfinal AnnotatedTypeMirror
A type used to infer an argument for the typeVariable T.An AnnotatedTypeVariable representing a target type parameter for which we are inferring a type argument.final boolean
Whether or not U is a type from an argument to the method. -
Constructor Summary
ModifierConstructorDescriptionprotected
TUConstraint
(AnnotatedTypeMirror.AnnotatedTypeVariable typeVariable, AnnotatedTypeMirror relatedType, boolean uIsArg) -
Method Summary
-
Field Details
-
typeVariable
An AnnotatedTypeVariable representing a target type parameter for which we are inferring a type argument. This is the T in the TUConstraints. -
uIsArg
public final boolean uIsArgWhether or not U is a type from an argument to the method.
-
-
Constructor Details
-
TUConstraint
protected TUConstraint(AnnotatedTypeMirror.AnnotatedTypeVariable typeVariable, AnnotatedTypeMirror relatedType, boolean uIsArg)
-
-
Method Details