test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.java

changeset 2134
b0c086cd4520
parent 2103
b1b4a6dcc282
child 2525
2eb010b6cb22
equal deleted inserted replaced
2133:19e8eebfbe52 2134:b0c086cd4520
1 /* 1 /*
2 * @test /nodynamiccopyright/ 2 * @test /nodynamiccopyright/
3 * @bug 8006733 8006775 3 * @bug 8006733 8006775
4 4 * @summary Ensure behavior for nested types is correct.
5 * @summary A static outer class cannot be annotated.
6 * @author Werner Dietl 5 * @author Werner Dietl
7 * @compile/fail/ref=CantAnnotateStaticClass.out -XDrawDiagnostics CantAnnotateStaticClass.java 6 * @compile CantAnnotateStaticClass.java
8 */ 7 */
9 8
10 import java.util.List; 9 import java.util.List;
10 import java.util.ArrayList;
11 import java.util.HashMap;
11 import java.lang.annotation.*; 12 import java.lang.annotation.*;
12 13
13 class CantAnnotateStaticClass { 14 class Top {
14 @Target(ElementType.TYPE_USE) 15 @Target(ElementType.TYPE_USE)
15 @interface A {} 16 @interface TA {}
16 17
17 static class Outer { 18 @Target(ElementType.TYPE_USE)
18 class Inner {} 19 @interface TB {}
20
21 @Target(ElementType.TYPE_USE)
22 @interface TC {}
23
24 class Outer {
25 class Inner {
26 Object o1 = Top.this;
27 Object o2 = Outer.this;
28 Object o3 = this;
29 }
30 // Illegal
31 // static class SInner {}
32 // interface IInner {}
19 } 33 }
20 34
21 // 8 errors: 35 // All combinations are OK
22 @A Outer.Inner f1; 36
23 @A Outer.Inner f1r() { return null; } 37 Top.@TB Outer f1;
24 void f1p(@A Outer.Inner p) { } 38 @TB Outer.Inner f1a;
25 void f1c(Object o) { 39 Outer. @TC Inner f1b;
26 Object l = (@A Outer.Inner) o; 40 @TB Outer. @TC Inner f1c;
41
42 @TA Top. @TB Outer f2;
43 @TA Top. @TB Outer.Inner f2a;
44 @TA Top. Outer. @TC Inner f2b;
45 @TA Top. @TB Outer. @TC Inner f2c;
46
47 @TB Outer f1r() { return null; }
48 @TB Outer.Inner f1ra() { return null; }
49 Outer. @TC Inner f1rb() { return null; }
50 @TB Outer. @TC Inner f1rc() { return null; }
51
52 void f1param(@TB Outer p,
53 @TB Outer.Inner p1,
54 Outer. @TC Inner p2,
55 @TB Outer. @TC Inner p3) { }
56
57 void f1cast(Object o) {
58 Object l;
59 l = (@TB Outer) o;
60 l = (@TB Outer.Inner) o;
61 l = (Outer. @TC Inner) o;
62 l = (@TB Outer. @TC Inner) o;
27 } 63 }
28 64
29 List<@A Outer.Inner> f2; 65 List<@TB Outer> g1;
30 List<@A Outer.Inner> f2r() { return null; } 66 List<@TB Outer.Inner> g1a;
31 void f2p(List<@A Outer.Inner> p) { } 67 List<Outer. @TC Inner> g1b;
32 void f2c(Object o) { 68 List<@TB Outer. @TC Inner> g1c;
33 Object l = (List<@A Outer.Inner>) o; 69
70 List<@TA Top. @TB Outer> g2;
71 List<@TA Top. @TB Outer.Inner> g2a;
72 List<@TA Top. Outer. @TC Inner> g2b;
73 List<@TA Top. @TB Outer. @TC Inner> g2c;
74
75 List<@TB Outer> g1r() { return null; }
76 List<@TB Outer.Inner> g1ra() { return null; }
77 List<Outer. @TC Inner> g1rb() { return null; }
78 List<@TB Outer. @TC Inner> g1rc() { return null; }
79
80 void g1param(List<@TB Outer> p,
81 List<@TB Outer.Inner> p1,
82 List<Outer. @TC Inner> p2,
83 List<@TB Outer. @TC Inner> p3) { }
84
85 void g1new(Object o) {
86 Object l;
87 l = new @TB ArrayList<@TB Outer>();
88 l = new @TB ArrayList<@TB Outer.Inner>();
89 l = new @TB HashMap<String, Outer. @TC Inner>();
90 l = new @TB HashMap<String, @TB Outer. Inner>();
91 l = new @TB HashMap<String, @TB Outer. @TC Inner>();
92 l = new @TB HashMap<String, @TA Top. Outer. @TC Inner>();
93 l = new @TB HashMap<String, @TA Top. @TB Outer. Inner>();
94 l = new @TB HashMap<String, @TA Top. @TB Outer. @TC Inner>();
34 } 95 }
35
36 // OK:
37 @A Outer g1;
38 List<@A Outer> g2;
39 Outer. @A Inner g3;
40 List<Outer. @A Inner> g4;
41 } 96 }

mercurial