Tue, 15 Oct 2013 15:57:13 -0700
8026564: import changes from type-annotations forest
Reviewed-by: jjg
Contributed-by: wdietl@gmail.com, steve.sides@oracle.com
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 */
9 import java.util.List;
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.lang.annotation.*;
14 class Top {
15 @Target(ElementType.TYPE_USE)
16 @interface TA {}
18 @Target(ElementType.TYPE_USE)
19 @interface TB {}
21 @Target(ElementType.TYPE_USE)
22 @interface TC {}
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 }
35 // All combinations are OK
37 Top.@TB Outer f1;
38 @TB Outer.Inner f1a;
39 Outer. @TC Inner f1b;
40 @TB Outer. @TC Inner f1c;
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;
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; }
52 void f1param(@TB Outer p,
53 @TB Outer.Inner p1,
54 Outer. @TC Inner p2,
55 @TB Outer. @TC Inner p3) { }
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 }
65 List<@TB Outer> g1;
66 List<@TB Outer.Inner> g1a;
67 List<Outer. @TC Inner> g1b;
68 List<@TB Outer. @TC Inner> g1c;
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;
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; }
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) { }
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 }