1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass3.java Tue Oct 15 15:57:13 2013 -0700 1.3 @@ -0,0 +1,207 @@ 1.4 +/* 1.5 + * @test /nodynamiccopyright/ 1.6 + * @bug 8006733 8006775 1.7 + * @summary Ensure behavior for nested types is correct. 1.8 + * @author Werner Dietl 1.9 + * @ignore 1.10 + * @compile/fail/ref=CantAnnotateStaticClass3.out -XDrawDiagnostics CantAnnotateStaticClass3.java 1.11 + */ 1.12 + 1.13 +import java.util.List; 1.14 +import java.util.ArrayList; 1.15 +import java.util.HashMap; 1.16 +import java.lang.annotation.*; 1.17 + 1.18 +class Top { 1.19 + @Target(ElementType.TYPE_USE) 1.20 + @interface TA {} 1.21 + 1.22 + @Target(ElementType.TYPE_USE) 1.23 + @interface TB {} 1.24 + 1.25 + @Target(ElementType.TYPE_USE) 1.26 + @interface TC {} 1.27 + 1.28 + interface Outer { 1.29 + class Inner { 1.30 + // Object o1 = Top.this; 1.31 + // Object o2 = Outer.this; 1.32 + Object o3 = this; 1.33 + } 1.34 + static class SInner { 1.35 + // Object o1 = Top.this; 1.36 + // Object o2 = Outer.this; 1.37 + Object o3 = this; 1.38 + } 1.39 + interface IInner { 1.40 + // Object o1 = Top.this; 1.41 + // Object o2 = Outer.this; 1.42 + // Object o3 = this; 1.43 + } 1.44 + } 1.45 + 1.46 + 1.47 + @TB Outer f1; 1.48 + @TB Outer.Inner f1a; // err 1.49 + @TB Outer.SInner f2a; // err 1.50 + @TB Outer.IInner f3a; // err 1.51 + 1.52 + Outer. @TC Inner f1b; 1.53 + Outer. @TC SInner f2b; 1.54 + Outer. @TC IInner f3b; 1.55 + 1.56 + @TB Outer. @TC Inner f1c; // err 1.57 + @TB Outer. @TC SInner f2c; // err 1.58 + @TB Outer. @TC IInner f3c; // err 1.59 + 1.60 + @TA Top. @TB Outer g1; // err 1.61 + @TA Top. @TB Outer.Inner g1a; // err 1.62 + @TA Top. @TB Outer.SInner g2a; // err 1.63 + @TA Top. @TB Outer.IInner g3a; // err 1.64 + 1.65 + @TA Top. Outer. @TC Inner g1b; // err 1.66 + @TA Top. Outer. @TC SInner g2b; // err 1.67 + @TA Top. Outer. @TC IInner g3b; // err 1.68 + 1.69 + @TA Top. @TB Outer. @TC Inner g1c; // err 1.70 + @TA Top. @TB Outer. @TC SInner g2c; // err 1.71 + @TA Top. @TB Outer. @TC IInner g3c; // err 1.72 + 1.73 + @TB Outer f1r() { return null; } 1.74 + 1.75 + @TB Outer.Inner f1ra() { return null; } // err 1.76 + @TB Outer.SInner f2ra() { return null; } // err 1.77 + @TB Outer.IInner f3ra() { return null; } // err 1.78 + 1.79 + Outer. @TC Inner f1rb() { return null; } 1.80 + Outer. @TC SInner f2rb() { return null; } 1.81 + Outer. @TC IInner f3rb() { return null; } 1.82 + 1.83 + @TB Outer. @TC Inner f1rc() { return null; } // err 1.84 + @TB Outer. @TC SInner f2rc() { return null; } // err 1.85 + @TB Outer. @TC IInner f3rc() { return null; } // err 1.86 + 1.87 + void f1param(@TB Outer p, 1.88 + @TB Outer.Inner p1, // err 1.89 + Outer. @TC Inner p2, 1.90 + @TB Outer. @TC Inner p3) { } // err 1.91 + void f2param(@TB Outer p, 1.92 + @TB Outer.SInner p1, // err 1.93 + Outer. @TC SInner p2, 1.94 + @TB Outer. @TC SInner p3) { } // err 1.95 + void f3param(@TB Outer p, 1.96 + @TB Outer.IInner p1, // err 1.97 + Outer. @TC IInner p2, 1.98 + @TB Outer. @TC IInner p3) { } // err 1.99 + 1.100 + void f1cast(Object o) { 1.101 + Object l; 1.102 + l = (@TB Outer) o; 1.103 + l = (@TB Outer.Inner) o; // err 1.104 + l = (Outer. @TC Inner) o; 1.105 + l = (@TB Outer. @TC Inner) o; // err 1.106 + } 1.107 + void f2cast(Object o) { 1.108 + Object l; 1.109 + l = (@TB Outer) o; 1.110 + l = (@TB Outer.SInner) o; // err 1.111 + l = (Outer. @TC SInner) o; 1.112 + l = (@TB Outer. @TC SInner) o; // err 1.113 + } 1.114 + void f3cast(Object o) { 1.115 + Object l; 1.116 + l = (@TB Outer) o; 1.117 + l = (@TB Outer.IInner) o; // err 1.118 + l = (Outer. @TC IInner) o; 1.119 + l = (@TB Outer. @TC IInner) o; // err 1.120 + } 1.121 + 1.122 + List<@TB Outer> h1; 1.123 + 1.124 + List<@TB Outer.Inner> h1a; // err 1.125 + List<@TB Outer.SInner> h2a; // err 1.126 + List<@TB Outer.IInner> h3a; // err 1.127 + 1.128 + List<Outer. @TC Inner> h1b; 1.129 + List<Outer. @TC SInner> h2b; 1.130 + List<Outer. @TC IInner> h3b; 1.131 + 1.132 + List<@TB Outer. @TC Inner> h1c; // err 1.133 + List<@TB Outer. @TC SInner> h2c; // err 1.134 + List<@TB Outer. @TC IInner> h3c; // err 1.135 + 1.136 + List<@TA Top. @TB Outer> k1; // err 1.137 + 1.138 + List<@TA Top. @TB Outer.Inner> k1a; // err 1.139 + List<@TA Top. @TB Outer.SInner> k2a; // err 1.140 + List<@TA Top. @TB Outer.IInner> k3a; // err 1.141 + 1.142 + List<@TA Top. Outer. @TC Inner> k1b; // err 1.143 + List<@TA Top. Outer. @TC SInner> k2b; // err 1.144 + List<@TA Top. Outer. @TC IInner> k3b; // err 1.145 + 1.146 + List<@TA Top. @TB Outer. @TC Inner> k1c; // err 1.147 + List<@TA Top. @TB Outer. @TC SInner> k2c; // err 1.148 + List<@TA Top. @TB Outer. @TC IInner> k3c; // err 1.149 + 1.150 + 1.151 + List<@TB Outer> g1r() { return null; } 1.152 + 1.153 + List<@TB Outer.Inner> g1ra() { return null; } // err 1.154 + List<@TB Outer.SInner> g2ra() { return null; } // err 1.155 + List<@TB Outer.IInner> g3ra() { return null; } // err 1.156 + 1.157 + List<Outer. @TC Inner> g1rb() { return null; } 1.158 + List<Outer. @TC SInner> g2rb() { return null; } 1.159 + List<Outer. @TC IInner> g3rb() { return null; } 1.160 + 1.161 + List<@TB Outer. @TC Inner> g1rc() { return null; } // err 1.162 + List<@TB Outer. @TC SInner> g2rc() { return null; } // err 1.163 + List<@TB Outer. @TC IInner> g3rc() { return null; } // err 1.164 + 1.165 + void g1param(List<@TB Outer> p, 1.166 + List<@TB Outer.Inner> p1, // err 1.167 + List<Outer. @TC Inner> p2, 1.168 + List<@TB Outer. @TC Inner> p3) { } // err 1.169 + void g2param(List<@TB Outer> p, 1.170 + List<@TB Outer.SInner> p1, // err 1.171 + List<Outer. @TC SInner> p2, 1.172 + List<@TB Outer. @TC SInner> p3) { } // err 1.173 + void g3param(List<@TB Outer> p, 1.174 + List<@TB Outer.IInner> p1, // err 1.175 + List<Outer. @TC IInner> p2, 1.176 + List<@TB Outer. @TC IInner> p3) { } // err 1.177 + 1.178 + void g1new(Object o) { 1.179 + Object l; 1.180 + l = new @TB ArrayList<@TB Outer>(); 1.181 + l = new @TB ArrayList<@TB Outer.Inner>(); // err 1.182 + l = new @TB HashMap<String, Outer. @TC Inner>(); 1.183 + l = new @TB HashMap<String, @TB Outer. Inner>(); // err 1.184 + l = new @TB HashMap<String, @TB Outer. @TC Inner>(); // err 1.185 + } 1.186 + void g2new(Object o) { 1.187 + Object l; 1.188 + l = new @TB ArrayList<@TB Outer>(); 1.189 + l = new @TB ArrayList<@TB Outer.SInner>(); // err 1.190 + l = new @TB HashMap<String, Outer. @TC SInner>(); 1.191 + l = new @TB HashMap<String, @TB Outer. SInner>(); // err 1.192 + l = new @TB HashMap<String, @TB Outer. @TC SInner>(); // err 1.193 + } 1.194 + void g3new(Object o) { 1.195 + Object l; 1.196 + l = new @TB ArrayList<@TB Outer>(); 1.197 + l = new @TB ArrayList<@TB Outer.IInner>(); // err 1.198 + l = new @TB HashMap<String, Outer. @TC IInner>(); 1.199 + l = new @TB HashMap<String, @TB Outer. IInner>(); // err 1.200 + l = new @TB HashMap<String, @TB Outer. @TC IInner>(); // err 1.201 + } 1.202 + void g4new(Object o) { 1.203 + Object l; 1.204 + l = new @TB ArrayList<@TA Top. @TB Outer>(); // err 1.205 + l = new @TB ArrayList<@TA Top. @TB Outer.IInner>(); // err 1.206 + l = new @TB HashMap<String, @TA Top. Outer. @TC IInner>(); // err 1.207 + l = new @TB HashMap<String, @TA Top. @TB Outer. IInner>(); // err 1.208 + l = new @TB HashMap<String, @TA Top. @TB Outer. @TC IInner>(); // err 1.209 + } 1.210 +}