aoqi@0: /* aoqi@0: * @test /nodynamiccopyright/ aoqi@0: * @bug 8029102 aoqi@0: * @summary Enhance compiler warnings for Lambda aoqi@0: * Checks that the warning for accessing non public members of a class is aoqi@0: * fired correctly. aoqi@0: * @compile/fail/ref=WarnSerializableLambdaTest.out -XDrawDiagnostics -Werror -XDwarnOnAccessToSensitiveMembers WarnSerializableLambdaTest.java aoqi@0: */ aoqi@0: aoqi@0: import java.io.Serializable; aoqi@0: aoqi@0: public class WarnSerializableLambdaTest { aoqi@0: aoqi@0: void warnLambda() throws Exception { aoqi@0: SAM t3 = (SAM & Serializable)WarnSerializableLambdaTest::packageClassMethod; aoqi@0: SAM t4 = (SAM & Serializable)WarnSerializableLambdaTest::protectedClassMethod; aoqi@0: SAM t5 = (SAM & Serializable)WarnSerializableLambdaTest::privateClassMethod; aoqi@0: aoqi@0: WarnSerializableLambdaTest test = new WarnSerializableLambdaTest(); aoqi@0: SAM t6 = (SAM & Serializable)test::packageInstanceMethod; aoqi@0: SAM t7 = (SAM & Serializable)test::protectedInstanceMethod; aoqi@0: SAM t8 = (SAM & Serializable)test::privateInstanceMethod; aoqi@0: aoqi@0: SAM t9 = (SAM & Serializable) c -> { aoqi@0: aoqi@0: WarnSerializableLambdaTest.staticPackageField = ""; aoqi@0: WarnSerializableLambdaTest.staticProtectedField = ""; aoqi@0: WarnSerializableLambdaTest.staticPrivateField = ""; aoqi@0: aoqi@0: packageField = ""; aoqi@0: protectedField = ""; aoqi@0: privateField = ""; aoqi@0: aoqi@0: WarnSerializableLambdaTest.packageClassMethod(null); aoqi@0: WarnSerializableLambdaTest.protectedClassMethod(null); aoqi@0: WarnSerializableLambdaTest.privateClassMethod(null); aoqi@0: aoqi@0: packageInstanceMethod(null); aoqi@0: protectedInstanceMethod(null); aoqi@0: privateInstanceMethod(null); aoqi@0: aoqi@0: PrivateClass.effectivelyNonPublicStaticField = ""; aoqi@0: PrivateClass.effectivelyNonPublicClassMethod(); aoqi@0: aoqi@0: PrivateClass p = new PrivateClass(); aoqi@0: p.effectivelyNonPublicInstanceField = ""; aoqi@0: p.effectivelyNonPublicInstanceMethod(); aoqi@0: aoqi@0: return null; aoqi@0: }; aoqi@0: } aoqi@0: aoqi@0: private void warnAnoInnerClass() throws Exception { aoqi@0: new SerializableDesc() { aoqi@0: public void m(Object param) throws Exception { aoqi@0: WarnSerializableLambdaTest.staticPackageField = ""; aoqi@0: WarnSerializableLambdaTest.staticProtectedField = ""; aoqi@0: WarnSerializableLambdaTest.staticPrivateField = ""; aoqi@0: aoqi@0: packageField = ""; aoqi@0: protectedField = ""; aoqi@0: privateField = ""; aoqi@0: aoqi@0: WarnSerializableLambdaTest.packageClassMethod(null); aoqi@0: WarnSerializableLambdaTest.protectedClassMethod(null); aoqi@0: WarnSerializableLambdaTest.privateClassMethod(null); aoqi@0: aoqi@0: packageInstanceMethod(null); aoqi@0: protectedInstanceMethod(null); aoqi@0: privateInstanceMethod(null); aoqi@0: aoqi@0: PrivateClass.effectivelyNonPublicStaticField = ""; aoqi@0: PrivateClass.effectivelyNonPublicClassMethod(); aoqi@0: aoqi@0: PrivateClass p = new PrivateClass(); aoqi@0: p.effectivelyNonPublicInstanceField = ""; aoqi@0: p.effectivelyNonPublicInstanceMethod(); aoqi@0: } aoqi@0: }; aoqi@0: } aoqi@0: aoqi@0: void dontWarnLambda() throws Exception { aoqi@0: SAM t1 = (SAM & Serializable)WarnSerializableLambdaTest::publicClassMethod; aoqi@0: aoqi@0: WarnSerializableLambdaTest test = new WarnSerializableLambdaTest(); aoqi@0: SAM t2 = (SAM & Serializable)test::publicInstanceMethod; aoqi@0: aoqi@0: int[] buffer = {0}; aoqi@0: aoqi@0: SAM t3 = (SAM & Serializable) param -> { aoqi@0: Object localVar; aoqi@0: localVar = null; aoqi@0: param = null; aoqi@0: aoqi@0: WarnSerializableLambdaTest.staticPublicField = ""; aoqi@0: publicField = ""; aoqi@0: WarnSerializableLambdaTest.publicClassMethod(null); aoqi@0: publicInstanceMethod(null); aoqi@0: aoqi@0: PublicClass.effectivelyPublicStaticField = ""; aoqi@0: PublicClass.effectivelyPublicClassMethod(); aoqi@0: aoqi@0: PublicClass p = new PublicClass(); aoqi@0: p.effectivelyPublicInstanceField = ""; aoqi@0: p.effectivelyPublicInstanceMethod(); aoqi@0: aoqi@0: int l = buffer.length; aoqi@0: aoqi@0: return null; aoqi@0: }; aoqi@0: } aoqi@0: aoqi@0: private void dontWarnAnoInnerClass() throws Exception { aoqi@0: final int[] buffer = {0}; aoqi@0: new SerializableDesc() { aoqi@0: public void m(Object param) throws Exception { aoqi@0: Object localVar; aoqi@0: localVar = null; aoqi@0: param = null; aoqi@0: aoqi@0: WarnSerializableLambdaTest.staticPublicField = ""; aoqi@0: publicField = ""; aoqi@0: WarnSerializableLambdaTest.publicClassMethod(null); aoqi@0: publicInstanceMethod(null); aoqi@0: aoqi@0: PublicClass.effectivelyPublicStaticField = ""; aoqi@0: PublicClass.effectivelyPublicClassMethod(); aoqi@0: aoqi@0: PublicClass p = new PublicClass(); aoqi@0: p.effectivelyPublicInstanceField = ""; aoqi@0: p.effectivelyPublicInstanceMethod(); aoqi@0: aoqi@0: int l = buffer.length; aoqi@0: } aoqi@0: }; aoqi@0: } aoqi@0: aoqi@0: enum WarnEnum { aoqi@0: A { aoqi@0: public void m() throws Exception { aoqi@0: WarnSerializableLambdaTest.staticPackageField = ""; aoqi@0: WarnSerializableLambdaTest.staticProtectedField = ""; aoqi@0: WarnSerializableLambdaTest.staticPrivateField = ""; aoqi@0: aoqi@0: WarnSerializableLambdaTest test = aoqi@0: new WarnSerializableLambdaTest(); aoqi@0: aoqi@0: test.packageField = ""; aoqi@0: test.protectedField = ""; aoqi@0: test.privateField = ""; aoqi@0: aoqi@0: WarnSerializableLambdaTest.packageClassMethod(null); aoqi@0: WarnSerializableLambdaTest.protectedClassMethod(null); aoqi@0: WarnSerializableLambdaTest.privateClassMethod(null); aoqi@0: aoqi@0: test.packageInstanceMethod(null); aoqi@0: test.protectedInstanceMethod(null); aoqi@0: test.privateInstanceMethod(null); aoqi@0: aoqi@0: PrivateClass.effectivelyNonPublicStaticField = ""; aoqi@0: PrivateClass.effectivelyNonPublicClassMethod(); aoqi@0: aoqi@0: PrivateClass p = new PrivateClass(); aoqi@0: p.effectivelyNonPublicInstanceField = ""; aoqi@0: p.effectivelyNonPublicInstanceMethod(); aoqi@0: } aoqi@0: }; aoqi@0: aoqi@0: public void m() throws Exception {} aoqi@0: } aoqi@0: aoqi@0: static String staticPackageField; aoqi@0: static private String staticPrivateField; aoqi@0: static protected String staticProtectedField; aoqi@0: static public String staticPublicField; aoqi@0: aoqi@0: String packageField; aoqi@0: private String privateField; aoqi@0: protected String protectedField; aoqi@0: public String publicField; aoqi@0: aoqi@0: static Object packageClassMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: static private Object privateClassMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: static protected Object protectedClassMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: static public Object publicClassMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: Object packageInstanceMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: protected Object protectedInstanceMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: private Object privateInstanceMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: public Object publicInstanceMethod(String s) { aoqi@0: return null; aoqi@0: } aoqi@0: aoqi@0: interface SAM { aoqi@0: Object apply(String s) throws Exception; aoqi@0: } aoqi@0: aoqi@0: interface SAM2 { aoqi@0: Object apply(String arg1, String arg2); aoqi@0: } aoqi@0: aoqi@0: class SerializableDesc implements Serializable { aoqi@0: public void m(Object param) throws Exception {} aoqi@0: } aoqi@0: aoqi@0: static private class PrivateClass { aoqi@0: static public String effectivelyNonPublicStaticField; aoqi@0: public String effectivelyNonPublicInstanceField; aoqi@0: aoqi@0: static public void effectivelyNonPublicClassMethod() {} aoqi@0: public void effectivelyNonPublicInstanceMethod() {} aoqi@0: } aoqi@0: aoqi@0: static public class PublicClass { aoqi@0: static public String effectivelyPublicStaticField; aoqi@0: public String effectivelyPublicInstanceField; aoqi@0: aoqi@0: static public void effectivelyPublicClassMethod() {} aoqi@0: public void effectivelyPublicInstanceMethod() {} aoqi@0: } aoqi@0: }