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
|
// Test for Issue 293:
// https://github.com/typetools/checker-framework/issues/293
class Issue293 {
void test1() {
String s;
try {
s = read();
} catch (Exception e) {
// Because of definite assignment, s cannot be mentioned here.
write("Catch.");
return;
} finally {
// Because of definite assignment, s cannot be mentioned here.
write("Finally.");
}
// s is definitely initialized here.
write(s);
}
void test2() {
String s2 = "";
try {
} finally {
write(s2);
}
}
void test3() throws Exception {
String s = "";
try {
throw new Exception();
} finally {
write(s);
}
}
void test4() throws Exception {
String s = "";
try {
if (true) {
throw new Exception();
} else {
s = null;
}
} finally {
// :: error: argument.type.incompatible
write(s);
}
}
String read() throws Exception {
throw new Exception();
}
void write(String p) {
System.out.println(p);
}
}
|