test/tools/javac/T8029102/WarnSerializableLambdaTest.java

Mon, 26 Oct 2015 13:23:30 -0700

author
asaha
date
Mon, 26 Oct 2015 13:23:30 -0700
changeset 2999
683b3e7e05a7
parent 0
959103a6100f
permissions
-rw-r--r--

Added tag jdk8u76-b00 for changeset 10ffafaf5340

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

mercurial