### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: batch/org/eclipse/jdt/internal/compiler/batch/Main.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java,v retrieving revision 1.350 diff -u -r1.350 Main.java --- batch/org/eclipse/jdt/internal/compiler/batch/Main.java 21 Feb 2010 03:35:51 -0000 1.350 +++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java 25 Feb 2010 19:16:44 -0000 @@ -11,6 +11,7 @@ * Tom Tromey - Contribution for bug 159641 * Benjamin Muskalla - Contribution for bug 239066 * Stephan Herrmann - Contribution for bug 236385 + * Stephan Herrmann - Contribution for bug 295551 *******************************************************************************/ package org.eclipse.jdt.internal.compiler.batch; @@ -3339,9 +3340,23 @@ setSeverity(CompilerOptions.OPTION_ReportMissingSerialVersion, severity, isEnabling); return; } else if (token.equals("suppress")) {//$NON-NLS-1$ - this.options.put( - CompilerOptions.OPTION_SuppressWarnings, - isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); + switch(severity) { + case ProblemSeverities.Warning : + this.options.put( + CompilerOptions.OPTION_SuppressWarnings, + isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); + this.options.put( + CompilerOptions.OPTION_SuppressOptionalErrors, + CompilerOptions.DISABLED); + break; + case ProblemSeverities.Error : + this.options.put( + CompilerOptions.OPTION_SuppressWarnings, + isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); + this.options.put( + CompilerOptions.OPTION_SuppressOptionalErrors, + isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); + } return; } else if (token.equals("static-access")) { //$NON-NLS-1$ setSeverity(CompilerOptions.OPTION_ReportNonStaticAccessToStatic, severity, isEnabling); Index: batch/org/eclipse/jdt/internal/compiler/batch/messages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/messages.properties,v retrieving revision 1.881 diff -u -r1.881 messages.properties --- batch/org/eclipse/jdt/internal/compiler/batch/messages.properties 23 Feb 2010 14:40:28 -0000 1.881 +++ batch/org/eclipse/jdt/internal/compiler/batch/messages.properties 25 Feb 2010 19:16:44 -0000 @@ -298,6 +298,8 @@ \ staticReceiver + non-static reference to static member\n\ \ super overriding a method without making a super invocation\n\ \ suppress + enable @SuppressWarnings\n\ +\ When used with -err:, it can also silent optional\n\ +\ errors and warnings\n\ \ syncOverride missing synchronized in synchr. method override\n\ \ syntheticAccess synthetic access for innerclass\n\ \ tasks() tasks identified by tags inside comments\n\ Index: compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java,v retrieving revision 1.86 diff -u -r1.86 CompilationUnitDeclaration.java --- compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java 12 May 2009 20:49:55 -0000 1.86 +++ compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java 25 Feb 2010 19:16:44 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2009 IBM Corporation and others. + * Copyright (c) 2000, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stephan Herrmann - Contribution for bug 295551 *******************************************************************************/ package org.eclipse.jdt.internal.compiler.ast; @@ -217,16 +218,18 @@ nextProblem: for (int iProblem = 0, length = problemCount; iProblem < length; iProblem++) { CategorizedProblem problem = problems[iProblem]; int problemID = problem.getID(); + int irritant = ProblemReporter.getIrritant(problemID); if (problem.isError()) { if (problemID != IProblem.UnusedWarningToken) { - // tolerate unused warning tokens which were promoted as errors + // tolerate unused warning tokens which were promoted as errors hasErrors = true; } - continue; + if (irritant == 0 || !options.suppressOptionalErrors) { + continue; + } } int start = problem.getSourceStart(); int end = problem.getSourceEnd(); - int irritant = ProblemReporter.getIrritant(problemID); nextSuppress: for (int iSuppress = 0, suppressCount = this.suppressWarningsCount; iSuppress < suppressCount; iSuppress++) { long position = this.suppressWarningScopePositions[iSuppress]; int startSuppress = (int) (position >>> 32); Index: compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java,v retrieving revision 1.229 diff -u -r1.229 CompilerOptions.java --- compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java 13 Jan 2010 15:13:44 -0000 1.229 +++ compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java 25 Feb 2010 19:16:45 -0000 @@ -9,6 +9,7 @@ * IBM Corporation - initial API and implementation * Benjamin Muskalla - Contribution for bug 239066 * Stephan Herrmann - Contribution for bug 236385 + * Stephan Herrmann - Contribution for bug 295551 *******************************************************************************/ package org.eclipse.jdt.internal.compiler.impl; @@ -112,6 +113,7 @@ public static final String OPTION_ReportForbiddenReference = "org.eclipse.jdt.core.compiler.problem.forbiddenReference"; //$NON-NLS-1$ public static final String OPTION_ReportDiscouragedReference = "org.eclipse.jdt.core.compiler.problem.discouragedReference"; //$NON-NLS-1$ public static final String OPTION_SuppressWarnings = "org.eclipse.jdt.core.compiler.problem.suppressWarnings"; //$NON-NLS-1$ + public static final String OPTION_SuppressOptionalErrors = "org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors"; //$NON-NLS-1$ public static final String OPTION_ReportUnhandledWarningToken = "org.eclipse.jdt.core.compiler.problem.unhandledWarningToken"; //$NON-NLS-1$ public static final String OPTION_ReportUnusedWarningToken = "org.eclipse.jdt.core.compiler.problem.unusedWarningToken"; //$NON-NLS-1$ public static final String OPTION_ReportUnusedLabel = "org.eclipse.jdt.core.compiler.problem.unusedLabel"; //$NON-NLS-1$ @@ -320,8 +322,10 @@ public boolean reportMissingJavadocCommentsOverriding; /** Indicate whether the JSR bytecode should be inlined to avoid its presence in classfile */ public boolean inlineJsrBytecode; - /** Indicate if @SuppressWarning annotation are activated */ + /** Indicate if @SuppressWarning annotations are activated */ public boolean suppressWarnings; + /** Indicate if @SuppressWarning annotations should also suppress optional errors */ + public boolean suppressOptionalErrors; /** Specify if should treat optional error as fatal or just like warning */ public boolean treatOptionalErrorAsFatal; /** Specify if parser should perform structural recovery in methods */ @@ -884,6 +888,7 @@ optionsMap.put(OPTION_ReportPotentialNullReference, getSeverityString(PotentialNullReference)); optionsMap.put(OPTION_ReportRedundantNullCheck, getSeverityString(RedundantNullCheck)); optionsMap.put(OPTION_SuppressWarnings, this.suppressWarnings ? ENABLED : DISABLED); + optionsMap.put(OPTION_SuppressOptionalErrors, this.suppressOptionalErrors ? ENABLED : DISABLED); optionsMap.put(OPTION_ReportUnhandledWarningToken, getSeverityString(UnhandledWarningToken)); optionsMap.put(OPTION_ReportUnusedWarningToken, getSeverityString(UnusedWarningToken)); optionsMap.put(OPTION_ReportParameterAssignment, getSeverityString(ParameterAssignment)); @@ -1014,6 +1019,9 @@ // suppress warning annotation this.suppressWarnings = true; + // suppress also optional errors + this.suppressOptionalErrors = false; + // treat optional error as non fatal this.treatOptionalErrorAsFatal = false; @@ -1225,6 +1233,13 @@ this.suppressWarnings = false; } } + if ((optionValue = optionsMap.get(OPTION_SuppressOptionalErrors)) != null) { + if (ENABLED.equals(optionValue)) { + this.suppressOptionalErrors = true; + } else if (DISABLED.equals(optionValue)) { + this.suppressOptionalErrors = false; + } + } if ((optionValue = optionsMap.get(OPTION_FatalOptionalError)) != null) { if (ENABLED.equals(optionValue)) { this.treatOptionalErrorAsFatal = true; @@ -1482,6 +1497,7 @@ buf.append("\n\t- missing @Deprecated annotation: ").append(getSeverityString(MissingDeprecatedAnnotation)); //$NON-NLS-1$ buf.append("\n\t- incomplete enum switch: ").append(getSeverityString(IncompleteEnumSwitch)); //$NON-NLS-1$ buf.append("\n\t- suppress warnings: ").append(this.suppressWarnings ? ENABLED : DISABLED); //$NON-NLS-1$ + buf.append("\n\t- suppress optional errors: ").append(this.suppressOptionalErrors ? ENABLED : DISABLED); //$NON-NLS-1$ buf.append("\n\t- unhandled warning token: ").append(getSeverityString(UnhandledWarningToken)); //$NON-NLS-1$ buf.append("\n\t- unused warning token: ").append(getSeverityString(UnusedWarningToken)); //$NON-NLS-1$ buf.append("\n\t- unused label: ").append(getSeverityString(UnusedLabel)); //$NON-NLS-1$ Index: model/org/eclipse/jdt/core/JavaCore.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java,v retrieving revision 1.647 diff -u -r1.647 JavaCore.java --- model/org/eclipse/jdt/core/JavaCore.java 13 Jan 2010 15:13:42 -0000 1.647 +++ model/org/eclipse/jdt/core/JavaCore.java 25 Feb 2010 19:16:45 -0000 @@ -82,6 +82,7 @@ * IBM Corporation - added getOptionForConfigurableSeverity(int) * Benjamin Muskalla - added COMPILER_PB_MISSING_SYNCHRONIZED_ON_INHERITED_METHOD * Stephan Herrmann - added COMPILER_PB_UNUSED_OBJECT_ALLOCATION + * Stephan Herrmann - added COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS *******************************************************************************/ package org.eclipse.jdt.core; @@ -1420,6 +1421,21 @@ */ public static final String COMPILER_PB_SUPPRESS_WARNINGS = PLUGIN_ID + ".compiler.problem.suppressWarnings"; //$NON-NLS-1$ /** + * Compiler option ID: Further Determining the Effect of @SuppressWarnings if also + * {@link #COMPILER_PB_SUPPRESS_WARNINGS} is enabled. + *

