# HG changeset patch # User mcimadamore # Date 1289565258 0 # Node ID 163fe60f63de9d4c217c29c20e77cacbf824c17a # Parent 8dd5f907461e30081059849d3e3339799de749cb 6970016: Clean up ARM/try-with-resources implementation Summary: changed Xlint option name from -Xlint:arm to -Xlint:try Reviewed-by: jjg diff -r 8dd5f907461e -r 163fe60f63de langtools/src/share/classes/com/sun/tools/javac/code/Lint.java --- a/langtools/src/share/classes/com/sun/tools/javac/code/Lint.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/code/Lint.java Fri Nov 12 12:34:18 2010 +0000 @@ -212,9 +212,9 @@ VARARGS("varargs"), /** - * Warn about arm resources + * Warn about issues relating to use of try blocks (i.e. try-with-resources) */ - ARM("arm"); + TRY("try"); LintCategory(String option) { this(option, false); diff -r 8dd5f907461e -r 163fe60f63de langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Fri Nov 12 12:34:18 2010 +0000 @@ -252,7 +252,7 @@ (base.getTag() == JCTree.IDENT && TreeInfo.name(base) == names._this)) && isAssignableAsBlankFinal(v, env)))) { if (v.isResourceVariable()) { //TWR resource - log.error(pos, "twr.resource.may.not.be.assigned", v); + log.error(pos, "try.resource.may.not.be.assigned", v); } else { log.error(pos, "cant.assign.val.to.final.var", v); } @@ -1045,11 +1045,11 @@ for (JCTree resource : tree.resources) { if (resource.getTag() == JCTree.VARDEF) { attribStat(resource, tryEnv); - chk.checkType(resource, resource.type, syms.autoCloseableType, "twr.not.applicable.to.type"); + chk.checkType(resource, resource.type, syms.autoCloseableType, "try.not.applicable.to.type"); VarSymbol var = (VarSymbol)TreeInfo.symbolFor(resource); var.setData(ElementKind.RESOURCE_VARIABLE); } else { - attribExpr(resource, tryEnv, syms.autoCloseableType, "twr.not.applicable.to.type"); + attribExpr(resource, tryEnv, syms.autoCloseableType, "try.not.applicable.to.type"); } } // Attribute body @@ -2258,8 +2258,8 @@ ((VarSymbol)sitesym).isResourceVariable() && sym.kind == MTH && sym.overrides(syms.autoCloseableClose, sitesym.type.tsym, types, true) && - env.info.lint.isEnabled(Lint.LintCategory.ARM)) { - log.warning(tree, "twr.explicit.close.call"); + env.info.lint.isEnabled(Lint.LintCategory.TRY)) { + log.warning(Lint.LintCategory.TRY, tree, "try.explicit.close.call"); } // Disallow selecting a type from an expression diff -r 8dd5f907461e -r 163fe60f63de langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Fri Nov 12 12:34:18 2010 +0000 @@ -1037,10 +1037,10 @@ int nextadrCatch = nextadr; if (!unrefdResources.isEmpty() && - lint.isEnabled(Lint.LintCategory.ARM)) { + lint.isEnabled(Lint.LintCategory.TRY)) { for (Map.Entry e : unrefdResources.entrySet()) { - log.warning(e.getValue().pos(), - "automatic.resource.not.referenced", e.getKey()); + log.warning(Lint.LintCategory.TRY, e.getValue().pos(), + "try.resource.not.referenced", e.getKey()); } } diff -r 8dd5f907461e -r 163fe60f63de langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java --- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Fri Nov 12 12:34:18 2010 +0000 @@ -1712,7 +1712,7 @@ S.nextToken(); List resources = List.nil(); if (S.token() == LPAREN) { - checkAutomaticResourceManagement(); + checkTryWithResources(); S.nextToken(); resources = resources(); accept(RPAREN); @@ -2970,9 +2970,9 @@ allowMulticatch = true; } } - void checkAutomaticResourceManagement() { + void checkTryWithResources() { if (!allowTWR) { - error(S.pos(), "automatic.resource.management.not.supported.in.source", source.name); + error(S.pos(), "try.with.resources.not.supported.in.source", source.name); allowTWR = true; } } diff -r 8dd5f907461e -r 163fe60f63de langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties Fri Nov 12 12:34:18 2010 +0000 @@ -63,8 +63,6 @@ anonymous class implements interface; cannot have type arguments compiler.err.anon.class.impl.intf.no.qual.for.new=\ anonymous class implements interface; cannot have qualifier for new -compiler.misc.twr.not.applicable.to.type=\ - automatic resource management not applicable to variable type compiler.err.array.and.varargs=\ cannot declare both {0} and {1} in {2} compiler.err.array.dimension.missing=\ @@ -183,8 +181,8 @@ compiler.err.final.parameter.may.not.be.assigned=\ final parameter {0} may not be assigned -compiler.err.twr.resource.may.not.be.assigned=\ - automatic resource {0} may not be assigned +compiler.err.try.resource.may.not.be.assigned=\ + auto-closeable resource {0} may not be assigned compiler.err.multicatch.parameter.may.not.be.assigned=\ multi-catch parameter {0} may not be assigned compiler.err.finally.without.try=\ @@ -823,10 +821,10 @@ compiler.warn.proc.unmatched.processor.options=\ The following options were not recognized by any processor: ''{0}'' -compiler.warn.twr.explicit.close.call=\ - [arm] explicit call to close() on an automatic resource -compiler.warn.automatic.resource.not.referenced=\ - [arm] automatic resource {0} is never referenced in body of corresponding try statement +compiler.warn.try.explicit.close.call=\ + explicit call to close() on an auto-closeable resource +compiler.warn.try.resource.not.referenced=\ + auto-closeable resource {0} is never referenced in body of corresponding try statement compiler.warn.unchecked.assign=\ unchecked assignment: {0} to {1} compiler.warn.unchecked.assign.to.var=\ @@ -1050,6 +1048,9 @@ # compiler.err.no.elem.type=\ # \[\*\] cannot have a type +compiler.misc.try.not.applicable.to.type=\ + try-with-resources not applicable to variable type + ##### compiler.err.type.found.req=\ @@ -1272,9 +1273,9 @@ exotic identifiers #"___" are not supported in -source {0}\n\ (use -source 7 or higher to enable exotic identifiers) -compiler.err.automatic.resource.management.not.supported.in.source=\ - automatic resource management is not supported in -source {0}\n\ -(use -source 7 or higher to enable automatic resource management) +compiler.err.try.with.resources.not.supported.in.source=\ + try-with-resources is not supported in -source {0}\n\ +(use -source 7 or higher to enable try-with-resources) compiler.warn.enum.as.identifier=\ as of release 5, ''enum'' is a keyword, and may not be used as an identifier\n\ diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/TryWithResources/ArmLint.java --- a/langtools/test/tools/javac/TryWithResources/ArmLint.java Fri Nov 12 12:33:52 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 6911256 6964740 6965277 6967065 - * @author Joseph D. Darcy - * @summary Check that -Xlint:arm warnings are generated as expected - * @compile/ref=ArmLint.out -Xlint:arm,deprecation -XDrawDiagnostics ArmLint.java - */ - -class ArmLint implements AutoCloseable { - private static void test1() { - try(ArmLint r1 = new ArmLint(); - ArmLint r2 = new ArmLint(); - ArmLint r3 = new ArmLint()) { - r1.close(); // The resource's close - r2.close(42); // *Not* the resource's close - // r3 not referenced - } - - } - - @SuppressWarnings("arm") - private static void test2() { - try(@SuppressWarnings("deprecation") AutoCloseable r4 = - new DeprecatedAutoCloseable()) { - // r4 not referenced - } catch(Exception e) { - ; - } - } - - /** - * The AutoCloseable method of a resource. - */ - @Override - public void close () { - return; - } - - /** - * Not the AutoCloseable method of a resource. - */ - public void close (int arg) { - return; - } -} - -@Deprecated -class DeprecatedAutoCloseable implements AutoCloseable { - public DeprecatedAutoCloseable(){super();} - - @Override - public void close () { - return; - } -} diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/TryWithResources/ArmLint.out --- a/langtools/test/tools/javac/TryWithResources/ArmLint.out Fri Nov 12 12:33:52 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -ArmLint.java:14:15: compiler.warn.twr.explicit.close.call -ArmLint.java:13:13: compiler.warn.automatic.resource.not.referenced: r3 -2 warnings diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/TryWithResources/ImplicitFinal.out --- a/langtools/test/tools/javac/TryWithResources/ImplicitFinal.out Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/TryWithResources/ImplicitFinal.out Fri Nov 12 12:34:18 2010 +0000 @@ -1,2 +1,2 @@ -ImplicitFinal.java:14:13: compiler.err.twr.resource.may.not.be.assigned: r +ImplicitFinal.java:14:13: compiler.err.try.resource.may.not.be.assigned: r 1 error diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/TryWithResources/TwrLint.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/TryWithResources/TwrLint.java Fri Nov 12 12:34:18 2010 +0000 @@ -0,0 +1,55 @@ +/* + * @test /nodynamiccopyright/ + * @bug 6911256 6964740 6965277 6967065 + * @author Joseph D. Darcy + * @summary Check that -Xlint:twr warnings are generated as expected + * @compile/ref=TwrLint.out -Xlint:try,deprecation -XDrawDiagnostics TwrLint.java + */ + +class TwrLint implements AutoCloseable { + private static void test1() { + try(TwrLint r1 = new TwrLint(); + TwrLint r2 = new TwrLint(); + TwrLint r3 = new TwrLint()) { + r1.close(); // The resource's close + r2.close(42); // *Not* the resource's close + // r3 not referenced + } + + } + + @SuppressWarnings("try") + private static void test2() { + try(@SuppressWarnings("deprecation") AutoCloseable r4 = + new DeprecatedAutoCloseable()) { + // r4 not referenced - but no warning is generated because of @SuppressWarnings + } catch(Exception e) { + ; + } + } + + /** + * The AutoCloseable method of a resource. + */ + @Override + public void close () { + return; + } + + /** + * Not the AutoCloseable method of a resource. + */ + public void close (int arg) { + return; + } +} + +@Deprecated +class DeprecatedAutoCloseable implements AutoCloseable { + public DeprecatedAutoCloseable(){super();} + + @Override + public void close () { + return; + } +} diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/TryWithResources/TwrLint.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/TryWithResources/TwrLint.out Fri Nov 12 12:34:18 2010 +0000 @@ -0,0 +1,3 @@ +TwrLint.java:14:15: compiler.warn.try.explicit.close.call +TwrLint.java:13:13: compiler.warn.try.resource.not.referenced: r3 +2 warnings diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/TryWithResources/TwrOnNonResource.out --- a/langtools/test/tools/javac/TryWithResources/TwrOnNonResource.out Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/TryWithResources/TwrOnNonResource.out Fri Nov 12 12:34:18 2010 +0000 @@ -1,7 +1,7 @@ -TwrOnNonResource.java:12:13: compiler.err.prob.found.req: (compiler.misc.twr.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable -TwrOnNonResource.java:15:13: compiler.err.prob.found.req: (compiler.misc.twr.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable -TwrOnNonResource.java:18:13: compiler.err.prob.found.req: (compiler.misc.twr.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable -TwrOnNonResource.java:24:13: compiler.err.prob.found.req: (compiler.misc.twr.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable -TwrOnNonResource.java:27:13: compiler.err.prob.found.req: (compiler.misc.twr.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable -TwrOnNonResource.java:30:13: compiler.err.prob.found.req: (compiler.misc.twr.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable +TwrOnNonResource.java:12:13: compiler.err.prob.found.req: (compiler.misc.try.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable +TwrOnNonResource.java:15:13: compiler.err.prob.found.req: (compiler.misc.try.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable +TwrOnNonResource.java:18:13: compiler.err.prob.found.req: (compiler.misc.try.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable +TwrOnNonResource.java:24:13: compiler.err.prob.found.req: (compiler.misc.try.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable +TwrOnNonResource.java:27:13: compiler.err.prob.found.req: (compiler.misc.try.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable +TwrOnNonResource.java:30:13: compiler.err.prob.found.req: (compiler.misc.try.not.applicable.to.type), TwrOnNonResource, java.lang.AutoCloseable 6 errors diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/diags/examples/ResourceClosed.java --- a/langtools/test/tools/javac/diags/examples/ResourceClosed.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/diags/examples/ResourceClosed.java Fri Nov 12 12:34:18 2010 +0000 @@ -21,8 +21,8 @@ * questions. */ -// key: compiler.warn.twr.explicit.close.call -// options: -Xlint:arm +// key: compiler.warn.try.explicit.close.call +// options: -Xlint:try import java.io.*; diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/diags/examples/ResourceMayNotBeAssigned.java --- a/langtools/test/tools/javac/diags/examples/ResourceMayNotBeAssigned.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/diags/examples/ResourceMayNotBeAssigned.java Fri Nov 12 12:34:18 2010 +0000 @@ -21,7 +21,7 @@ * questions. */ -// key: compiler.err.twr.resource.may.not.be.assigned +// key: compiler.err.try.resource.may.not.be.assigned import java.io.*; diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/diags/examples/ResourceNotApplicableToType.java --- a/langtools/test/tools/javac/diags/examples/ResourceNotApplicableToType.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/diags/examples/ResourceNotApplicableToType.java Fri Nov 12 12:34:18 2010 +0000 @@ -21,7 +21,7 @@ * questions. */ -// key: compiler.misc.twr.not.applicable.to.type +// key: compiler.misc.try.not.applicable.to.type // key: compiler.err.prob.found.req class ResourceNotApplicableToType { diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/diags/examples/ResourceNotReferenced.java --- a/langtools/test/tools/javac/diags/examples/ResourceNotReferenced.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/diags/examples/ResourceNotReferenced.java Fri Nov 12 12:34:18 2010 +0000 @@ -21,8 +21,8 @@ * questions. */ -// key: compiler.warn.automatic.resource.not.referenced -// options: -Xlint:arm +// key: compiler.warn.try.resource.not.referenced +// options: -Xlint:try import java.io.*; diff -r 8dd5f907461e -r 163fe60f63de langtools/test/tools/javac/diags/examples/TryResourceNotSupported.java --- a/langtools/test/tools/javac/diags/examples/TryResourceNotSupported.java Fri Nov 12 12:33:52 2010 +0000 +++ b/langtools/test/tools/javac/diags/examples/TryResourceNotSupported.java Fri Nov 12 12:34:18 2010 +0000 @@ -21,7 +21,7 @@ * questions. */ -// key: compiler.err.automatic.resource.management.not.supported.in.source +// key: compiler.err.try.with.resources.not.supported.in.source // options: -source 1.6 import java.io.*;