src/share/classes/com/sun/tools/javac/comp/Flow.java

Print this page

        

*** 319,329 **** if (classDef != null && classDef.pos == exit.tree.pos) { log.error(exit.tree.pos(), "unreported.exception.default.constructor", exit.thrown); ! } else if (exit.tree.getTag() == JCTree.VARDEF && ((JCVariableDecl)exit.tree).sym.isResourceVariable()) { log.error(exit.tree.pos(), "unreported.exception.implicit.close", exit.thrown, ((JCVariableDecl)exit.tree).sym.name); --- 319,329 ---- if (classDef != null && classDef.pos == exit.tree.pos) { log.error(exit.tree.pos(), "unreported.exception.default.constructor", exit.thrown); ! } else if (exit.tree.getTag() == JCTree.Tag.VARDEF && ((JCVariableDecl)exit.tree).sym.isResourceVariable()) { log.error(exit.tree.pos(), "unreported.exception.implicit.close", exit.thrown, ((JCVariableDecl)exit.tree).sym.name);
*** 414,424 **** * C.this.name, and tree represents a trackable variable, * record an initialization of the variable. */ void letInit(JCTree tree) { tree = TreeInfo.skipParens(tree); ! if (tree.getTag() == JCTree.IDENT || tree.getTag() == JCTree.SELECT) { Symbol sym = TreeInfo.symbol(tree); if (sym.kind == VAR) { letInit(tree.pos(), (VarSymbol)sym); } } --- 414,424 ---- * C.this.name, and tree represents a trackable variable, * record an initialization of the variable. */ void letInit(JCTree tree) { tree = TreeInfo.skipParens(tree); ! if (tree.getTag() == JCTree.Tag.IDENT || tree.getTag() == JCTree.Tag.SELECT) { Symbol sym = TreeInfo.symbol(tree); if (sym.kind == VAR) { letInit(tree.pos(), (VarSymbol)sym); } }
*** 450,460 **** boolean result = false; List<PendingExit> exits = pendingExits.toList(); pendingExits = oldPendingExits; for (; exits.nonEmpty(); exits = exits.tail) { PendingExit exit = exits.head; ! if (exit.tree.getTag() == JCTree.BREAK && ((JCBreak) exit.tree).target == tree) { inits.andSet(exit.inits); uninits.andSet(exit.uninits); result = true; } else { --- 450,460 ---- boolean result = false; List<PendingExit> exits = pendingExits.toList(); pendingExits = oldPendingExits; for (; exits.nonEmpty(); exits = exits.tail) { PendingExit exit = exits.head; ! if (exit.tree.getTag() == JCTree.Tag.BREAK && ((JCBreak) exit.tree).target == tree) { inits.andSet(exit.inits); uninits.andSet(exit.uninits); result = true; } else {
*** 469,479 **** boolean result = false; List<PendingExit> exits = pendingExits.toList(); pendingExits = new ListBuffer<PendingExit>(); for (; exits.nonEmpty(); exits = exits.tail) { PendingExit exit = exits.head; ! if (exit.tree.getTag() == JCTree.CONTINUE && ((JCContinue) exit.tree).target == tree) { inits.andSet(exit.inits); uninits.andSet(exit.uninits); result = true; } else { --- 469,479 ---- boolean result = false; List<PendingExit> exits = pendingExits.toList(); pendingExits = new ListBuffer<PendingExit>(); for (; exits.nonEmpty(); exits = exits.tail) { PendingExit exit = exits.head; ! if (exit.tree.getTag() == JCTree.Tag.CONTINUE && ((JCContinue) exit.tree).target == tree) { inits.andSet(exit.inits); uninits.andSet(exit.uninits); result = true; } else {
*** 515,536 **** /** Analyze a definition. */ void scanDef(JCTree tree) { scanStat(tree); ! if (tree != null && tree.getTag() == JCTree.BLOCK && !alive) { log.error(tree.pos(), "initializer.must.be.able.to.complete.normally"); } } /** Analyze a statement. Check that statement is reachable. */ void scanStat(JCTree tree) { if (!alive && tree != null) { log.error(tree.pos(), "unreachable.stmt"); ! if (tree.getTag() != JCTree.SKIP) alive = true; } scan(tree); } /** Analyze list of statements. --- 515,536 ---- /** Analyze a definition. */ void scanDef(JCTree tree) { scanStat(tree); ! if (tree != null && tree.getTag() == JCTree.Tag.BLOCK && !alive) { log.error(tree.pos(), "initializer.must.be.able.to.complete.normally"); } } /** Analyze a statement. Check that statement is reachable. */ void scanStat(JCTree tree) { if (!alive && tree != null) { log.error(tree.pos(), "unreachable.stmt"); ! if (tree.getTag() != JCTree.Tag.SKIP) alive = true; } scan(tree); } /** Analyze list of statements.
*** 612,622 **** lint = lint.augment(tree.sym.attributes_field); try { // define all the static fields for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() == JCTree.VARDEF) { JCVariableDecl def = (JCVariableDecl)l.head; if ((def.mods.flags & STATIC) != 0) { VarSymbol sym = def.sym; if (trackable(sym)) newVar(sym); --- 612,622 ---- lint = lint.augment(tree.sym.attributes_field); try { // define all the static fields for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() == JCTree.Tag.VARDEF) { JCVariableDecl def = (JCVariableDecl)l.head; if ((def.mods.flags & STATIC) != 0) { VarSymbol sym = def.sym; if (trackable(sym)) newVar(sym);
*** 624,634 **** } } // process all the static initializers for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() != JCTree.METHODDEF && (TreeInfo.flags(l.head) & STATIC) != 0) { scanDef(l.head); errorUncaught(); } } --- 624,634 ---- } } // process all the static initializers for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() != JCTree.Tag.METHODDEF && (TreeInfo.flags(l.head) & STATIC) != 0) { scanDef(l.head); errorUncaught(); } }
*** 651,661 **** } } // define all the instance fields for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() == JCTree.VARDEF) { JCVariableDecl def = (JCVariableDecl)l.head; if ((def.mods.flags & STATIC) == 0) { VarSymbol sym = def.sym; if (trackable(sym)) newVar(sym); --- 651,661 ---- } } // define all the instance fields for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() == JCTree.Tag.VARDEF) { JCVariableDecl def = (JCVariableDecl)l.head; if ((def.mods.flags & STATIC) == 0) { VarSymbol sym = def.sym; if (trackable(sym)) newVar(sym);
*** 663,673 **** } } // process all the instance initializers for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() != JCTree.METHODDEF && (TreeInfo.flags(l.head) & STATIC) == 0) { scanDef(l.head); errorUncaught(); } } --- 663,673 ---- } } // process all the instance initializers for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() != JCTree.Tag.METHODDEF && (TreeInfo.flags(l.head) & STATIC) == 0) { scanDef(l.head); errorUncaught(); } }
*** 689,699 **** thrownPrev = chk.union(thrown, thrownPrev); } // process all the methods for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() == JCTree.METHODDEF) { scan(l.head); errorUncaught(); } } --- 689,699 ---- thrownPrev = chk.union(thrown, thrownPrev); } // process all the methods for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) { ! if (l.head.getTag() == JCTree.Tag.METHODDEF) { scan(l.head); errorUncaught(); } }
*** 758,768 **** pendingExits = new ListBuffer<PendingExit>(); while (exits.nonEmpty()) { PendingExit exit = exits.head; exits = exits.tail; if (exit.thrown == null) { ! Assert.check(exit.tree.getTag() == JCTree.RETURN); if (isInitialConstructor) { inits = exit.inits; for (int i = firstadr; i < nextadr; i++) checkInit(exit.tree.pos(), vars[i]); } --- 758,768 ---- pendingExits = new ListBuffer<PendingExit>(); while (exits.nonEmpty()) { PendingExit exit = exits.head; exits = exits.tail; if (exit.thrown == null) { ! Assert.check(exit.tree.getTag() == JCTree.Tag.RETURN); if (isInitialConstructor) { inits = exit.inits; for (int i = firstadr; i < nextadr; i++) checkInit(exit.tree.pos(), vars[i]); }
*** 987,997 **** /** Add any variables defined in stats to inits and uninits. */ private static void addVars(List<JCStatement> stats, Bits inits, Bits uninits) { for (;stats.nonEmpty(); stats = stats.tail) { JCTree stat = stats.head; ! if (stat.getTag() == JCTree.VARDEF) { int adr = ((JCVariableDecl) stat).sym.adr; inits.excl(adr); uninits.incl(adr); } } --- 987,997 ---- /** Add any variables defined in stats to inits and uninits. */ private static void addVars(List<JCStatement> stats, Bits inits, Bits uninits) { for (;stats.nonEmpty(); stats = stats.tail) { JCTree stat = stats.head; ! if (stat.getTag() == JCTree.Tag.VARDEF) { int adr = ((JCVariableDecl) stat).sym.adr; inits.excl(adr); uninits.incl(adr); } }
*** 1344,1385 **** letInit(tree.lhs); } public void visitUnary(JCUnary tree) { switch (tree.getTag()) { ! case JCTree.NOT: scanCond(tree.arg); Bits t = initsWhenFalse; initsWhenFalse = initsWhenTrue; initsWhenTrue = t; t = uninitsWhenFalse; uninitsWhenFalse = uninitsWhenTrue; uninitsWhenTrue = t; break; ! case JCTree.PREINC: case JCTree.POSTINC: ! case JCTree.PREDEC: case JCTree.POSTDEC: scanExpr(tree.arg); letInit(tree.arg); break; default: scanExpr(tree.arg); } } public void visitBinary(JCBinary tree) { switch (tree.getTag()) { ! case JCTree.AND: scanCond(tree.lhs); Bits initsWhenFalseLeft = initsWhenFalse; Bits uninitsWhenFalseLeft = uninitsWhenFalse; inits = initsWhenTrue; uninits = uninitsWhenTrue; scanCond(tree.rhs); initsWhenFalse.andSet(initsWhenFalseLeft); uninitsWhenFalse.andSet(uninitsWhenFalseLeft); break; ! case JCTree.OR: scanCond(tree.lhs); Bits initsWhenTrueLeft = initsWhenTrue; Bits uninitsWhenTrueLeft = uninitsWhenTrue; inits = initsWhenFalse; uninits = uninitsWhenFalse; --- 1344,1385 ---- letInit(tree.lhs); } public void visitUnary(JCUnary tree) { switch (tree.getTag()) { ! case NOT: scanCond(tree.arg); Bits t = initsWhenFalse; initsWhenFalse = initsWhenTrue; initsWhenTrue = t; t = uninitsWhenFalse; uninitsWhenFalse = uninitsWhenTrue; uninitsWhenTrue = t; break; ! case PREINC: case POSTINC: ! case PREDEC: case POSTDEC: scanExpr(tree.arg); letInit(tree.arg); break; default: scanExpr(tree.arg); } } public void visitBinary(JCBinary tree) { switch (tree.getTag()) { ! case AND: scanCond(tree.lhs); Bits initsWhenFalseLeft = initsWhenFalse; Bits uninitsWhenFalseLeft = uninitsWhenFalse; inits = initsWhenTrue; uninits = uninitsWhenTrue; scanCond(tree.rhs); initsWhenFalse.andSet(initsWhenFalseLeft); uninitsWhenFalse.andSet(uninitsWhenFalseLeft); break; ! case OR: scanCond(tree.lhs); Bits initsWhenTrueLeft = initsWhenTrue; Bits uninitsWhenTrueLeft = uninitsWhenTrue; inits = initsWhenFalse; uninits = uninitsWhenFalse;
*** 1416,1426 **** } //where private boolean is292targetTypeCast(JCTypeCast tree) { boolean is292targetTypeCast = false; JCExpression expr = TreeInfo.skipParens(tree.expr); ! if (expr.getTag() == JCTree.APPLY) { JCMethodInvocation apply = (JCMethodInvocation)expr; Symbol sym = TreeInfo.symbol(apply.meth); is292targetTypeCast = sym != null && sym.kind == MTH && (sym.flags() & POLYMORPHIC_SIGNATURE) != 0; --- 1416,1426 ---- } //where private boolean is292targetTypeCast(JCTypeCast tree) { boolean is292targetTypeCast = false; JCExpression expr = TreeInfo.skipParens(tree.expr); ! if (expr.getTag() == JCTree.Tag.APPLY) { JCMethodInvocation apply = (JCMethodInvocation)expr; Symbol sym = TreeInfo.symbol(apply.meth); is292targetTypeCast = sym != null && sym.kind == MTH && (sym.flags() & POLYMORPHIC_SIGNATURE) != 0;