--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Mon Feb 28 11:50:56 2011 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Mon Feb 28 12:19:18 2011 -0800
@@ -299,6 +299,13 @@
protected JavaCompiler delegateCompiler;
/**
+ * Command line options.
+ */
+ protected Options options;
+
+ protected Context context;
+
+ /**
* Flag set if any annotation processing occurred.
**/
protected boolean annotationProcessingOccurred;
@@ -308,8 +315,6 @@
**/
protected boolean implicitSourceFilesRead;
- protected Context context;
-
/** Construct a new compiler using a shared context.
*/
public JavaCompiler(Context context) {
@@ -354,7 +359,7 @@
reader.sourceCompleter = this;
- Options options = Options.instance(context);
+ options = Options.instance(context);
verbose = options.isSet(VERBOSE);
sourceOutput = options.isSet(PRINTSOURCE); // used to be -s
@@ -792,6 +797,11 @@
throw new AssertionError("attempt to reuse JavaCompiler");
hasBeenUsed = true;
+ // forcibly set the equivalent of -Xlint:-options, so that no further
+ // warnings about command line options are generated from this point on
+ options.put(XLINT_CUSTOM + "-" + LintCategory.OPTIONS.option, "true");
+ options.remove(XLINT_CUSTOM + LintCategory.OPTIONS.option);
+
start_msec = now();
try {
@@ -963,7 +973,6 @@
public void initProcessAnnotations(Iterable<? extends Processor> processors) {
// Process annotations if processing is not disabled and there
// is at least one Processor available.
- Options options = Options.instance(context);
if (options.isSet(PROC, "none")) {
processAnnotations = false;
} else if (procEnvImpl == null) {
@@ -1022,7 +1031,6 @@
// If there are no annotation processors present, and
// annotation processing is to occur with compilation,
// emit a warning.
- Options options = Options.instance(context);
if (options.isSet(PROC, "only")) {
log.warning("proc.proc-only.requested.no.procs");
todo.clear();
@@ -1108,7 +1116,6 @@
}
boolean explicitAnnotationProcessingRequested() {
- Options options = Options.instance(context);
return
explicitAnnotationProcessingRequested ||
options.isSet(PROCESSOR) ||
--- a/langtools/test/tools/javac/T6900037.java Mon Feb 28 11:50:56 2011 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 6900037
- * @summary javac should warn if earlier -source is used and bootclasspath not set
- * @compile T6900037.java
- * @compile -source 1.6 T6900037.java
- * @compile/fail/ref=T6900037.out -XDrawDiagnostics -Werror -source 1.6 T6900037.java
- * @compile -Werror -source 1.6 -Xlint:-options T6900037.java
- */
-
-class T6900037 { }
--- a/langtools/test/tools/javac/T6900037.out Mon Feb 28 11:50:56 2011 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-- compiler.warn.source.no.bootclasspath: 1.6
-- compiler.err.warnings.and.werror
-1 error
-1 warning
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T6900037.java Mon Feb 28 12:19:18 2011 -0800
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6900037
+ * @summary javac should warn if earlier -source is used and bootclasspath not set
+ * @compile T6900037.java
+ * @compile -source 1.6 T6900037.java
+ * @compile/fail/ref=T6900037.out -XDrawDiagnostics -Werror -source 1.6 T6900037.java
+ * @compile -Werror -source 1.6 -Xlint:-options T6900037.java
+ */
+
+class T6900037 { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T6900037.out Mon Feb 28 12:19:18 2011 -0800
@@ -0,0 +1,4 @@
+- compiler.warn.source.no.bootclasspath: 1.6
+- compiler.err.warnings.and.werror
+1 error
+1 warning
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/options/T7022337.java Mon Feb 28 12:19:18 2011 -0800
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+/*
+ * @test
+ * @bug 7022337
+ * @summary repeated warnings about bootclasspath not set
+ * @library ../lib
+ * @build JavacTestingAbstractProcessor T7022337
+ * @run main T7022337
+ */
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.element.*;
+import javax.tools.*;
+
+public class T7022337 extends JavacTestingAbstractProcessor {
+ public static void main(String... args) throws Exception {
+ new T7022337().run();
+ }
+
+ void run() throws Exception {
+ String myName = T7022337.class.getSimpleName();
+ File testSrc = new File(System.getProperty("test.src"));
+ File file = new File(testSrc, myName + ".java");
+
+ String out = compile(
+ "-XDrawDiagnostics",
+ "-d", ".",
+ "-processor", myName,
+ "-source", "6", // explicit use of older source value without bootclasspath
+ file.getPath());
+
+ int count = 0;
+ for (String line: out.split("[\r\n]+")) {
+ if (line.contains("compiler.warn.source.no.bootclasspath"))
+ count++;
+ }
+ if (count != 1)
+ throw new Exception("unexpected number of warnings found: " + count + ", expected: 1");
+ }
+
+ String compile(String... args) throws Exception {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javac.Main.compile(args, pw);
+ pw.close();
+ String out = sw.toString();
+ if (!out.isEmpty())
+ System.err.println(out);
+ if (rc != 0)
+ throw new Exception("compilation failed unexpectedly: rc=" + rc);
+ return out;
+ }
+
+ // ----------
+
+ int round = 0;
+
+ @Override
+ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+ round++;
+
+ final int MAXROUNDS = 3;
+ if (round < MAXROUNDS)
+ generate("Gen" + round);
+
+ return true;
+ }
+
+ void generate(String name) {
+ try {
+ JavaFileObject fo = filer.createSourceFile(name);
+ Writer out = fo.openWriter();
+ try {
+ out.write("class " + name + " { }");
+ } finally {
+ out.close();
+ }
+ } catch (IOException e) {
+ throw new Error(e);
+ }
+ }
+}