import java.io.IOException; class TryWithResources { final AutoCloseable f1 = null; AutoCloseable f2 = null; void testFields() throws Exception { try (f1; <error descr="Variable used as a try-with-resources resource should be final or effectively final">f2</error>) { } catch (Exception ignore) { } } void testLocalVars() throws Exception { final AutoCloseable r1 = null; AutoCloseable r2 = null; AutoCloseable r3 = null; AutoCloseable r4; r4 = null; try (r1; r2; r4; <error descr="Variable used as a try-with-resources resource should be final or effectively final">r3</error>) { } r3 = null; } void testType() throws Exception { String s = ""; try (<error descr="Incompatible types. Found: 'java.lang.String', required: 'java.lang.AutoCloseable'">s</error>; <error descr="Incompatible types. Found: 'TryWithResources', required: 'java.lang.AutoCloseable'">this</error>) { } } void testUnhandled() { class Resource implements AutoCloseable { @Override public void close() throws IOException { } } Resource r = new Resource(); try (<error descr="Unhandled exception from auto-closeable resource: java.io.IOException">r</error>) { } } void testResolve() throws Exception { try (<error descr="Cannot resolve symbol 'r'">r</error>; AutoCloseable r = null) { } try (AutoCloseable r = null; r) { } } void testUnassigned() throws Exception { AutoCloseable r; try (<error descr="Variable 'r' might not have been initialized">r</error>) { System.out.println(r); } } static class Resource implements AutoCloseable { static Resource create() { return new Resource(); } @Override public void close() { } } void testMoreUsefulParseForIncorrectExpression() { try (<error descr="Declaration, final or effectively final variable expected">new Resource()</error>) {} try (<error descr="Declaration, final or effectively final variable expected">Resource.create()</error>) {} } }