### 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 24 Feb 2010 21:48:45 -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,14 @@ 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); + if (severity == ProblemSeverities.Warning || isEnabling) + this.options.put( + CompilerOptions.OPTION_SuppressWarnings, + isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); + if (severity == ProblemSeverities.Error || !isEnabling) + 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: 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 24 Feb 2010 21:48:46 -0000 @@ -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,7 +218,7 @@ nextProblem: for (int iProblem = 0, length = problemCount; iProblem < length; iProblem++) { CategorizedProblem problem = problems[iProblem]; int problemID = problem.getID(); - if (problem.isError()) { + if (problem.isError() && !options.suppressOptionalErrors) { if (problemID != IProblem.UnusedWarningToken) { // tolerate unused warning tokens which were promoted as errors hasErrors = true; 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 24 Feb 2010 21:48: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.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 24 Feb 2010 21:49:02 -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 + * 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 ERROR. + *

When disabled, all @SupressWarnings 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 24 Feb 2010 21:49:16 -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 24 Feb 2010 21:49:32 -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; @@ -1843,6 +1844,7 @@ "