15385
|
1 |
/*
|
|
2 |
* @test /nodynamiccopyright/
|
|
3 |
* @bug 8006733 8006775
|
21041
|
4 |
* @summary Ensure behavior for nested types is correct.
|
15385
|
5 |
* @author Werner Dietl
|
21041
|
6 |
* @compile CantAnnotateStaticClass.java
|
15385
|
7 |
*/
|
|
8 |
|
|
9 |
import java.util.List;
|
21041
|
10 |
import java.util.ArrayList;
|
|
11 |
import java.util.HashMap;
|
15385
|
12 |
import java.lang.annotation.*;
|
|
13 |
|
21041
|
14 |
class Top {
|
|
15 |
@Target(ElementType.TYPE_USE)
|
|
16 |
@interface TA {}
|
|
17 |
|
|
18 |
@Target(ElementType.TYPE_USE)
|
|
19 |
@interface TB {}
|
|
20 |
|
15385
|
21 |
@Target(ElementType.TYPE_USE)
|
21041
|
22 |
@interface TC {}
|
15385
|
23 |
|
21041
|
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 {}
|
15385
|
33 |
}
|
|
34 |
|
21041
|
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;
|
15385
|
63 |
}
|
|
64 |
|
21041
|
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; }
|
15385
|
79 |
|
21041
|
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 |
}
|
15385
|
96 |
}
|