1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
/*
* @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
}
}
}
}
|