7196531: Duplicate error messages on repeating annotations

Tue, 12 Mar 2013 17:39:34 +0100

author
jfranck
date
Tue, 12 Mar 2013 17:39:34 +0100
changeset 1629
f427043f8c65
parent 1628
5ddecb91d843
child 1630
39f8eb897ec6
child 1634
eb0198033c5c
child 1658
fdf30b225e1c

7196531: Duplicate error messages on repeating annotations
Reviewed-by: jjg

src/share/classes/com/sun/tools/javac/comp/Annotate.java file | annotate | diff | comparison | revisions
test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.java file | annotate | diff | comparison | revisions
test/tools/javac/annotations/repeatingAnnotations/DuplicateErrors.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/repeatingAnnotations/NoRepeatableAnno.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/arrays/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/innertypeparams/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/newarray/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/parambounds/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/receiver/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/rest/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/typeArgs/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/typeparams/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/failures/common/wildcards/DuplicateTypeAnnotation.out file | annotate | diff | comparison | revisions
test/tools/javac/annotations/typeAnnotations/newlocations/RepeatingTypeAnnotations.out file | annotate | diff | comparison | revisions
     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

mercurial