Search in sources :

Example 1 with Env

use of com.sun.tools.javac.comp.Env in project checker-framework by typetools.

the class DefaultReflectionResolver method getSymbol.

private Symbol getSymbol(String className, Env<AttrContext> env, Names names, Resolve resolve) {
    Method loadClass;
    try {
        loadClass = Resolve.class.getDeclaredMethod("loadClass", Env.class, Name.class, RecoveryLoadClass.class);
        loadClass.setAccessible(true);
    } catch (SecurityException | NoSuchMethodException | IllegalArgumentException e) {
        // A problem with javac is serious and must be reported.
        throw new BugInCF("Error in obtaining reflective method.", e);
    }
    try {
        RecoveryLoadClass noRecovery = (e, n) -> null;
        return (Symbol) loadClass.invoke(resolve, env, names.fromString(className), noRecovery);
    } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
        // A problem with javac is serious and must be reported.
        throw new BugInCF("Error in invoking reflective method.", e);
    }
}
Also used : MethodSymbol(com.sun.tools.javac.code.Symbol.MethodSymbol) AnnotatedArrayType(org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedArrayType) BugInCF(org.checkerframework.javacutil.BugInCF) JavacScope(com.sun.tools.javac.api.JavacScope) ClassSymbol(com.sun.tools.javac.code.Symbol.ClassSymbol) JCExpression(com.sun.tools.javac.tree.JCTree.JCExpression) MethodInvocationTree(com.sun.source.tree.MethodInvocationTree) TypeTag(com.sun.tools.javac.code.TypeTag) Trees(com.sun.source.util.Trees) Method(java.lang.reflect.Method) TreePath(com.sun.source.util.TreePath) Symbol(com.sun.tools.javac.code.Symbol) Set(java.util.Set) Env(com.sun.tools.javac.comp.Env) TreeUtils(org.checkerframework.javacutil.TreeUtils) InvocationTargetException(java.lang.reflect.InvocationTargetException) TypeKind(javax.lang.model.type.TypeKind) ParameterizedExecutableType(org.checkerframework.framework.type.AnnotatedTypeFactory.ParameterizedExecutableType) List(java.util.List) Flags(com.sun.tools.javac.code.Flags) Context(com.sun.tools.javac.util.Context) Name(com.sun.tools.javac.util.Name) Type(com.sun.tools.javac.code.Type) VariableElement(javax.lang.model.element.VariableElement) Constructor(java.lang.reflect.Constructor) AttrContext(com.sun.tools.javac.comp.AttrContext) ArrayList(java.util.ArrayList) RecoveryLoadClass(com.sun.tools.javac.comp.Resolve.RecoveryLoadClass) UnknownMethod(org.checkerframework.common.reflection.qual.UnknownMethod) NewClassTree(com.sun.source.tree.NewClassTree) JCNewClass(com.sun.tools.javac.tree.JCTree.JCNewClass) ElementFilter(javax.lang.model.util.ElementFilter) AnnotationUtils(org.checkerframework.javacutil.AnnotationUtils) JavacProcessingEnvironment(com.sun.tools.javac.processing.JavacProcessingEnvironment) MethodVal(org.checkerframework.common.reflection.qual.MethodVal) NewInstance(org.checkerframework.common.reflection.qual.NewInstance) AnnotatedTypeMirror(org.checkerframework.framework.type.AnnotatedTypeMirror) ElementKind(javax.lang.model.element.ElementKind) ExpressionTree(com.sun.source.tree.ExpressionTree) ExecutableElement(javax.lang.model.element.ExecutableElement) TreeMaker(com.sun.tools.javac.tree.TreeMaker) BaseTypeChecker(org.checkerframework.common.basetype.BaseTypeChecker) Names(com.sun.tools.javac.util.Names) AnnotationMirror(javax.lang.model.element.AnnotationMirror) AnnotatedTypeFactory(org.checkerframework.framework.type.AnnotatedTypeFactory) Invoke(org.checkerframework.common.reflection.qual.Invoke) TypeMirror(javax.lang.model.type.TypeMirror) AnnotationProvider(org.checkerframework.javacutil.AnnotationProvider) JCMethodInvocation(com.sun.tools.javac.tree.JCTree.JCMethodInvocation) ProcessingEnvironment(javax.annotation.processing.ProcessingEnvironment) Collections(java.util.Collections) Resolve(com.sun.tools.javac.comp.Resolve) MethodSymbol(com.sun.tools.javac.code.Symbol.MethodSymbol) ClassSymbol(com.sun.tools.javac.code.Symbol.ClassSymbol) Symbol(com.sun.tools.javac.code.Symbol) RecoveryLoadClass(com.sun.tools.javac.comp.Resolve.RecoveryLoadClass) Method(java.lang.reflect.Method) UnknownMethod(org.checkerframework.common.reflection.qual.UnknownMethod) Env(com.sun.tools.javac.comp.Env) BugInCF(org.checkerframework.javacutil.BugInCF) Resolve(com.sun.tools.javac.comp.Resolve) InvocationTargetException(java.lang.reflect.InvocationTargetException) Name(com.sun.tools.javac.util.Name)

