| package org.checkerframework.javacutil; |
| |
| import com.sun.source.tree.Tree; |
| import com.sun.tools.javac.processing.JavacProcessingEnvironment; |
| import com.sun.tools.javac.util.Context; |
| import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; |
| import javax.annotation.processing.ProcessingEnvironment; |
| |
| /** Miscellaneous static utility methods. */ |
| public class InternalUtils { |
| |
| // Class cannot be instantiated. |
| private InternalUtils() { |
| throw new AssertionError("Class InternalUtils cannot be instantiated."); |
| } |
| |
| /** |
| * Helper function to extract the javac Context from the javac processing environment. |
| * |
| * @param env the processing environment |
| * @return the javac Context |
| */ |
| public static Context getJavacContext(ProcessingEnvironment env) { |
| return ((JavacProcessingEnvironment) env).getContext(); |
| } |
| |
| /** |
| * Obtain the class loader for {@code clazz}. If that is not available, return the system class |
| * loader. |
| * |
| * @param clazz the class whose class loader to find |
| * @return the class loader used to {@code clazz}, or the system class loader, or null if both are |
| * unavailable |
| */ |
| public static ClassLoader getClassLoaderForClass(Class<? extends Object> clazz) { |
| ClassLoader classLoader = clazz.getClassLoader(); |
| return classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader; |
| } |
| |
| /** |
| * Compares tree1 to tree2 by the position at which a diagnostic (e.g., an error message) for the |
| * tree should be printed. |
| */ |
| public static int compareDiagnosticPosition(Tree tree1, Tree tree2) { |
| DiagnosticPosition pos1 = (DiagnosticPosition) tree1; |
| DiagnosticPosition pos2 = (DiagnosticPosition) tree2; |
| |
| int preferred = Integer.compare(pos1.getPreferredPosition(), pos2.getPreferredPosition()); |
| if (preferred != 0) { |
| return preferred; |
| } |
| |
| return Integer.compare(pos1.getStartPosition(), pos2.getStartPosition()); |
| } |
| } |