| /* |
| * @test /nodynamiccopyright/ |
| * @bug 8006733 8006775 |
| * @summary Ensure behavior for nested types is correct. |
| * @author Werner Dietl |
| * @ignore 8057679 clarify error messages trying to annotate scoping |
| * @compile/fail/ref=CantAnnotateScoping.out -XDrawDiagnostics CantAnnotateScoping.java |
| */ |
| |
| import java.util.List; |
| import java.util.ArrayList; |
| |
| import java.lang.annotation.*; |
| |
| @Target({ElementType.TYPE_USE}) |
| @interface TA {} |
| @Target({ElementType.TYPE_USE}) |
| @interface TA2 {} |
| |
| @Target({ElementType.FIELD}) |
| @interface DA {} |
| @Target({ElementType.FIELD}) |
| @interface DA2 {} |
| |
| @Target({ElementType.TYPE_USE, ElementType.FIELD}) |
| @interface DTA {} |
| @Target({ElementType.TYPE_USE, ElementType.FIELD}) |
| @interface DTA2 {} |
| |
| class Test { |
| static class Outer { |
| static class SInner {} |
| } |
| |
| // Legal |
| List<Outer. @TA SInner> li; |
| |
| // Illegal |
| @TA Outer.SInner osi; |
| // Illegal |
| List<@TA Outer.SInner> aloi; |
| // Illegal |
| Object o1 = new @TA @DA @TA2 Outer.SInner(); |
| // Illegal |
| Object o = new ArrayList<@TA @DA Outer.SInner>(); |
| |
| // Illegal: @TA is only a type-use annotation |
| @TA java.lang.Object f1; |
| |
| // Legal: @DA is only a declaration annotation |
| @DA java.lang.Object f2; |
| |
| // Legal: @DTA is both a type-use and declaration annotation |
| @DTA java.lang.Object f3; |
| |
| // Illegal: @TA and @TA2 are only type-use annotations |
| @DTA @DA @TA @DA2 @TA2 java.lang.Object f4; |
| |
| // Illegal: Do we want one or two messages? |
| // 1: @DA in invalid location |
| // 2: Not finding class "lang" |
| java. @DA lang.Object f5; |
| |
| // Illegal: Do we want one or two messages? |
| // 1: @DA in invalid location |
| // 2: Not finding class "XXX" |
| java. @DA XXX.Object f6; |
| |
| // Illegal: Can't find class "lang". |
| // Would a different error message be desirable? |
| java. @TA lang.Object f7; |
| } |