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