All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.checkerframework.common.reflection.ReflectionResolver Maven / Gradle / Ivy

package org.checkerframework.common.reflection;

import com.sun.source.tree.MethodInvocationTree;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;
import org.checkerframework.framework.type.AnnotatedTypeFactory;
import org.checkerframework.framework.type.AnnotatedTypeMirror;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType;
import org.checkerframework.javacutil.Pair;

/**
 * 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
 * @author rjust
 */
public interface ReflectionResolver {
    /** Constant for "method name" of constructors */
    public static final String 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 Pair> resolveReflectiveCall(
            AnnotatedTypeFactory factory,
            MethodInvocationTree tree,
            Pair> origResult);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy