test/tools/javac/T8029102/WarnSerializableLambdaTest.java

changeset 2390
b06c2db45ddb
parent 0
959103a6100f
equal deleted inserted replaced
2389:f1fbe29e36d1 2390:b06c2db45ddb
1 /*
2 * @test /nodynamiccopyright/
3 * @bug 8029102
4 * @summary Enhance compiler warnings for Lambda
5 * Checks that the warning for accessing non public members of a class is
6 * fired correctly.
7 * @compile/fail/ref=WarnSerializableLambdaTest.out -XDrawDiagnostics -Werror -XDwarnOnAccessToSensitiveMembers WarnSerializableLambdaTest.java
8 */
9
10 import java.io.Serializable;
11
12 public class WarnSerializableLambdaTest {
13
14 void warnLambda() throws Exception {
15 SAM t3 = (SAM & Serializable)WarnSerializableLambdaTest::packageClassMethod;
16 SAM t4 = (SAM & Serializable)WarnSerializableLambdaTest::protectedClassMethod;
17 SAM t5 = (SAM & Serializable)WarnSerializableLambdaTest::privateClassMethod;
18
19 WarnSerializableLambdaTest test = new WarnSerializableLambdaTest();
20 SAM t6 = (SAM & Serializable)test::packageInstanceMethod;
21 SAM t7 = (SAM & Serializable)test::protectedInstanceMethod;
22 SAM t8 = (SAM & Serializable)test::privateInstanceMethod;
23
24 SAM t9 = (SAM & Serializable) c -> {
25
26 WarnSerializableLambdaTest.staticPackageField = "";
27 WarnSerializableLambdaTest.staticProtectedField = "";
28 WarnSerializableLambdaTest.staticPrivateField = "";
29
30 packageField = "";
31 protectedField = "";
32 privateField = "";
33
34 WarnSerializableLambdaTest.packageClassMethod(null);
35 WarnSerializableLambdaTest.protectedClassMethod(null);
36 WarnSerializableLambdaTest.privateClassMethod(null);
37
38 packageInstanceMethod(null);
39 protectedInstanceMethod(null);
40 privateInstanceMethod(null);
41
42 PrivateClass.effectivelyNonPublicStaticField = "";
43 PrivateClass.effectivelyNonPublicClassMethod();
44
45 PrivateClass p = new PrivateClass();
46 p.effectivelyNonPublicInstanceField = "";
47 p.effectivelyNonPublicInstanceMethod();
48
49 return null;
50 };
51 }
52
53 private void warnAnoInnerClass() throws Exception {
54 new SerializableDesc() {
55 public void m(Object param) throws Exception {
56 WarnSerializableLambdaTest.staticPackageField = "";
57 WarnSerializableLambdaTest.staticProtectedField = "";
58 WarnSerializableLambdaTest.staticPrivateField = "";
59
60 packageField = "";
61 protectedField = "";
62 privateField = "";
63
64 WarnSerializableLambdaTest.packageClassMethod(null);
65 WarnSerializableLambdaTest.protectedClassMethod(null);
66 WarnSerializableLambdaTest.privateClassMethod(null);
67
68 packageInstanceMethod(null);
69 protectedInstanceMethod(null);
70 privateInstanceMethod(null);
71
72 PrivateClass.effectivelyNonPublicStaticField = "";
73 PrivateClass.effectivelyNonPublicClassMethod();
74
75 PrivateClass p = new PrivateClass();
76 p.effectivelyNonPublicInstanceField = "";
77 p.effectivelyNonPublicInstanceMethod();
78 }
79 };
80 }
81
82 void dontWarnLambda() throws Exception {
83 SAM t1 = (SAM & Serializable)WarnSerializableLambdaTest::publicClassMethod;
84
85 WarnSerializableLambdaTest test = new WarnSerializableLambdaTest();
86 SAM t2 = (SAM & Serializable)test::publicInstanceMethod;
87
88 int[] buffer = {0};
89
90 SAM t3 = (SAM & Serializable) param -> {
91 Object localVar;
92 localVar = null;
93 param = null;
94
95 WarnSerializableLambdaTest.staticPublicField = "";
96 publicField = "";
97 WarnSerializableLambdaTest.publicClassMethod(null);
98 publicInstanceMethod(null);
99
100 PublicClass.effectivelyPublicStaticField = "";
101 PublicClass.effectivelyPublicClassMethod();
102
103 PublicClass p = new PublicClass();
104 p.effectivelyPublicInstanceField = "";
105 p.effectivelyPublicInstanceMethod();
106
107 int l = buffer.length;
108
109 return null;
110 };
111 }
112
113 private void dontWarnAnoInnerClass() throws Exception {
114 final int[] buffer = {0};
115 new SerializableDesc() {
116 public void m(Object param) throws Exception {
117 Object localVar;
118 localVar = null;
119 param = null;
120
121 WarnSerializableLambdaTest.staticPublicField = "";
122 publicField = "";
123 WarnSerializableLambdaTest.publicClassMethod(null);
124 publicInstanceMethod(null);
125
126 PublicClass.effectivelyPublicStaticField = "";
127 PublicClass.effectivelyPublicClassMethod();
128
129 PublicClass p = new PublicClass();
130 p.effectivelyPublicInstanceField = "";
131 p.effectivelyPublicInstanceMethod();
132
133 int l = buffer.length;
134 }
135 };
136 }
137
138 enum WarnEnum {
139 A {
140 public void m() throws Exception {
141 WarnSerializableLambdaTest.staticPackageField = "";
142 WarnSerializableLambdaTest.staticProtectedField = "";
143 WarnSerializableLambdaTest.staticPrivateField = "";
144
145 WarnSerializableLambdaTest test =
146 new WarnSerializableLambdaTest();
147
148 test.packageField = "";
149 test.protectedField = "";
150 test.privateField = "";
151
152 WarnSerializableLambdaTest.packageClassMethod(null);
153 WarnSerializableLambdaTest.protectedClassMethod(null);
154 WarnSerializableLambdaTest.privateClassMethod(null);
155
156 test.packageInstanceMethod(null);
157 test.protectedInstanceMethod(null);
158 test.privateInstanceMethod(null);
159
160 PrivateClass.effectivelyNonPublicStaticField = "";
161 PrivateClass.effectivelyNonPublicClassMethod();
162
163 PrivateClass p = new PrivateClass();
164 p.effectivelyNonPublicInstanceField = "";
165 p.effectivelyNonPublicInstanceMethod();
166 }
167 };
168
169 public void m() throws Exception {}
170 }
171
172 static String staticPackageField;
173 static private String staticPrivateField;
174 static protected String staticProtectedField;
175 static public String staticPublicField;
176
177 String packageField;
178 private String privateField;
179 protected String protectedField;
180 public String publicField;
181
182 static Object packageClassMethod(String s) {
183 return null;
184 }
185
186 static private Object privateClassMethod(String s) {
187 return null;
188 }
189
190 static protected Object protectedClassMethod(String s) {
191 return null;
192 }
193
194 static public Object publicClassMethod(String s) {
195 return null;
196 }
197
198 Object packageInstanceMethod(String s) {
199 return null;
200 }
201
202 protected Object protectedInstanceMethod(String s) {
203 return null;
204 }
205
206 private Object privateInstanceMethod(String s) {
207 return null;
208 }
209
210 public Object publicInstanceMethod(String s) {
211 return null;
212 }
213
214 interface SAM {
215 Object apply(String s) throws Exception;
216 }
217
218 interface SAM2 {
219 Object apply(String arg1, String arg2);
220 }
221
222 class SerializableDesc implements Serializable {
223 public void m(Object param) throws Exception {}
224 }
225
226 static private class PrivateClass {
227 static public String effectivelyNonPublicStaticField;
228 public String effectivelyNonPublicInstanceField;
229
230 static public void effectivelyNonPublicClassMethod() {}
231 public void effectivelyNonPublicInstanceMethod() {}
232 }
233
234 static public class PublicClass {
235 static public String effectivelyPublicStaticField;
236 public String effectivelyPublicInstanceField;
237
238 static public void effectivelyPublicClassMethod() {}
239 public void effectivelyPublicInstanceMethod() {}
240 }
241 }

mercurial