|
1 /* |
|
2 * @test /nodynamiccopyright/ |
|
3 * @bug 8006733 8006775 |
|
4 * @summary Ensure behavior for nested types is correct. |
|
5 * @author Werner Dietl |
|
6 * @compile CantAnnotateStaticClass.java |
|
7 */ |
|
8 |
|
9 import java.util.List; |
|
10 import java.util.ArrayList; |
|
11 import java.util.HashMap; |
|
12 import java.lang.annotation.*; |
|
13 |
|
14 class Top { |
|
15 @Target(ElementType.TYPE_USE) |
|
16 @interface TA {} |
|
17 |
|
18 @Target(ElementType.TYPE_USE) |
|
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 {} |
|
33 } |
|
34 |
|
35 // All combinations are OK |
|
36 |
|
37 Top.@TB Outer f1; |
|
38 @TB Outer.Inner f1a; |
|
39 Outer. @TC Inner f1b; |
|
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; |
|
63 } |
|
64 |
|
65 List<@TB Outer> g1; |
|
66 List<@TB Outer.Inner> g1a; |
|
67 List<Outer. @TC Inner> g1b; |
|
68 List<@TB Outer. @TC Inner> g1c; |
|
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>(); |
|
95 } |
|
96 } |