Example 2 with Env

use of com.sun.tools.javac.comp.Env in project error-prone by google.

the class Template method callCheckMethod.

/**
 * Reflectively invoke Resolve.checkMethod(), which despite being package-private is apparently
 * the only useful entry-point into javac8's type inference implementation.
 */
private MethodType callCheckMethod(Warner warner, Inliner inliner, Object resultInfo, List<Type> actualArgTypes, MethodSymbol methodSymbol, Type site, Env<AttrContext> env) throws InferException {
    try {
        Method checkMethod;
        checkMethod = Resolve.class.getDeclaredMethod("checkMethod", Env.class, Type.class, Symbol.class, Class.forName(// ResultInfo is package-private
        "com.sun.tools.javac.comp.Attr$ResultInfo"), List.class, List.class, Warner.class);
        checkMethod.setAccessible(true);
        return (MethodType) checkMethod.invoke(Resolve.instance(inliner.getContext()), env, site, methodSymbol, resultInfo, actualArgTypes, /*freeTypeVariables=*/
        List.<Type>nil(), warner);
    } catch (InvocationTargetException e) {
        if (e.getCause() instanceof Resolve.InapplicableMethodException) {
            throw new InferException(ImmutableList.of(((Resolve.InapplicableMethodException) e.getTargetException()).getDiagnostic()));
        }
        throw new LinkageError(e.getMessage(), e.getCause());
    } catch (ReflectiveOperationException e) {
        throw new LinkageError(e.getMessage(), e);
    }
}
Also used : MethodType(com.sun.tools.javac.code.Type.MethodType) MethodSymbol(com.sun.tools.javac.code.Symbol.MethodSymbol) Symbol(com.sun.tools.javac.code.Symbol) Method(java.lang.reflect.Method) Env(com.sun.tools.javac.comp.Env) Resolve(com.sun.tools.javac.comp.Resolve) InvocationTargetException(java.lang.reflect.InvocationTargetException) Warner(com.sun.tools.javac.util.Warner) MethodType(com.sun.tools.javac.code.Type.MethodType) Type(com.sun.tools.javac.code.Type) List(com.sun.tools.javac.util.List) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList)

Aggregations

Symbol (com.sun.tools.javac.code.Symbol)2 MethodSymbol (com.sun.tools.javac.code.Symbol.MethodSymbol)2 Type (com.sun.tools.javac.code.Type)2 Env (com.sun.tools.javac.comp.Env)2 Resolve (com.sun.tools.javac.comp.Resolve)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 Method (java.lang.reflect.Method)2 ArrayList (java.util.ArrayList)2 ImmutableList (com.google.common.collect.ImmutableList)1 ExpressionTree (com.sun.source.tree.ExpressionTree)1 MethodInvocationTree (com.sun.source.tree.MethodInvocationTree)1 NewClassTree (com.sun.source.tree.NewClassTree)1 TreePath (com.sun.source.util.TreePath)1 Trees (com.sun.source.util.Trees)1 JavacScope (com.sun.tools.javac.api.JavacScope)1 Flags (com.sun.tools.javac.code.Flags)1 ClassSymbol (com.sun.tools.javac.code.Symbol.ClassSymbol)1 MethodType (com.sun.tools.javac.code.Type.MethodType)1 TypeTag (com.sun.tools.javac.code.TypeTag)1 AttrContext (com.sun.tools.javac.comp.AttrContext)1