/* * @test /nodynamiccopyright/ * @bug 7196163 * @summary Twr with different kinds of variables: local, instance, class, array component, parameter * @compile/fail/ref=TwrVarKinds.out -XDrawDiagnostics TwrVarKinds.java */ public class TwrVarKinds implements AutoCloseable { final static TwrVarKinds r1 = new TwrVarKinds(); final TwrVarKinds r2 = new TwrVarKinds(); static TwrVarKinds r3 = new TwrVarKinds(); TwrVarKinds r4 = new TwrVarKinds(); public static void main(String... args) { TwrVarKinds r5 = new TwrVarKinds(); /* static final field - ok */ try (r1) { } /* non-static final field - ok */ try (r1.r2) { } /* static non-final field - wrong */ try (r3) { fail("Static non-final field is not allowed"); } /* non-static non-final field - wrong */ try (r1.r4) { fail("Non-static non-final field is not allowed"); } /* local variable - covered by TwrForVariable1 test */ /* array components - covered by TwrForVariable2 test */ /* method parameter - ok */ method(r5); /* constructor parameter - ok */ TwrVarKinds r6 = new TwrVarKinds(r5); /* lambda parameter - covered by TwrAndLambda */ /* exception parameter - ok */ try { throw new ResourceException(); } catch (ResourceException e) { try (e) { } } } public TwrVarKinds() { } public TwrVarKinds(TwrVarKinds r) { try (r) { } } static void method(TwrVarKinds r) { /* parameter */ try (r) { } } static void fail(String reason) { throw new RuntimeException(reason); } public void close() {} static class ResourceException extends Exception implements AutoCloseable { public void close() {} } }