# HG changeset patch # User jjg # Date 1233944637 28800 # Node ID c855318a4b036f9b0f22446e578d9b01ade20088 # Parent 9bb0193d4c2d6d4ea70cc17484a62c4816fe3731 6595666: fix -Werror Reviewed-by: mcimadamore diff -r 9bb0193d4c2d -r c855318a4b03 langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java --- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Fri Feb 06 10:23:57 2009 -0800 @@ -371,6 +371,7 @@ context.get(DiagnosticListener.class) != null; devVerbose = options.get("dev") != null; processPcks = options.get("process.packages") != null; + werror = options.get("-Werror") != null; verboseCompilePolicy = options.get("verboseCompilePolicy") != null; @@ -434,6 +435,10 @@ */ protected boolean processPcks; + /** Switch: treat warnings as errors + */ + protected boolean werror; + /** Switch: is annotation processing requested explitly via * CompilationTask.setProcessors? */ @@ -490,7 +495,11 @@ public int errorCount() { if (delegateCompiler != null && delegateCompiler != this) return delegateCompiler.errorCount(); - else + else { + if (werror && log.nerrors == 0 && log.nwarnings > 0) { + log.error("warnings.and.werror"); + } + } return log.nerrors; } diff -r 9bb0193d4c2d -r c855318a4b03 langtools/src/share/classes/com/sun/tools/javac/main/Main.java --- a/langtools/src/share/classes/com/sun/tools/javac/main/Main.java Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/main/Main.java Fri Feb 06 10:23:57 2009 -0800 @@ -406,8 +406,7 @@ } } - if (comp.errorCount() != 0 || - options.get("-Werror") != null && comp.warningCount() != 0) + if (comp.errorCount() != 0) return EXIT_ERROR; } catch (IOException ex) { ioMessage(ex); diff -r 9bb0193d4c2d -r c855318a4b03 langtools/src/share/classes/com/sun/tools/javac/main/RecognizedOptions.java --- a/langtools/src/share/classes/com/sun/tools/javac/main/RecognizedOptions.java Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/main/RecognizedOptions.java Fri Feb 06 10:23:57 2009 -0800 @@ -449,7 +449,7 @@ }, // treat warnings as errors - new HiddenOption(WERROR), + new Option(WERROR, "opt.Werror"), // use complex inference from context in the position of a method call argument new HiddenOption(COMPLEXINFERENCE), diff -r 9bb0193d4c2d -r c855318a4b03 langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Fri Feb 06 10:23:57 2009 -0800 @@ -346,6 +346,9 @@ compiler.err.pkg.clashes.with.class.of.same.name=\ package {0} clashes with class of same name +compiler.err.warnings.and.werror=\ + warnings found and -Werror specified + # Errors related to annotation processing compiler.err.proc.cant.access=\ diff -r 9bb0193d4c2d -r c855318a4b03 langtools/src/share/classes/com/sun/tools/javac/resources/javac.properties --- a/langtools/src/share/classes/com/sun/tools/javac/resources/javac.properties Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/javac.properties Fri Feb 06 10:23:57 2009 -0800 @@ -69,6 +69,8 @@ Generate class files for specific VM version javac.opt.source=\ Provide source compatibility with specified release +javac.opt.Werror=\ + Terminate compilation if warnings occur javac.opt.A=\ Options to pass to annotation processors javac.opt.implicit=\ diff -r 9bb0193d4c2d -r c855318a4b03 langtools/test/tools/javac/6304921/T6304921.out --- a/langtools/test/tools/javac/6304921/T6304921.out Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/test/tools/javac/6304921/T6304921.out Fri Feb 06 10:23:57 2009 -0800 @@ -7,12 +7,7 @@ required: java.util.List List list = new ArrayList(); ^ -T6304921.java:445/445/453: warning: [fallthrough] possible fall-through into case - default: - ^ -T6304921.java:522/613/614: warning: [finally] finally clause cannot complete normally - } - ^ +error: warnings found and -Werror specified T6304921.java:727/733/737: cannot find symbol symbol : variable orr location: class java.lang.System @@ -21,5 +16,5 @@ T6304921.java:812/816/822: operator + cannot be applied to int,boolean return 123 + true; // bad binary expression ^ -2 errors -4 warnings +3 errors +2 warnings diff -r 9bb0193d4c2d -r c855318a4b03 langtools/test/tools/javac/6758789/T6758789b.out --- a/langtools/test/tools/javac/6758789/T6758789b.out Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/test/tools/javac/6758789/T6758789b.out Fri Feb 06 10:23:57 2009 -0800 @@ -1,3 +1,5 @@ T6758789b.java:39:11: compiler.warn.prob.found.req: (- compiler.misc.unchecked.assign), T6758789a.Foo, T6758789a.Foo T6758789b.java:39:10: compiler.warn.unchecked.meth.invocation.applied: kindname.method, m, T6758789a.Foo, T6758789a.Foo, kindname.class, T6758789a +- compiler.err.warnings.and.werror +1 error 2 warnings diff -r 9bb0193d4c2d -r c855318a4b03 langtools/test/tools/javac/T6241723.out --- a/langtools/test/tools/javac/T6241723.out Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/test/tools/javac/T6241723.out Fri Feb 06 10:23:57 2009 -0800 @@ -2,4 +2,6 @@ T6241723.java:23:7: compiler.warn.has.been.deprecated: A2.A21, A2 T6241723.java:26:5: compiler.warn.has.been.deprecated: Z1, unnamed package T6241723.java:28:7: compiler.warn.has.been.deprecated: Z2.Z21, Z2 +- compiler.err.warnings.and.werror +1 error 4 warnings diff -r 9bb0193d4c2d -r c855318a4b03 langtools/test/tools/javac/T6595666.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/T6595666.java Fri Feb 06 10:23:57 2009 -0800 @@ -0,0 +1,68 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6595666 + * @summary fix -Werror + */ + +import java.io.*; +import java.util.*; + +public class T6595666 { + void m() { + // the following line must create warnings with -Xlint, because of unchecked conversion + List list = new ArrayList(); + } + + public static void main(String... args) throws Exception { + File testSrc = new File(System.getProperty("test.src", ".")); + + String basename = T6595666.class.getName(); + File srcFile = new File(testSrc, basename+".java"); + File classFile = new File(basename+".class"); + classFile.delete(); + if (classFile.exists()) + throw new Exception("setup error, can't delete " + classFile); + + compile(1, "-d", ".", "-Xlint", "-Werror", srcFile.getPath()); + if (classFile.exists()) + throw new Exception("failed: found " + classFile); + + compile(0, "-d", ".", "-Xlint", srcFile.getPath()); + if (!classFile.exists()) + throw new Exception("failed: " + classFile + " not found"); + } + + private static void compile(int rc, String... args) throws Exception { + System.err.println("compile: " + Arrays.asList(args)); + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + int rc2 = com.sun.tools.javac.Main.compile(args, pw); + pw.close(); + System.err.println(sw); + if (rc != rc2) + throw new Exception("bad exit code; expected " + rc + ", found " + rc2); + } +} diff -r 9bb0193d4c2d -r c855318a4b03 langtools/test/tools/javac/depDocComment/DeprecatedDocComment.out --- a/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.out Fri Jan 30 23:28:38 2009 -0800 +++ b/langtools/test/tools/javac/depDocComment/DeprecatedDocComment.out Fri Feb 06 10:23:57 2009 -0800 @@ -1,4 +1,6 @@ DeprecatedDocComment.java:27:28: compiler.warn.has.been.deprecated: deprecatedTest1(), DeprecatedDocComment2 DeprecatedDocComment.java:31:28: compiler.warn.has.been.deprecated: deprecatedTest5(), DeprecatedDocComment2 DeprecatedDocComment.java:32:28: compiler.warn.has.been.deprecated: deprecatedTest6(), DeprecatedDocComment2 +- compiler.err.warnings.and.werror +1 error 3 warnings