| package org.checkerframework.framework.type.poly; |
| |
| import com.sun.source.tree.MethodInvocationTree; |
| import com.sun.source.tree.NewClassTree; |
| import javax.lang.model.element.VariableElement; |
| import org.checkerframework.framework.qual.PolymorphicQualifier; |
| import org.checkerframework.framework.type.AnnotatedTypeMirror; |
| import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType; |
| |
| /** |
| * Interface to implement qualifier polymorphism. |
| * |
| * @see PolymorphicQualifier |
| * @see AbstractQualifierPolymorphism |
| * @see DefaultQualifierPolymorphism |
| */ |
| public interface QualifierPolymorphism { |
| |
| /** |
| * Resolves polymorphism annotations for the given type. |
| * |
| * @param tree the tree associated with the type |
| * @param type the type to annotate; is side-effected by this method |
| */ |
| void resolve(MethodInvocationTree tree, AnnotatedExecutableType type); |
| |
| /** |
| * Resolves polymorphism annotations for the given type. |
| * |
| * @param tree the tree associated with the type |
| * @param type the type to annotate; is side-effected by this method |
| */ |
| void resolve(NewClassTree tree, AnnotatedExecutableType type); |
| |
| /** |
| * Resolves polymorphism annotations for the given type. |
| * |
| * @param functionalInterface the function type of {@code memberReference} |
| * @param memberReference the type of a member reference; is side-effected by this method |
| */ |
| void resolve( |
| AnnotatedExecutableType functionalInterface, AnnotatedExecutableType memberReference); |
| |
| /** |
| * Resolves polymorphism annotations for the given field type. |
| * |
| * @param field field element to whose poly annotation must be resolved |
| * @param owner the type of the object whose field is being typed |
| * @param type type of the field which still has poly annotations |
| */ |
| void resolve(VariableElement field, AnnotatedTypeMirror owner, AnnotatedTypeMirror type); |
| } |