--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Tue Sep 07 17:32:52 2010 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Tue Sep 07 17:33:43 2010 +0100
@@ -408,7 +408,9 @@
tree = TreeInfo.skipParens(tree);
if (tree.getTag() == JCTree.IDENT || tree.getTag() == JCTree.SELECT) {
Symbol sym = TreeInfo.symbol(tree);
- letInit(tree.pos(), (VarSymbol)sym);
+ if (sym.kind == VAR) {
+ letInit(tree.pos(), (VarSymbol)sym);
+ }
}
}
@@ -481,12 +483,13 @@
/** Split (duplicate) inits/uninits into WhenTrue/WhenFalse sets
*/
- void split() {
+ void split(boolean setToNull) {
initsWhenFalse = inits.dup();
uninitsWhenFalse = uninits.dup();
initsWhenTrue = inits;
uninitsWhenTrue = uninits;
- inits = uninits = null;
+ if (setToNull)
+ inits = uninits = null;
}
/** Merge (intersect) inits/uninits from WhenTrue/WhenFalse sets.
@@ -568,9 +571,11 @@
uninitsWhenTrue = uninits;
} else {
scan(tree);
- if (inits != null) split();
+ if (inits != null)
+ split(tree.type != syms.unknownType);
}
- inits = uninits = null;
+ if (tree.type != syms.unknownType)
+ inits = uninits = null;
}
/* ------------ Visitor methods for various sorts of trees -------------*/
@@ -1007,7 +1012,7 @@
List.of(resource.type);
for (Type sup : closeableSupertypes) {
if (types.asSuper(sup, syms.autoCloseableType.tsym) != null) {
- Symbol closeMethod = rs.resolveInternalMethod(tree,
+ Symbol closeMethod = rs.resolveQualifiedMethod(tree,
attrEnv,
sup,
names.close,
@@ -1050,20 +1055,22 @@
List<Type> rethrownTypes = chk.diff(thrownInTry, caughtInTry);
for (JCExpression ct : subClauses) {
Type exc = ct.type;
- ctypes = ctypes.append(exc);
- if (types.isSameType(exc, syms.objectType))
- continue;
- if (chk.subset(exc, caughtInTry)) {
- log.error(l.head.pos(),
- "except.already.caught", exc);
- } else if (!chk.isUnchecked(l.head.pos(), exc) &&
- exc.tsym != syms.throwableType.tsym &&
- exc.tsym != syms.exceptionType.tsym &&
- !chk.intersects(exc, thrownInTry)) {
- log.error(l.head.pos(),
- "except.never.thrown.in.try", exc);
+ if (exc != syms.unknownType) {
+ ctypes = ctypes.append(exc);
+ if (types.isSameType(exc, syms.objectType))
+ continue;
+ if (chk.subset(exc, caughtInTry)) {
+ log.error(l.head.pos(),
+ "except.already.caught", exc);
+ } else if (!chk.isUnchecked(l.head.pos(), exc) &&
+ exc.tsym != syms.throwableType.tsym &&
+ exc.tsym != syms.exceptionType.tsym &&
+ !chk.intersects(exc, thrownInTry)) {
+ log.error(l.head.pos(),
+ "except.never.thrown.in.try", exc);
+ }
+ caughtInTry = chk.incl(exc, caughtInTry);
}
- caughtInTry = chk.incl(exc, caughtInTry);
}
inits = initsTry.dup();
uninits = uninitsTry.dup();