Search in sources :

Example 1 with DeferredDiagnosticHandler

use of com.sun.tools.javac.util.Log.DeferredDiagnosticHandler in project error-prone by google.

the class ASTHelpers method resolveExistingMethod.

/**
 * Given a Type ({@code base}), find the method named {@code name}, with the appropriate {@code
 * argTypes} and {@code tyargTypes} and return its MethodSymbol.
 *
 * <p>Ex:
 *
 * <pre>{@code
 * .....
 * class A {}
 * class B {
 *   public int hashCode() { return 42; }
 * }
 * .....
 *
 * MethodSymbol meth =  ASTHelpers.resolveExistingMethod(
 *    state,
 *    symbol,
 *    state.getName("hashCode"),
 *    ImmutableList.<Type>of(),
 *    ImmutableList.<Type>of());
 * }</pre>
 *
 * {@code meth} could be different MethodSymbol's depending on whether {@code symbol} represented
 * {@code B} or {@code A}. (B's hashCode method or Object#hashCode).
 *
 * <p>Do NOT call this method unless the method you're looking for is guaranteed to exist. A fatal
 * error will result otherwise. Note: a method can fail to exist if it was added in a newer
 * version of a library (you may be depending on version N of a library which added a method to a
 * class, but someone else could depend on version N-1 which didn't have that method).
 *
 * @return a MethodSymbol representing the method symbol resolved from the context of this type
 */
public static MethodSymbol resolveExistingMethod(VisitorState state, TypeSymbol base, Name name, Iterable<Type> argTypes, Iterable<Type> tyargTypes) {
    Resolve resolve = Resolve.instance(state.context);
    Enter enter = Enter.instance(state.context);
    Log log = Log.instance(state.context);
    DeferredDiagnosticHandler handler = new DeferredDiagnosticHandler(log);
    try {
        return resolve.resolveInternalMethod(/*pos*/
        null, enter.getEnv(base), base.type, name, com.sun.tools.javac.util.List.from(argTypes), com.sun.tools.javac.util.List.from(tyargTypes));
    } finally {
        log.popDiagnosticHandler(handler);
    }
}
Also used : Log(com.sun.tools.javac.util.Log) Enter(com.sun.tools.javac.comp.Enter) DeferredDiagnosticHandler(com.sun.tools.javac.util.Log.DeferredDiagnosticHandler) Resolve(com.sun.tools.javac.comp.Resolve)

Aggregations

Enter (com.sun.tools.javac.comp.Enter)1 Resolve (com.sun.tools.javac.comp.Resolve)1 Log (com.sun.tools.javac.util.Log)1 DeferredDiagnosticHandler (com.sun.tools.javac.util.Log.DeferredDiagnosticHandler)1