1.1 --- a/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Mon Nov 14 08:09:47 2011 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Mon Nov 14 15:11:10 2011 -0800 1.3 @@ -28,10 +28,10 @@ 1.4 import com.sun.source.tree.Tree; 1.5 import com.sun.tools.javac.comp.AttrContext; 1.6 import com.sun.tools.javac.comp.Env; 1.7 -import java.util.Map; 1.8 import com.sun.tools.javac.util.*; 1.9 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; 1.10 import com.sun.tools.javac.code.*; 1.11 +import com.sun.tools.javac.parser.EndPosTable; 1.12 import com.sun.tools.javac.tree.JCTree.*; 1.13 1.14 import static com.sun.tools.javac.code.Flags.*; 1.15 @@ -346,17 +346,17 @@ 1.16 1.17 /** The end position of given tree, given a table of end positions generated by the parser 1.18 */ 1.19 - public static int getEndPos(JCTree tree, Map<JCTree, Integer> endPositions) { 1.20 + public static int getEndPos(JCTree tree, EndPosTable endPosTable) { 1.21 if (tree == null) 1.22 return Position.NOPOS; 1.23 1.24 - if (endPositions == null) { 1.25 + if (endPosTable == null) { 1.26 // fall back on limited info in the tree 1.27 return endPos(tree); 1.28 } 1.29 1.30 - Integer mapPos = endPositions.get(tree); 1.31 - if (mapPos != null) 1.32 + int mapPos = endPosTable.getEndPos(tree); 1.33 + if (mapPos != Position.NOPOS) 1.34 return mapPos; 1.35 1.36 switch(tree.getTag()) { 1.37 @@ -364,7 +364,7 @@ 1.38 case SL_ASG: case SR_ASG: case USR_ASG: 1.39 case PLUS_ASG: case MINUS_ASG: case MUL_ASG: 1.40 case DIV_ASG: case MOD_ASG: 1.41 - return getEndPos(((JCAssignOp) tree).rhs, endPositions); 1.42 + return getEndPos(((JCAssignOp) tree).rhs, endPosTable); 1.43 case OR: case AND: case BITOR: 1.44 case BITXOR: case BITAND: case EQ: 1.45 case NE: case LT: case GT: 1.46 @@ -372,62 +372,62 @@ 1.47 case SR: case USR: case PLUS: 1.48 case MINUS: case MUL: case DIV: 1.49 case MOD: 1.50 - return getEndPos(((JCBinary) tree).rhs, endPositions); 1.51 + return getEndPos(((JCBinary) tree).rhs, endPosTable); 1.52 case CASE: 1.53 - return getEndPos(((JCCase) tree).stats.last(), endPositions); 1.54 + return getEndPos(((JCCase) tree).stats.last(), endPosTable); 1.55 case CATCH: 1.56 - return getEndPos(((JCCatch) tree).body, endPositions); 1.57 + return getEndPos(((JCCatch) tree).body, endPosTable); 1.58 case CONDEXPR: 1.59 - return getEndPos(((JCConditional) tree).falsepart, endPositions); 1.60 + return getEndPos(((JCConditional) tree).falsepart, endPosTable); 1.61 case FORLOOP: 1.62 - return getEndPos(((JCForLoop) tree).body, endPositions); 1.63 + return getEndPos(((JCForLoop) tree).body, endPosTable); 1.64 case FOREACHLOOP: 1.65 - return getEndPos(((JCEnhancedForLoop) tree).body, endPositions); 1.66 + return getEndPos(((JCEnhancedForLoop) tree).body, endPosTable); 1.67 case IF: { 1.68 JCIf node = (JCIf)tree; 1.69 if (node.elsepart == null) { 1.70 - return getEndPos(node.thenpart, endPositions); 1.71 + return getEndPos(node.thenpart, endPosTable); 1.72 } else { 1.73 - return getEndPos(node.elsepart, endPositions); 1.74 + return getEndPos(node.elsepart, endPosTable); 1.75 } 1.76 } 1.77 case LABELLED: 1.78 - return getEndPos(((JCLabeledStatement) tree).body, endPositions); 1.79 + return getEndPos(((JCLabeledStatement) tree).body, endPosTable); 1.80 case MODIFIERS: 1.81 - return getEndPos(((JCModifiers) tree).annotations.last(), endPositions); 1.82 + return getEndPos(((JCModifiers) tree).annotations.last(), endPosTable); 1.83 case SYNCHRONIZED: 1.84 - return getEndPos(((JCSynchronized) tree).body, endPositions); 1.85 + return getEndPos(((JCSynchronized) tree).body, endPosTable); 1.86 case TOPLEVEL: 1.87 - return getEndPos(((JCCompilationUnit) tree).defs.last(), endPositions); 1.88 + return getEndPos(((JCCompilationUnit) tree).defs.last(), endPosTable); 1.89 case TRY: { 1.90 JCTry node = (JCTry)tree; 1.91 if (node.finalizer != null) { 1.92 - return getEndPos(node.finalizer, endPositions); 1.93 + return getEndPos(node.finalizer, endPosTable); 1.94 } else if (!node.catchers.isEmpty()) { 1.95 - return getEndPos(node.catchers.last(), endPositions); 1.96 + return getEndPos(node.catchers.last(), endPosTable); 1.97 } else { 1.98 - return getEndPos(node.body, endPositions); 1.99 + return getEndPos(node.body, endPosTable); 1.100 } 1.101 } 1.102 case WILDCARD: 1.103 - return getEndPos(((JCWildcard) tree).inner, endPositions); 1.104 + return getEndPos(((JCWildcard) tree).inner, endPosTable); 1.105 case TYPECAST: 1.106 - return getEndPos(((JCTypeCast) tree).expr, endPositions); 1.107 + return getEndPos(((JCTypeCast) tree).expr, endPosTable); 1.108 case TYPETEST: 1.109 - return getEndPos(((JCInstanceOf) tree).clazz, endPositions); 1.110 + return getEndPos(((JCInstanceOf) tree).clazz, endPosTable); 1.111 case POS: 1.112 case NEG: 1.113 case NOT: 1.114 case COMPL: 1.115 case PREINC: 1.116 case PREDEC: 1.117 - return getEndPos(((JCUnary) tree).arg, endPositions); 1.118 + return getEndPos(((JCUnary) tree).arg, endPosTable); 1.119 case WHILELOOP: 1.120 - return getEndPos(((JCWhileLoop) tree).body, endPositions); 1.121 + return getEndPos(((JCWhileLoop) tree).body, endPosTable); 1.122 case ERRONEOUS: { 1.123 JCErroneous node = (JCErroneous)tree; 1.124 if (node.errs != null && node.errs.nonEmpty()) 1.125 - return getEndPos(node.errs.last(), endPositions); 1.126 + return getEndPos(node.errs.last(), endPosTable); 1.127 } 1.128 } 1.129 return Position.NOPOS; 1.130 @@ -444,7 +444,7 @@ 1.131 public JCTree getTree() { return tree; } 1.132 public int getStartPosition() { return TreeInfo.getStartPos(tree); } 1.133 public int getPreferredPosition() { return endPos; } 1.134 - public int getEndPosition(Map<JCTree, Integer> endPosTable) { 1.135 + public int getEndPosition(EndPosTable endPosTable) { 1.136 return TreeInfo.getEndPos(tree, endPosTable); 1.137 } 1.138 };