# HG changeset patch # User jlahoda@slc05kwy.us.oracle.com # Date 1432113909 25200 # Wed May 20 02:25:09 2015 -0700 # Node ID df065f6dc7fc6d2d66d200c115960da62d87a244 # Parent 6bc40a5172e8dcf807a061c94ab6843d11f9d203 JDK-8058150 diff --git a/src/jdk.compiler/share/classes/META-INF/services/com.sun.tools.javac.platform.PlatformProviderFactory b/src/jdk.compiler/share/classes/META-INF/services/com.sun.tools.javac.platform.PlatformProviderFactory new file mode 100644 --- /dev/null +++ b/src/jdk.compiler/share/classes/META-INF/services/com.sun.tools.javac.platform.PlatformProviderFactory @@ -0,0 +1,1 @@ +com.sun.tools.javac.platform.JDKPlatformProvider diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/BasicJavacTask.java @@ -29,6 +29,7 @@ import java.util.LinkedHashSet; import java.util.Locale; import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.processing.Processor; import javax.lang.model.element.Element; @@ -46,6 +47,8 @@ import com.sun.tools.javac.main.JavaCompiler; import com.sun.tools.javac.model.JavacElements; import com.sun.tools.javac.model.JavacTypes; +import com.sun.tools.javac.platform.PlatformProvider; +import com.sun.tools.javac.platform.PlatformProvider.PluginInfo; import com.sun.tools.javac.processing.JavacProcessingEnvironment; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.Context; @@ -171,6 +174,22 @@ } public void initPlugins(Set> pluginOpts) { + PlatformProvider platformProvider = context.get(PlatformProvider.class); + + if (platformProvider != null) { + for (PluginInfo pluginDesc : platformProvider.getPlugins()) { + java.util.List options = + pluginDesc.getOptions().entrySet().stream() + .map(e -> e.getKey() + "=" + e.getValue()) + .collect(Collectors.toList()); + try { + pluginDesc.getPlugin().init(this, options.toArray(new String[options.size()])); + } catch (RuntimeException ex) { + throw new PropagatedException(ex); + } + } + } + if (pluginOpts.isEmpty()) return; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java @@ -50,6 +50,7 @@ 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.*; @@ -58,6 +59,7 @@ 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; /** @@ -98,6 +100,11 @@ */ 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; @@ -192,6 +199,7 @@ cacheCompletionFailure = options.isUnset("dev"); preferSource = "source".equals(options.get("-Xprefer")); userPathsFirst = options.isSet(XXUSERPATHSFIRST); + allowSigFiles = context.get(PlatformProvider.class) != null; completionFailureName = options.isSet("failcomplete") @@ -337,7 +345,8 @@ if (verbose) { log.printVerbose("loading", currentClassFile.toString()); } - if (classfile.getKind() == JavaFileObject.Kind.CLASS) { + if (classfile.getKind() == JavaFileObject.Kind.CLASS || + classfile.getKind() == JavaFileObject.Kind.OTHER) { reader.readClassFile(c); c.flags_field |= getSupplementaryFlags(c); } else { @@ -418,7 +427,7 @@ q.flags_field |= EXISTS; JavaFileObject.Kind kind = file.getKind(); int seen; - if (kind == JavaFileObject.Kind.CLASS) + if (kind == JavaFileObject.Kind.CLASS || kind == JavaFileObject.Kind.OTHER) seen = CLASS_SEEN; else seen = SOURCE_SEEN; @@ -581,10 +590,13 @@ fillIn(p, PLATFORM_CLASS_PATH, fileManager.list(PLATFORM_CLASS_PATH, p.fullname.toString(), - EnumSet.of(JavaFileObject.Kind.CLASS), + 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 files) @@ -592,6 +604,15 @@ 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 diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java @@ -331,6 +331,8 @@ for (Path f: files) { String fname = f.getFileName().toString(); + if (fname.endsWith("/")) + fname = fname.substring(0, fname.length() - 1); if (Files.isDirectory(f)) { if (recurse && SourceVersion.isIdentifier(fname)) { listDirectory(directory, diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -1317,13 +1317,28 @@ for (int i = 0; i v: proxy.values) { + if (v.fst == names.value && v.snd instanceof Attribute.Constant) { + Attribute.Constant c = (Attribute.Constant) v.snd; + if (c.type == syms.intType && ((Integer) c.value) > profile.value) { + sym.flags_field |= NOT_IN_PROFILE; + } + } + } + } + } else { + if (proxy.type.tsym == syms.annotationTargetType.tsym) { + target = proxy; + } else if (proxy.type.tsym == syms.repeatableType.tsym) { + repeatable = proxy; + } + + proxies.append(proxy); } - - proxies.append(proxy); } annotate.normal(new AnnotationCompleter(sym, proxies.toList())); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java @@ -25,29 +25,38 @@ package com.sun.tools.javac.main; import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; +import java.util.ServiceLoader; import java.util.Set; import javax.tools.JavaFileManager; import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; import com.sun.tools.doclint.DocLint; import com.sun.tools.javac.code.Lint.LintCategory; import com.sun.tools.javac.code.Source; +import com.sun.tools.javac.file.BaseFileManager; import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.javac.jvm.Profile; import com.sun.tools.javac.jvm.Target; import com.sun.tools.javac.main.OptionHelper.GrumpyHelper; -import com.sun.tools.javac.file.BaseFileManager; +import com.sun.tools.javac.platform.PlatformProvider; +import com.sun.tools.javac.platform.PlatformProviderFactory; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Log.PrefixKind; +import com.sun.tools.javac.util.Log.WriterKind; import com.sun.tools.javac.util.Options; import com.sun.tools.javac.util.PropagatedException; @@ -272,6 +281,63 @@ private boolean processArgs(Iterable args, Set