blob: a2ebc6f28d52bde544b750ce0cbdf26620945d6a [file] [log] [blame]
/*
* @test /nodynamiccopyright/
* @bug 8003280
* @summary Add lambda tests
* check that lambda cannot shadow variables from enclosing scope
* @compile/fail/ref=LambdaScope04.out -XDrawDiagnostics LambdaScope04.java
*/
class LambdaScope04 {
interface SAM {
void m(Object o);
}
static SAM field1 = field1->{}; //ok
static SAM field2 = param->{ Object field2 = null; }; //ok
SAM field3 = field3->{}; //ok
SAM field4 = param->{ Object field4 = null; }; //ok
{
Object local = null;
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
}
static {
Object local = null;
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
void testLocalInstance() {
Object local = null;
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
static void testLocalStatic() {
Object local = null;
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
void testParamInstance(Object local) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
static void testParamStatic(Object local) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
void testForInstance() {
for (int local = 0; local != 0 ; local++) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
static void testForStatic(Iterable<Object> elems) {
for (int local = 0; local != 0 ; local++) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
void testForEachInstance(Iterable<Object> elems) {
for (Object local : elems) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
static void testForEachStatic(Iterable<Object> elems) {
for (Object local : elems) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
void testCatchInstance() {
try { } catch (Throwable local) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
static void testCatchStatic(Iterable<Object> elems) {
try { } catch (Throwable local) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
void testTWRInstance(AutoCloseable res) {
try (AutoCloseable local = res) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
} finally { }
}
static void testTWRStatic(AutoCloseable res) {
try (AutoCloseable local = res) {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
} finally { }
}
void testBlockLocalInstance() {
Object local = null;
{
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
static void testBlockLocalStatic() {
Object local = null;
{
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
void testSwitchLocalInstance(int i) {
switch (i) {
case 0: Object local = null;
default: {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
}
static void testSwitchLocalStatic(int i) {
switch (i) {
case 0: Object local = null;
default: {
SAM s1 = local->{}; //error
SAM s2 = param->{ Object local = null; }; //error
SAM s3 = field1->{ Object field_2 = null; }; //ok
}
}
}
}