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);
}
}
Aggregations