OpenJDK / portola / portola
changeset 8618:913fb63a554b
7022337: repeated warnings about bootclasspath not set
Reviewed-by: mcimadamore
author | jjg |
---|---|
date | Mon, 28 Feb 2011 12:19:18 -0800 |
parents | 6a05d1669247 |
children | 15a69d0db208 |
files | langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java langtools/test/tools/javac/T6900037.java langtools/test/tools/javac/T6900037.out langtools/test/tools/javac/options/T6900037.java langtools/test/tools/javac/options/T6900037.out langtools/test/tools/javac/options/T7022337.java |
diffstat | 6 files changed, 158 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- 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); + } + } +}