Interface TypeArgumentInference
- All Known Implementing Classes:
DefaultTypeArgumentInference
public interface TypeArgumentInference
Instances of TypeArgumentInference are used to infer the types of method type arguments when no
explicit arguments are provided.
e.g. If we have a method declaration:
<A,B> B method(A a, B b) {...}
And an invocation of that method:
method("some Str", 35);
TypeArgumentInference will determine what the type arguments to type parameters A and B are. In
Java, if T(A) = the type argument for a, in the above example T(A) == String and T(B) == Integer
For the Checker Framework we also need to infer reasonable annotations for these type arguments. For information on inferring type arguments see the documentation in JLS7 and JLS8: https://docs.oracle.com/javase/specs/jls/se8/html/jls-18.html https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.7
Note: It appears that Java 8 greatly improved the type argument inference and related error messaging but I have found it useful to consult the JLS 7 as well.
-
Method Summary
Modifier and TypeMethodDescriptioninferTypeArgs
(AnnotatedTypeFactory typeFactory, ExpressionTree invocation, ExecutableElement methodElem, AnnotatedTypeMirror.AnnotatedExecutableType methodType) Infer the type arguments for the method or constructor invocation given by invocation.
-
Method Details
-
inferTypeArgs
Map<TypeVariable,AnnotatedTypeMirror> inferTypeArgs(AnnotatedTypeFactory typeFactory, ExpressionTree invocation, ExecutableElement methodElem, AnnotatedTypeMirror.AnnotatedExecutableType methodType) Infer the type arguments for the method or constructor invocation given by invocation.- Parameters:
typeFactory
- the type factory used to create methodTypeinvocation
- a tree representing the method or constructor invocation for which we are inferring type argumentsmethodElem
- the element for the declaration of the method being invokedmethodType
- the declaration type of method elem- Returns:
- a mapping between the Java type parameter and the annotated type that was inferred for it. Note: We use the Java TypeVariable type because this uniquely identifies a declaration where as two uses of an AnnotatedTypeVariable may be uses of the same declaration but are not .equals to each other.
-