Tue, 12 Mar 2013 17:39:34 +0100
7196531: Duplicate error messages on repeating annotations
Reviewed-by: jjg
1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Annotate.java Tue Mar 12 16:02:43 2013 +0000 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Annotate.java Tue Mar 12 17:39:34 2013 +0100 1.3 @@ -384,10 +384,16 @@ 1.4 Assert.check(!annotations.isEmpty() && 1.5 !annotations.tail.isEmpty()); // i.e. size() > 1 1.6 1.7 + int count = 0; 1.8 for (List<T> al = annotations; 1.9 !al.isEmpty(); 1.10 al = al.tail) 1.11 { 1.12 + count++; 1.13 + 1.14 + // There must be more than a single anno in the annotation list 1.15 + Assert.check(count > 1 || !al.tail.isEmpty()); 1.16 + 1.17 T currentAnno = al.head; 1.18 1.19 origAnnoType = currentAnno.type; 1.20 @@ -395,7 +401,9 @@ 1.21 arrayOfOrigAnnoType = types.makeArrayType(origAnnoType); 1.22 } 1.23 1.24 - Type currentContainerType = getContainingType(currentAnno, ctx.pos.get(currentAnno)); 1.25 + // Only report errors if this isn't the first occurrence I.E. count > 1 1.26 + boolean reportError = count > 1; 1.27 + Type currentContainerType = getContainingType(currentAnno, ctx.pos.get(currentAnno), reportError); 1.28 if (currentContainerType == null) { 1.29 continue; 1.30 } 1.31 @@ -464,7 +472,8 @@ 1.32 1.33 /** Fetches the actual Type that should be the containing annotation. */ 1.34 private Type getContainingType(Attribute.Compound currentAnno, 1.35 - DiagnosticPosition pos) 1.36 + DiagnosticPosition pos, 1.37 + boolean reportError) 1.38 { 1.39 Type origAnnoType = currentAnno.type; 1.40 TypeSymbol origAnnoDecl = origAnnoType.tsym; 1.41 @@ -473,7 +482,8 @@ 1.42 // annotation's declaration, or null if it has none 1.43 Attribute.Compound ca = origAnnoDecl.attribute(syms.repeatableType.tsym); 1.44 if (ca == null) { // has no Repeatable annotation 1.45 - log.error(pos, "duplicate.annotation.missing.container", origAnnoType, syms.repeatableType); 1.46 + if (reportError) 1.47 + log.error(pos, "duplicate.annotation.missing.container", origAnnoType, syms.repeatableType); 1.48 return null; 1.49 } 1.50
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.java Tue Mar 12 17:39:34 2013 +0100 2.3 @@ -0,0 +1,37 @@ 2.4 +/* 2.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 2.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 2.7 + * 2.8 + * This code is free software; you can redistribute it and/or modify it 2.9 + * under the terms of the GNU General Public License version 2 only, as 2.10 + * published by the Free Software Foundation. 2.11 + * 2.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 2.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 2.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2.15 + * version 2 for more details (a copy is included in the LICENSE file that 2.16 + * accompanied this code). 2.17 + * 2.18 + * You should have received a copy of the GNU General Public License version 2.19 + * 2 along with this work; if not, write to the Free Software Foundation, 2.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2.21 + * 2.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2.23 + * or visit www.oracle.com if you need additional information or have any 2.24 + * questions. 2.25 + */ 2.26 + 2.27 +/** 2.28 + * @test 2.29 + * @bug 7196531 2.30 + * @compile/fail/ref=DuplicateErrors.out -XDrawDiagnostics DuplicateErrors.java 2.31 + */ 2.32 + 2.33 + 2.34 +@interface Foo {} 2.35 + 2.36 +@Foo 2.37 +@Foo 2.38 +@Foo 2.39 +public class DuplicateErrors { 2.40 +}
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.out Tue Mar 12 17:39:34 2013 +0100 3.3 @@ -0,0 +1,3 @@ 3.4 +DuplicateErrors.java:34:1: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable 3.5 +DuplicateErrors.java:35:1: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable 3.6 +2 errors
4.1 --- a/test/tools/javac/annotations/repeatingAnnotations/NoRepeatableAnno.out Tue Mar 12 16:02:43 2013 +0000 4.2 +++ b/test/tools/javac/annotations/repeatingAnnotations/NoRepeatableAnno.out Tue Mar 12 17:39:34 2013 +0100 4.3 @@ -1,3 +1,2 @@ 4.4 -NoRepeatableAnno.java:11:1: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable 4.5 NoRepeatableAnno.java:11:6: compiler.err.duplicate.annotation.missing.container: Foo, java.lang.annotation.Repeatable 4.6 -2 errors 4.7 +1 error
5.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 5.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 5.3 @@ -1,3 +1,2 @@ 5.4 -DuplicateTypeAnnotation.java:11:12: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 5.5 DuplicateTypeAnnotation.java:11:15: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 5.6 -2 errors 5.7 +1 error
6.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 6.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 6.3 @@ -1,3 +1,2 @@ 6.4 -DuplicateTypeAnnotation.java:11:17: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 6.5 DuplicateTypeAnnotation.java:11:20: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 6.6 -2 errors 6.7 +1 error
7.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 7.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/newarray/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 7.3 @@ -1,3 +1,2 @@ 7.4 -DuplicateTypeAnnotation.java:11:29: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 7.5 DuplicateTypeAnnotation.java:11:32: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 7.6 -2 errors 7.7 +1 error
8.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/parambounds/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 8.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/parambounds/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 8.3 @@ -1,3 +1,2 @@ 8.4 -DuplicateTypeAnnotation.java:9:35: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 8.5 DuplicateTypeAnnotation.java:9:38: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 8.6 -2 errors 8.7 \ No newline at end of file 8.8 +1 error
9.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 9.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/receiver/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 9.3 @@ -1,3 +1,2 @@ 9.4 -DuplicateTypeAnnotation.java:10:13: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 9.5 DuplicateTypeAnnotation.java:10:16: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 9.6 -2 errors 9.7 +1 error
10.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/rest/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 10.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/rest/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 10.3 @@ -1,3 +1,2 @@ 10.4 -DuplicateTypeAnnotation.java:11:9: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 10.5 DuplicateTypeAnnotation.java:11:12: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 10.6 -2 errors 10.7 \ No newline at end of file 10.8 +1 error
11.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 11.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 11.3 @@ -1,3 +1,2 @@ 11.4 -DuplicateTypeAnnotation.java:10:21: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 11.5 DuplicateTypeAnnotation.java:10:24: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 11.6 -2 errors 11.7 \ No newline at end of file 11.8 +1 error
12.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 12.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 12.3 @@ -1,3 +1,2 @@ 12.4 -DuplicateTypeAnnotation.java:9:25: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 12.5 DuplicateTypeAnnotation.java:9:28: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 12.6 -2 errors 12.7 \ No newline at end of file 12.8 +1 error
13.1 --- a/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/DuplicateTypeAnnotation.out Tue Mar 12 16:02:43 2013 +0000 13.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/DuplicateTypeAnnotation.out Tue Mar 12 17:39:34 2013 +0100 13.3 @@ -1,3 +1,2 @@ 13.4 -DuplicateTypeAnnotation.java:10:21: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 13.5 DuplicateTypeAnnotation.java:10:24: compiler.err.duplicate.annotation.missing.container: A, java.lang.annotation.Repeatable 13.6 -2 errors 13.7 \ No newline at end of file 13.8 +1 error
14.1 --- a/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out Tue Mar 12 16:02:43 2013 +0000 14.2 +++ b/test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out Tue Mar 12 17:39:34 2013 +0100 14.3 @@ -1,53 +1,28 @@ 14.4 -RepeatingTypeAnnotations.java:39:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.5 RepeatingTypeAnnotations.java:39:25: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.6 -RepeatingTypeAnnotations.java:41:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.7 RepeatingTypeAnnotations.java:41:25: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.8 -RepeatingTypeAnnotations.java:42:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.9 RepeatingTypeAnnotations.java:42:25: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.10 -RepeatingTypeAnnotations.java:50:22: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.11 RepeatingTypeAnnotations.java:50:31: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.12 -RepeatingTypeAnnotations.java:52:20: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.13 RepeatingTypeAnnotations.java:52:24: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.14 -RepeatingTypeAnnotations.java:61:17: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.15 RepeatingTypeAnnotations.java:61:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.16 -RepeatingTypeAnnotations.java:63:34: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.17 RepeatingTypeAnnotations.java:63:38: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.18 -RepeatingTypeAnnotations.java:65:20: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.19 RepeatingTypeAnnotations.java:65:24: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.20 -RepeatingTypeAnnotations.java:72:17: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.21 RepeatingTypeAnnotations.java:72:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.22 -RepeatingTypeAnnotations.java:77:24: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.23 RepeatingTypeAnnotations.java:77:28: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.24 -RepeatingTypeAnnotations.java:79:17: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.25 RepeatingTypeAnnotations.java:79:21: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.26 -RepeatingTypeAnnotations.java:79:32: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.27 RepeatingTypeAnnotations.java:79:36: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.28 -RepeatingTypeAnnotations.java:81:15: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.29 RepeatingTypeAnnotations.java:81:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.30 -RepeatingTypeAnnotations.java:85:15: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.31 RepeatingTypeAnnotations.java:85:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.32 -RepeatingTypeAnnotations.java:85:30: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.33 RepeatingTypeAnnotations.java:85:34: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.34 -RepeatingTypeAnnotations.java:89:14: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.35 RepeatingTypeAnnotations.java:89:18: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.36 -RepeatingTypeAnnotations.java:89:29: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.37 RepeatingTypeAnnotations.java:89:33: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.38 -RepeatingTypeAnnotations.java:93:15: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.39 RepeatingTypeAnnotations.java:93:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.40 -RepeatingTypeAnnotations.java:93:31: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.41 RepeatingTypeAnnotations.java:93:35: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.42 -RepeatingTypeAnnotations.java:97:30: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.43 RepeatingTypeAnnotations.java:97:34: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.44 -RepeatingTypeAnnotations.java:97:15: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.45 RepeatingTypeAnnotations.java:97:19: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.46 -RepeatingTypeAnnotations.java:101:22: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.47 RepeatingTypeAnnotations.java:101:26: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.48 -RepeatingTypeAnnotations.java:101:33: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.49 RepeatingTypeAnnotations.java:101:37: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.50 -RepeatingTypeAnnotations.java:101:68: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.51 RepeatingTypeAnnotations.java:101:72: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.52 -RepeatingTypeAnnotations.java:101:52: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.53 RepeatingTypeAnnotations.java:101:56: compiler.err.duplicate.annotation.missing.container: TA, java.lang.annotation.Repeatable 14.54 - compiler.note.unchecked.filename: RepeatingTypeAnnotations.java 14.55 - compiler.note.unchecked.recompile 14.56 -50 errors 14.57 \ No newline at end of file 14.58 +25 errors