### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.compiler.tool Index: src/org/eclipse/jdt/internal/compiler/tool/Options.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.compiler.tool/src/org/eclipse/jdt/internal/compiler/tool/Options.java,v retrieving revision 1.7 diff -u -r1.7 Options.java --- src/org/eclipse/jdt/internal/compiler/tool/Options.java 6 May 2009 21:26:12 -0000 1.7 +++ src/org/eclipse/jdt/internal/compiler/tool/Options.java 16 Sep 2009 10:48:28 -0000 @@ -145,6 +145,7 @@ if (token.equals("allDeadCode")//$NON-NLS-1$ || token.equals("allDeprecation")//$NON-NLS-1$ || token.equals("allJavadoc")//$NON-NLS-1$ + || token.equals("allOver-ann")//$NON-NLS-1$ || token.equals("assertIdentifier")//$NON-NLS-1$ || token.equals("boxing")//$NON-NLS-1$ || token.equals("charConcat")//$NON-NLS-1$ #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/core/compiler/IProblem.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/core/compiler/IProblem.java,v retrieving revision 1.214 diff -u -r1.214 IProblem.java --- compiler/org/eclipse/jdt/core/compiler/IProblem.java 27 Aug 2009 15:27:02 -0000 1.214 +++ compiler/org/eclipse/jdt/core/compiler/IProblem.java 16 Sep 2009 10:48:47 -0000 @@ -1225,6 +1225,8 @@ int MethodMustOverrideOrImplement = MethodRelated + 634; /** @since 3.4 */ int UnusedWarningToken = Internal + 635; + /** @since 3.6 */ + int MissingOverrideAnnotationForInterfaceMethodImplementation = MethodRelated + 636; /** * More problems in generics Index: compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties,v retrieving revision 1.248 diff -u -r1.248 messages.properties --- compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties 27 Aug 2009 15:27:02 -0000 1.248 +++ compiler/org/eclipse/jdt/internal/compiler/problem/messages.properties 16 Sep 2009 10:49:06 -0000 @@ -560,6 +560,7 @@ 633 = The value for annotation attribute {0}.{1} must be an enum constant expression 634 = The method {0}({1}) of type {2} must override or implement a supertype method 635 = Unnecessary @SuppressWarnings("{0}") +636 = The method {0}({1}) of type {2} should be tagged with @Override since it actually overrides a supertype method ### MORE GENERICS 660 = Unused type arguments for the non generic constructor {0}({1}) of type {2}; it should not be parameterized with arguments <{3}> Index: compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java,v retrieving revision 1.393 diff -u -r1.393 ProblemReporter.java --- compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 17 Aug 2009 17:45:50 -0000 1.393 +++ compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java 16 Sep 2009 10:49:04 -0000 @@ -254,6 +254,7 @@ return CompilerOptions.RawTypeReference; case IProblem.MissingOverrideAnnotation: + case IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation: return CompilerOptions.MissingOverrideAnnotation; case IProblem.FieldMissingDeprecatedAnnotation: @@ -5001,6 +5002,18 @@ method.sourceStart, method.sourceEnd); } +public void missingOverrideAnnotationForInterfaceMethodImplementation(AbstractMethodDeclaration method) { + int severity = computeSeverity(IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation); + if (severity == ProblemSeverities.Ignore) return; + MethodBinding binding = method.binding; + this.handle( + IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation, + new String[] {new String(binding.selector), typesAsString(binding.isVarargs(), binding.parameters, false), new String(binding.declaringClass.readableName()), }, + new String[] {new String(binding.selector), typesAsString(binding.isVarargs(), binding.parameters, true), new String(binding.declaringClass.shortReadableName()),}, + severity, + method.sourceStart, + method.sourceEnd); +} public void missingReturnType(AbstractMethodDeclaration methodDecl) { this.handle( IProblem.MissingReturnType, 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.636 diff -u -r1.636 JavaCore.java --- model/org/eclipse/jdt/core/JavaCore.java 14 May 2009 10:09:26 -0000 1.636 +++ model/org/eclipse/jdt/core/JavaCore.java 16 Sep 2009 10:49:17 -0000 @@ -976,6 +976,21 @@ */ public static final String COMPILER_PB_MISSING_OVERRIDE_ANNOTATION = PLUGIN_ID + ".compiler.problem.missingOverrideAnnotation"; //$NON-NLS-1$ /** + * Compiler option ID: Reporting Missing @Override Annotation for interface method implementation. + *

When enabled, the compiler will issue an error or a warning whenever encountering a method + * declaration which overrides or implements a supertype method but has no @Override annotation.

+ *

This option should be available only if the compliance is greater or equals to 1.6.

+ *

