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

org.checkerframework.javacutil.InternalUtils Maven / Gradle / Ivy

Go to download

The Checker Framework enhances Java's type system to make it more powerful and useful. This lets software developers detect and prevent errors in their Java programs. The Checker Framework includes compiler plug-ins ("checkers") that find bugs or verify their absence. It also permits you to write your own compiler plug-ins.

There is a newer version: 3.48.2
Show newest version
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;
import org.checkerframework.checker.nullness.qual.Nullable;

/** 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 @Nullable ClassLoader getClassLoaderForClass(Class 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());
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy