package org.checkerframework.framework.util.typeinference;

import com.sun.source.tree.ExpressionTree;
import java.util.Map;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.type.TypeVariable;
import org.checkerframework.framework.type.AnnotatedTypeFactory;
import org.checkerframework.framework.type.AnnotatedTypeMirror;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType;

/**
 * Instances of TypeArgumentInference are used to infer the types of method type arguments when no
 * explicit arguments are provided.
 *
 * <p>e.g. If we have a method declaration:
 *
 * <pre>{@code
 * <A,B> B method(A a, B b) {...}
 * }</pre>
 *
 * And an invocation of that method:
 *
 * <pre>{@code
 * method("some Str", 35);
 * }</pre>
 *
 * 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
 *
 * <p>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
 *
 * <p>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.
 */
public interface TypeArgumentInference {

  /**
   * Infer the type arguments for the method or constructor invocation given by invocation.
   *
   * @param typeFactory the type factory used to create methodType
   * @param invocation a tree representing the method or constructor invocation for which we are
   *     inferring type arguments
   * @param methodElem the element for the declaration of the method being invoked
   * @param methodType the declaration type of method elem
   * @return 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.
   */
  public Map<TypeVariable, AnnotatedTypeMirror> inferTypeArgs(
      final AnnotatedTypeFactory typeFactory,
      final ExpressionTree invocation,
      final ExecutableElement methodElem,
      final AnnotatedExecutableType methodType);
}
