package org.checkerframework.common.reflection;

import com.sun.source.tree.MethodInvocationTree;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import org.checkerframework.framework.type.AnnotatedTypeFactory;
import org.checkerframework.framework.type.AnnotatedTypeFactory.ParameterizedExecutableType;

/**
 * Interface for reflection resolvers that handle reflective method calls such as {@link
 * Method#invoke(Object, Object...)} or {@link Constructor#newInstance(Object...)}.
 *
 * @checker_framework.manual #reflection-resolution Reflection resolution
 */
public interface ReflectionResolver {
  /** The "method name" of constructors. */
  public static final String INIT = "<init>";

  /**
   * A list containing just the "method name" of constructors. Clients must not modify this list.
   */
  public static final List<String> INIT_LIST = Collections.singletonList(INIT);

  /**
   * Determines whether the given tree represents a reflective method or constructor call.
   *
   * @return {@code true} iff tree is a reflective method invocation, {@code false} otherwise
   */
  public boolean isReflectiveMethodInvocation(MethodInvocationTree tree);

  /**
   * Resolve reflection and return the result of {@code factory.methodFromUse} for the actual,
   * resolved method or constructor call. If the reflective method cannot be resolved the original
   * result ({@code origResult}) is returned.
   *
   * @param factory the currently used AnnotatedTypeFactory
   * @param tree the reflective invocation tree (m.invoke or c.newInstance)
   * @param origResult the original result for the unresolved, reflective method call
   */
  public ParameterizedExecutableType resolveReflectiveCall(
      AnnotatedTypeFactory factory,
      MethodInvocationTree tree,
      ParameterizedExecutableType origResult);
}
