class C {
static class E extends Exception { }
static class E1 extends E { }
static class E2 extends E { }
static class E3 extends E { }
static class MyResource implements AutoCloseable {
public MyResource() throws E1 { }
public void doSomething() throws E2 { }
@Override public void close() throws E3 { }
}
void m1() {
try (MyResource r = new MyResource()) { r.doSomething(); }
catch (E1 | E2 | E3 ignore) { }
try (MyResource r = new MyResource()) { }
catch (E1 | E3 ignore) { }
try (MyResource r = new MyResource()) { }
catch (E1 e) { }
try (MyResource r = new MyResource()) { }
catch (E3 e) { }
try (MyResource r = new MyResource()) { }
}
void m2() throws Exception {
try (Object r = new MyResource()) { }
try (AutoCloseable r = "resource") { }
}
void m3(int p) throws Exception {
try (MyResource r = new MyResource()) {
r.doSomething();
r = null;
int r = 0;
}
catch (E e) {
r = null;
}
finally {
r = null;
}
r = null;
try (MyResource r = new MyResource(); MyResource r = new MyResource()) { }
try (MyResource r1 = new MyResource(); MyResource r2 = r1) { }
try (MyResource r1 = r2; MyResource r2 = r1) { }
MyResource r = null;
try (MyResource r = new MyResource()) { }
try (MyResource rr = r) { }
try (MyResource p = new MyResource()) { }
new Runnable() {
public void run() {
try (MyResource p = new MyResource()) { }
catch (E e) { }
}
}.run();
}
void m4() throws Exception {
try (MyResource r = r) { }
MyResource r;
try (MyResource r1 = r) { }
}
}