When enabled, the @SuppressWarnings annotation can additionally be used to suppress + * optional compiler diagnostics that have been configured as {@link #ERROR}. + *

When disabled, all @SuppressWarnings annotations only affects warnings. + *

+ *
Option id:
"org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors"
+ *
Possible values:
{ "enabled", "disabled" }
+ *
Default:
"disabled"
+ *
+ * @since 3.6 + * @category CompilerOptionID + */ + public static final String COMPILER_PB_SUPPRESS_OPTIONAL_ERRORS = PLUGIN_ID + ".compiler.problem.suppressOptionalErrors"; //$NON-NLS-1$ + /** * Compiler option ID: Reporting Unhandled Warning Token for @SuppressWarnings. *

When enabled, the compiler will issue an error or a warning when encountering a token * it cannot handle inside a @SuppressWarnings annotation. #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java,v retrieving revision 1.210 diff -u -r1.210 AnnotationTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java 5 Feb 2010 09:03:34 -0000 1.210 +++ src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java 25 Feb 2010 19:16:49 -0000 @@ -7,6 +7,7 @@ * * Contributors: * IBM Corporation - initial API and implementation + * Stephan Herrmann - Contribution for bug 295551 *******************************************************************************/ package org.eclipse.jdt.core.tests.compiler.regression; @@ -9304,4 +9305,102 @@ expectedOutput, JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); } +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551 +public void test280() { + Map customOptions = getCompilerOptions(); + customOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + customOptions.put(CompilerOptions.OPTION_SuppressOptionalErrors, CompilerOptions.ENABLED); + String testFiles [] = new String[] { + "A.java", + "public class A {\n" + + " @SuppressWarnings(\"unused\")\n" + + " private int i;\n" + // problem configured as warning but still suppressed + "}\n" + }; + runConformTest( + testFiles, + null, + null, + true, + null, + customOptions, + null); +} +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551 +public void test281() { + Map customOptions = getCompilerOptions(); + customOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + customOptions.put(CompilerOptions.OPTION_SuppressWarnings, CompilerOptions.DISABLED); // this option overrides the next + customOptions.put(CompilerOptions.OPTION_SuppressOptionalErrors, CompilerOptions.ENABLED); + String testFiles [] = new String[] { + "A.java", + "public class A {\n" + + " @SuppressWarnings(\"unused\")\n" + + " private int i;\n" + + "}\n" + }; + String expectedErrorString = + "----------\n" + + "1. ERROR in A.java (at line 3)\n" + + " private int i;\n" + + " ^\n" + + "The field A.i is never read locally\n" + + "----------\n"; + runNegativeTest( + true, + testFiles, + null, + customOptions, + expectedErrorString, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); +} +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551 +public void test282() { + Map customOptions = getCompilerOptions(); + customOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + customOptions.put(CompilerOptions.OPTION_SuppressOptionalErrors, CompilerOptions.ENABLED); + String testFiles [] = new String[] { + "A.java", + "import java.util.Map;\n" + + "public class A {\n" + + " @SuppressWarnings({\"rawtypes\", \"unused\"})\n" + //suppress a warning and an error + " private Map i;\n" + + "}\n" + }; + runConformTest( + testFiles, + null, + null, + true, + null, + customOptions, + null); +} +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=295551 +public void test283() { + Map customOptions = getCompilerOptions(); + customOptions.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.ERROR); + customOptions.put(CompilerOptions.OPTION_SuppressOptionalErrors, CompilerOptions.ENABLED); + String testFiles [] = new String[] { + "A.java", + "public class A {\n" + + " @SuppressWarnings(\"all\")\n" + + " private void i;\n" + // cannot suppress mandatory error + "}\n" + }; + String expectedErrorString = + "----------\n" + + "1. ERROR in A.java (at line 3)\n" + + " private void i;\n" + + " ^\n" + + "void is an invalid type for the variable i\n" + + "----------\n"; + runNegativeTest( + true, + testFiles, + null, + customOptions, + expectedErrorString, + JavacTestOptions.SKIP); +} } Index: src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java,v retrieving revision 1.202 diff -u -r1.202 BatchCompilerTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java 13 Jan 2010 15:13:36 -0000 1.202 +++ src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java 25 Feb 2010 19:16:50 -0000 @@ -9,6 +9,7 @@ * IBM Corporation - initial API and implementation * Benjamin Muskalla - Contribution for bug 239066 * Stephan Herrmann - Contribution for bug 236385 + * Stephan Herrmann - Contribution for bug 295551 *******************************************************************************/ package org.eclipse.jdt.core.tests.compiler.regression; @@ -47,8 +48,8 @@ static { // TESTS_NAMES = new String[] { "test292_warn_options" }; -// TESTS_NUMBERS = new int[] { 295 }; -// TESTS_RANGE = new int[] { 107, -1 }; +// TESTS_NUMBERS = new int[] { 298 }; +// TESTS_RANGE = new int[] { 298, -1 }; } public BatchCompilerTest(String name) { super(name); @@ -1696,7 +1697,9 @@ " static-access macro for indirectStatic and staticReceiver\n" + " staticReceiver + non-static reference to static member\n" + " super overriding a method without making a super invocation\n" + - " suppress + enable @SuppressWarnings\n" + + " suppress + enable @SuppressWarnings\n" + + " When used with -err:, it can also silent optional\n" + + " errors and warnings\n" + " syncOverride missing synchronized in synchr. method override\n" + " syntheticAccess synthetic access for innerclass\n" + " tasks() tasks identified by tags inside comments\n" + @@ -1843,6 +1846,7 @@ "