The severity of the problem is controlled with option {@link #COMPILER_PB_MISSING_OVERRIDE_ANNOTATION}.

+ *
+ *
Option id:
"org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation"
+ *
Possible values:
{ "enabled", "disabled" }
+ *
Default:
"disabled"
+ *
+ * @since 3.6 + * @category CompilerOptionID + */ + public static final String COMPILER_PB_MISSING_OVERRIDE_ANNOTATION_FOR_INTERFACE_METHOD_IMPLEMENTATION = PLUGIN_ID + ".compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation"; //$NON-NLS-1$ + /** * Compiler option ID: Reporting Missing @Deprecated Annotation. *

When enabled, the compiler will issue an error or a warning whenever encountering a declaration * carrying a @deprecated doc tag but having no corresponding @Deprecated annotation. 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.341 diff -u -r1.341 Main.java --- batch/org/eclipse/jdt/internal/compiler/batch/Main.java 14 May 2009 22:15:07 -0000 1.341 +++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java 16 Sep 2009 10:48:44 -0000 @@ -3088,6 +3088,14 @@ CompilerOptions.OPTION_ReportDeadCodeInTrivialIfStatement, isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); return; + } else if (token.equals("allOver-ann")) { //$NON-NLS-1$ + this.options.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotation, + isEnabling ? CompilerOptions.WARNING : CompilerOptions.IGNORE); + this.options.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, + isEnabling ? CompilerOptions.ENABLED : CompilerOptions.DISABLED); + return; } break; case 'b' : @@ -3319,6 +3327,9 @@ this.options.put( CompilerOptions.OPTION_ReportMissingOverrideAnnotation, isEnabling ? CompilerOptions.WARNING : CompilerOptions.IGNORE); + this.options.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, + CompilerOptions.DISABLED); return; } break; 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.838 diff -u -r1.838 messages.properties --- batch/org/eclipse/jdt/internal/compiler/batch/messages.properties 10 Sep 2009 16:30:20 -0000 1.838 +++ batch/org/eclipse/jdt/internal/compiler/batch/messages.properties 16 Sep 2009 10:48:45 -0000 @@ -236,6 +236,7 @@ \ allDeadCode dead code including trivial if(DEBUG) check\n\ \ allDeprecation deprecation including inside deprecated code\n\ \ allJavadoc invalid or missing javadoc\n\ +\ allOver-ann all missing @Override annotations\n\ \ assertIdentifier + ''assert'' used as identifier\n\ \ boxing autoboxing conversion\n\ \ charConcat + char[] in String concat\n\ Index: compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java,v retrieving revision 1.74 diff -u -r1.74 MethodDeclaration.java --- compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java 29 Jul 2009 16:41:31 -0000 1.74 +++ compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java 16 Sep 2009 10:48:48 -0000 @@ -160,10 +160,32 @@ break checkOverride; // claims to override, and doesn't actually do so this.scope.problemReporter().methodMustOverride(this, complianceLevel); - } else if (!this.binding.declaringClass.isInterface() - && (bindingModifiers & (ClassFileConstants.AccStatic|ExtraCompilerModifiers.AccOverriding)) == ExtraCompilerModifiers.AccOverriding) { - // actually overrides, but did not claim to do so - this.scope.problemReporter().missingOverrideAnnotation(this); + } else { + //In case of a concrete class method, we have to check if it overrides(in 1.5 and above) OR implements a method(1.6 and above). + //Also check if the method has a signature that is override-equivalent to that of any public method declared in Object. + if (!this.binding.declaringClass.isInterface()){ + if((bindingModifiers & (ClassFileConstants.AccStatic|ExtraCompilerModifiers.AccOverriding)) == ExtraCompilerModifiers.AccOverriding) { + this.scope.problemReporter().missingOverrideAnnotation(this); + } else { + if(complianceLevel >= ClassFileConstants.JDK1_6 + && compilerOptions.reportMissingOverrideAnnotationForInterfaceMethodImplementation + && this.binding.isImplementing()) { + // actually overrides, but did not claim to do so + this.scope.problemReporter().missingOverrideAnnotationForInterfaceMethodImplementation(this); + } + + } + } + else { //For 1.6 and above only + //In case of a interface class method, we have to check if it overrides a method (isImplementing returns true in case it overrides) + //Also check if the method has a signature that is override-equivalent to that of any public method declared in Object. + if(complianceLevel >= ClassFileConstants.JDK1_6 + && compilerOptions.reportMissingOverrideAnnotationForInterfaceMethodImplementation + && (((bindingModifiers & (ClassFileConstants.AccStatic|ExtraCompilerModifiers.AccOverriding)) == ExtraCompilerModifiers.AccOverriding) || this.binding.isImplementing())){ + // actually overrides, but did not claim to do so + this.scope.problemReporter().missingOverrideAnnotationForInterfaceMethodImplementation(this); + } + } } } 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.216 diff -u -r1.216 CompilerOptions.java --- compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java 26 Jun 2009 18:50:34 -0000 1.216 +++ compiler/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java 16 Sep 2009 10:48:52 -0000 @@ -105,6 +105,7 @@ public static final String OPTION_ReportAutoboxing = "org.eclipse.jdt.core.compiler.problem.autoboxing"; //$NON-NLS-1$ public static final String OPTION_ReportAnnotationSuperInterface = "org.eclipse.jdt.core.compiler.problem.annotationSuperInterface"; //$NON-NLS-1$ public static final String OPTION_ReportMissingOverrideAnnotation = "org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation"; //$NON-NLS-1$ + public static final String OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation = "org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation"; //$NON-NLS-1$ public static final String OPTION_ReportMissingDeprecatedAnnotation = "org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation"; //$NON-NLS-1$ public static final String OPTION_ReportIncompleteEnumSwitch = "org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch"; //$NON-NLS-1$ public static final String OPTION_ReportForbiddenReference = "org.eclipse.jdt.core.compiler.problem.forbiddenReference"; //$NON-NLS-1$ @@ -326,6 +327,8 @@ public boolean processAnnotations; /** Store annotations */ public boolean storeAnnotations; + /** Specify if need to report missing override annotation for a method implementing an interface method (java 1.6 and above)*/ + public boolean reportMissingOverrideAnnotationForInterfaceMethodImplementation; /** Indicate if annotation processing generates classfiles */ public boolean generateClassFiles; @@ -843,6 +846,7 @@ optionsMap.put(OPTION_ReportDiscouragedReference, getSeverityString(DiscouragedReference)); optionsMap.put(OPTION_ReportVarargsArgumentNeedCast, getSeverityString(VarargsArgumentNeedCast)); optionsMap.put(OPTION_ReportMissingOverrideAnnotation, getSeverityString(MissingOverrideAnnotation)); + optionsMap.put(OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, this.reportMissingOverrideAnnotationForInterfaceMethodImplementation ? ENABLED : DISABLED); optionsMap.put(OPTION_ReportMissingDeprecatedAnnotation, getSeverityString(MissingDeprecatedAnnotation)); optionsMap.put(OPTION_ReportIncompleteEnumSwitch, getSeverityString(IncompleteEnumSwitch)); optionsMap.put(OPTION_ReportUnusedLabel, getSeverityString(UnusedLabel)); @@ -1013,6 +1017,9 @@ // enable annotation processing by default only in batch mode this.processAnnotations = false; + // disable missing override annotation reporting for interface method implementation + this.reportMissingOverrideAnnotationForInterfaceMethodImplementation = false; + // dead code detection this.reportDeadCodeInTrivialIfStatement = false; @@ -1208,6 +1215,13 @@ this.treatOptionalErrorAsFatal = false; } } + if ((optionValue = optionsMap.get(OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation)) != null) { + if (ENABLED.equals(optionValue)) { + this.reportMissingOverrideAnnotationForInterfaceMethodImplementation = true; + } else if (DISABLED.equals(optionValue)) { + this.reportMissingOverrideAnnotationForInterfaceMethodImplementation = false; + } + } if ((optionValue = optionsMap.get(OPTION_ReportMethodWithConstructorName)) != null) updateSeverity(MethodWithConstructorName, optionValue); if ((optionValue = optionsMap.get(OPTION_ReportOverridingPackageDefaultMethod)) != null) updateSeverity(OverriddenPackageDefaultMethod, optionValue); if ((optionValue = optionsMap.get(OPTION_ReportDeprecation)) != null) updateSeverity(UsingDeprecatedAPI, optionValue); @@ -1445,6 +1459,7 @@ buf.append("\n\t- autoboxing: ").append(getSeverityString(AutoBoxing)); //$NON-NLS-1$ buf.append("\n\t- annotation super interface: ").append(getSeverityString(AnnotationSuperInterface)); //$NON-NLS-1$ buf.append("\n\t- missing @Override annotation: ").append(getSeverityString(MissingOverrideAnnotation)); //$NON-NLS-1$ + buf.append("\n\t- missing @Override annotation for interface method implementation: ").append(this.reportMissingOverrideAnnotationForInterfaceMethodImplementation ? ENABLED : DISABLED); //$NON-NLS-1$ 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$ #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.200 diff -u -r1.200 AnnotationTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java 27 Aug 2009 14:19:18 -0000 1.200 +++ src/org/eclipse/jdt/core/tests/compiler/regression/AnnotationTest.java 16 Sep 2009 10:49:39 -0000 @@ -8869,4 +8869,182 @@ "Cycle detected: the annotation type Test.Anno cannot contain attributes of the annotation type itself\n" + "----------\n"); } + +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194 +// To check Missing override annotation error when a method implements +// and also overrides a method in a superclass +public void test271a() { + String testString [] = new String[] { + "T.java", + "public interface T {\n" + + " void m();\n" + + "}\n" + + "abstract class A implements T {\n" + + "}\n" + + "class B extends A {\n" + + " public void m() {}\n" + + "}\n" + }; + Map customOptions = getCompilerOptions(); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotation, + CompilerOptions.ERROR); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, + CompilerOptions.ENABLED); + if (new CompilerOptions(customOptions).sourceLevel >= ClassFileConstants.JDK1_6) { + String expectedOutput = + "----------\n" + + "1. ERROR in T.java (at line 7)\n" + + " public void m() {}\n" + + " ^^^\n" + + "The method m() of type B should be tagged with @Override since it actually overrides a supertype method\n" + + "----------\n"; + this.runNegativeTest( + true, + testString, + null, customOptions, + expectedOutput, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } else { + this.runConformTest( + true, testString, + null, + customOptions, + null, + null, null, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } +} + +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194 +// To check Missing override annotation error when a method implements but +// doesn't overrides +public void test271b() { + String testString [] = new String[] { + "Over.java", + "interface I {\n" + + " void m();\n" + + "}\n" + + "public class Over implements I {\n" + + " public void m() {}\n" + + "}\n" + }; + Map customOptions = getCompilerOptions(); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotation, + CompilerOptions.ERROR); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, + CompilerOptions.ENABLED); + if (new CompilerOptions(customOptions).sourceLevel >= ClassFileConstants.JDK1_6) { + String expectedOutput = + "----------\n" + + "1. ERROR in Over.java (at line 5)\n" + + " public void m() {}\n" + + " ^^^\n" + + "The method m() of type Over should be tagged with @Override since it actually overrides a supertype method\n" + + "----------\n"; + this.runNegativeTest( + true, + testString, + null, customOptions, + expectedOutput, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } else { + this.runConformTest( + true, testString, + null, + customOptions, + null, + null, null, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } +} + +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194 +// To check Missing override annotation error when a method simply overrides +public void test271c() { + String testString [] = new String[] { + "B.java", + "interface A {\n" + + " void m();\n" + + "}\n" + + "public interface B extends A {\n" + + " void m();\n" + + "}\n" + }; + Map customOptions = getCompilerOptions(); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotation, + CompilerOptions.ERROR); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, + CompilerOptions.ENABLED); + if (new CompilerOptions(customOptions).sourceLevel >= ClassFileConstants.JDK1_6) { + String expectedOutput = + "----------\n" + + "1. ERROR in B.java (at line 5)\n" + + " void m();\n" + + " ^^^\n" + + "The method m() of type B should be tagged with @Override since it actually overrides a supertype method\n" + + "----------\n"; + this.runNegativeTest( + true, + testString, + null, customOptions, + expectedOutput, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } else { + this.runConformTest( + true, testString, + null, + customOptions, + null, + null, null, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } +} + +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=163194 +// To check missing override annotation if the method has a signature +// that is override-equivalent to that of any public method declared in Object. +public void test271d() { + String testString [] = new String[] { + "A.java", + "public interface A {\n" + + " String toString();\n" + + "}\n" + }; + Map customOptions = getCompilerOptions(); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotation, + CompilerOptions.ERROR); + customOptions.put( + CompilerOptions.OPTION_ReportMissingOverrideAnnotationForInterfaceMethodImplementation, + CompilerOptions.ENABLED); + if (new CompilerOptions(customOptions).sourceLevel >= ClassFileConstants.JDK1_6) { + String expectedOutput = + "----------\n" + + "1. ERROR in A.java (at line 2)\n" + + " String toString();\n" + + " ^^^^^^^^^^\n" + + "The method toString() of type A should be tagged with @Override since it actually overrides a supertype method\n" + + "----------\n"; + this.runNegativeTest( + true, + testString, + null, customOptions, + expectedOutput, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } else { + this.runConformTest( + true, testString, + null, + customOptions, + null, + null, null, + JavacTestOptions.Excuse.EclipseWarningConfiguredAsError); + } +} } 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.191 diff -u -r1.191 BatchCompilerTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java 10 Sep 2009 16:30:19 -0000 1.191 +++ src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java 16 Sep 2009 10:49:56 -0000 @@ -1641,6 +1641,7 @@ " allDeadCode dead code including trivial if(DEBUG) check\n" + " allDeprecation deprecation including inside deprecated code\n" + " allJavadoc invalid or missing javadoc\n" + + " allOver-ann all missing @Override annotations\n" + " assertIdentifier + ''assert'' used as identifier\n" + " boxing autoboxing conversion\n" + " charConcat + char[] in String concat\n" + @@ -1813,6 +1814,7 @@ "