langtools/test/tools/javac/TryWithResources/TwrForVariable4.java
author jlahoda
Wed, 19 Nov 2014 13:46:04 +0100
changeset 27844 8b5d79870a2f
permissions -rw-r--r--
7196163: Project Coin: Allow effectively final variables to be used as resources in try-with-resources Summary: Allowing final variables as operands to try-with-resources; also reviewed by Sergei Pikalev. Reviewed-by: darcy, mcimadamore, vromero

/* @test /nodynamiccopyright/
 * @bug 7196163
 * @summary Verify that variable used as an operand to try-with-resources is rejected if it is not
 *          definitelly assigned before use and or not final or effectivelly final.
 * @compile/fail/ref=TwrForVariable4.out -XDrawDiagnostics -Xlint:-options TwrForVariable4.java
 */
public class TwrForVariable4 implements AutoCloseable {
    public static void main(String... args) {
        TwrForVariable4 uninitialized;

        try (uninitialized) {
            fail("must be initialized before use");
        }
        uninitialized = new TwrForVariable4();

        TwrForVariable4 notEffectivellyFinal1 = new TwrForVariable4();

        notEffectivellyFinal1 = new TwrForVariable4();

        try (notEffectivellyFinal1) {
            fail("not effectivelly final");
        }

        TwrForVariable4 notEffectivellyFinal2 = new TwrForVariable4();

        try (notEffectivellyFinal2) {
            notEffectivellyFinal2 = new TwrForVariable4();
            fail("not effectivelly final");
        }

        try (notFinal) {
            fail("not final");
        }
    }

    static TwrForVariable4 notFinal = new TwrForVariable4();

    static void fail(String reason) {
        throw new RuntimeException(reason);
    }

    public void close() {
    }

}