< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java

Print this page
rev 2973 : JDK-8058150

*** 48,65 **** --- 48,67 ---- import com.sun.tools.javac.comp.Enter; import com.sun.tools.javac.file.JRTIndex; import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.javac.jvm.ClassReader; import com.sun.tools.javac.jvm.Profile; + import com.sun.tools.javac.platform.PlatformProvider; import com.sun.tools.javac.util.*; import static javax.tools.StandardLocation.*; import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.Kinds.Kind.*; import static com.sun.tools.javac.main.Option.*; + import com.sun.tools.javac.util.Dependencies.CompletionCause; /** * This class provides operations to locate class definitions * from the source and class files on the paths provided to javac.
*** 96,105 **** --- 98,112 ---- * Switch: Search classpath and sourcepath for classes before the * bootclasspath */ protected boolean userPathsFirst; + /** + * Switch: should read OTHER classfiles (.sig files) from PLATFORM_CLASS_PATH. + */ + private boolean allowSigFiles; + /** The log to use for verbose output */ final Log log; /** The symbol table. */
*** 190,199 **** --- 197,207 ---- Options options = Options.instance(context); verbose = options.isSet(VERBOSE); cacheCompletionFailure = options.isUnset("dev"); preferSource = "source".equals(options.get("-Xprefer")); userPathsFirst = options.isSet(XXUSERPATHSFIRST); + allowSigFiles = context.get(PlatformProvider.class) != null; completionFailureName = options.isSet("failcomplete") ? names.fromString(options.get("failcomplete")) : null;
*** 335,345 **** } currentClassFile = classfile; if (verbose) { log.printVerbose("loading", currentClassFile.toString()); } ! if (classfile.getKind() == JavaFileObject.Kind.CLASS) { reader.readClassFile(c); c.flags_field |= getSupplementaryFlags(c); } else { if (!sourceCompleter.isTerminal()) { sourceCompleter.complete(c); --- 343,354 ---- } currentClassFile = classfile; if (verbose) { log.printVerbose("loading", currentClassFile.toString()); } ! if (classfile.getKind() == JavaFileObject.Kind.CLASS || ! classfile.getKind() == JavaFileObject.Kind.OTHER) { reader.readClassFile(c); c.flags_field |= getSupplementaryFlags(c); } else { if (!sourceCompleter.isTerminal()) { sourceCompleter.complete(c);
*** 416,426 **** if ((p.flags_field & EXISTS) == 0) for (Symbol q = p; q != null && q.kind == PCK; q = q.owner) q.flags_field |= EXISTS; JavaFileObject.Kind kind = file.getKind(); int seen; ! if (kind == JavaFileObject.Kind.CLASS) seen = CLASS_SEEN; else seen = SOURCE_SEEN; String binaryName = fileManager.inferBinaryName(currentLoc, file); int lastDot = binaryName.lastIndexOf("."); --- 425,435 ---- if ((p.flags_field & EXISTS) == 0) for (Symbol q = p; q != null && q.kind == PCK; q = q.owner) q.flags_field |= EXISTS; JavaFileObject.Kind kind = file.getKind(); int seen; ! if (kind == JavaFileObject.Kind.CLASS || kind == JavaFileObject.Kind.OTHER) seen = CLASS_SEEN; else seen = SOURCE_SEEN; String binaryName = fileManager.inferBinaryName(currentLoc, file); int lastDot = binaryName.lastIndexOf(".");
*** 579,599 **** */ private void scanPlatformPath(PackageSymbol p) throws IOException { fillIn(p, PLATFORM_CLASS_PATH, fileManager.list(PLATFORM_CLASS_PATH, p.fullname.toString(), ! EnumSet.of(JavaFileObject.Kind.CLASS), false)); } // where private void fillIn(PackageSymbol p, Location location, Iterable<JavaFileObject> files) { currentLoc = location; for (JavaFileObject fo : files) { switch (fo.getKind()) { case CLASS: case SOURCE: { // TODO pass binaryName to includeClassFile String binaryName = fileManager.inferBinaryName(currentLoc, fo); String simpleName = binaryName.substring(binaryName.lastIndexOf(".") + 1); --- 588,620 ---- */ private void scanPlatformPath(PackageSymbol p) throws IOException { fillIn(p, PLATFORM_CLASS_PATH, fileManager.list(PLATFORM_CLASS_PATH, p.fullname.toString(), ! allowSigFiles ? EnumSet.of(JavaFileObject.Kind.CLASS, ! JavaFileObject.Kind.OTHER) ! : EnumSet.of(JavaFileObject.Kind.CLASS), false)); } // where + @SuppressWarnings("fallthrough") private void fillIn(PackageSymbol p, Location location, Iterable<JavaFileObject> files) { currentLoc = location; for (JavaFileObject fo : files) { switch (fo.getKind()) { + case OTHER: + boolean sigFile = location == PLATFORM_CLASS_PATH && + allowSigFiles && + fo.getName().endsWith(".sig"); + if (!sigFile) { + extraFileActions(p, fo); + break; + } + //intentional fall-through: case CLASS: case SOURCE: { // TODO pass binaryName to includeClassFile String binaryName = fileManager.inferBinaryName(currentLoc, fo); String simpleName = binaryName.substring(binaryName.lastIndexOf(".") + 1);
< prev index next >