6921494: provide way to print javac tree tag values

Tue, 08 Nov 2011 11:51:05 -0800

author
jjg
date
Tue, 08 Nov 2011 11:51:05 -0800
changeset 1127
ca49d50318dc
parent 1126
11c184155128
child 1128
b7003a6a530b
child 1135
36553cb94345

6921494: provide way to print javac tree tag values
Reviewed-by: jjg, mcimadamore
Contributed-by: vicenterz@yahoo.es

src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/api/JavacTrees.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Annotate.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Attr.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Check.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Enter.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Env.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Flow.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Infer.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Lower.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/MemberEnter.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/comp/Resolve.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/jvm/CRTable.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/jvm/Gen.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/main/JavaCompiler.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/model/JavacElements.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/parser/JavacParser.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/tree/JCTree.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/tree/Pretty.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/tree/TreeCopier.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javac/tree/TreeMaker.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java file | annotate | diff | comparison | revisions
src/share/classes/com/sun/tools/javadoc/JavadocTool.java file | annotate | diff | comparison | revisions
test/tools/javac/failover/CheckAttributedTree.java file | annotate | diff | comparison | revisions
test/tools/javac/tree/AbstractTreeScannerTest.java file | annotate | diff | comparison | revisions
test/tools/javac/tree/TreePosTest.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java	Sat Nov 05 00:02:33 2011 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTaskImpl.java	Tue Nov 08 11:51:05 2011 -0800
     1.3 @@ -325,7 +325,7 @@
     1.4              ListBuffer<TypeElement> elements = new ListBuffer<TypeElement>();
     1.5              for (JCCompilationUnit unit : units) {
     1.6                  for (JCTree node : unit.defs) {
     1.7 -                    if (node.getTag() == JCTree.CLASSDEF) {
     1.8 +                    if (node.hasTag(JCTree.Tag.CLASSDEF)) {
     1.9                          JCClassDecl cdef = (JCClassDecl) node;
    1.10                          if (cdef.sym != null) // maybe null if errors in anno processing
    1.11                              elements.append(cdef.sym);
    1.12 @@ -383,12 +383,12 @@
    1.13          private void handleFlowResults(Queue<Env<AttrContext>> queue, ListBuffer<Element> elems) {
    1.14              for (Env<AttrContext> env: queue) {
    1.15                  switch (env.tree.getTag()) {
    1.16 -                    case JCTree.CLASSDEF:
    1.17 +                    case CLASSDEF:
    1.18                          JCClassDecl cdef = (JCClassDecl) env.tree;
    1.19                          if (cdef.sym != null)
    1.20                              elems.append(cdef.sym);
    1.21                          break;
    1.22 -                    case JCTree.TOPLEVEL:
    1.23 +                    case TOPLEVEL:
    1.24                          JCCompilationUnit unit = (JCCompilationUnit) env.tree;
    1.25                          if (unit.packge != null)
    1.26                              elems.append(unit.packge);
     2.1 --- a/src/share/classes/com/sun/tools/javac/api/JavacTrees.java	Sat Nov 05 00:02:33 2011 -0700
     2.2 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTrees.java	Tue Nov 08 11:51:05 2011 -0800
     2.3 @@ -207,7 +207,7 @@
     2.4          if (sym == null && TreeInfo.isDeclaration(tree)) {
     2.5              for (TreePath p = path; p != null; p = p.getParentPath()) {
     2.6                  JCTree t = (JCTree) p.getLeaf();
     2.7 -                if (t.getTag() == JCTree.CLASSDEF) {
     2.8 +                if (t.hasTag(JCTree.Tag.CLASSDEF)) {
     2.9                      JCClassDecl ct = (JCClassDecl) t;
    2.10                      if (ct.sym != null) {
    2.11                          if ((ct.sym.flags_field & Flags.UNATTRIBUTED) != 0) {
     3.1 --- a/src/share/classes/com/sun/tools/javac/comp/Annotate.java	Sat Nov 05 00:02:33 2011 -0700
     3.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Annotate.java	Tue Nov 08 11:51:05 2011 -0800
     3.3 @@ -1,5 +1,5 @@
     3.4  /*
     3.5 - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
     3.6 + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
     3.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3.8   *
     3.9   * This code is free software; you can redistribute it and/or modify it
    3.10 @@ -31,6 +31,8 @@
    3.11  import com.sun.tools.javac.tree.*;
    3.12  import com.sun.tools.javac.tree.JCTree.*;
    3.13  
    3.14 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    3.15 +
    3.16  /** Enter annotations on symbols.  Annotations accumulate in a queue,
    3.17   *  which is processed at the top level of any set of recursive calls
    3.18   *  requesting it be processed.
    3.19 @@ -148,7 +150,7 @@
    3.20              return new Attribute.Compound(a.type, List.<Pair<MethodSymbol,Attribute>>nil());
    3.21          }
    3.22          List<JCExpression> args = a.args;
    3.23 -        if (args.length() == 1 && args.head.getTag() != JCTree.ASSIGN) {
    3.24 +        if (args.length() == 1 && !args.head.hasTag(ASSIGN)) {
    3.25              // special case: elided "value=" assumed
    3.26              args.head = make.at(args.head.pos).
    3.27                  Assign(make.Ident(names.value), args.head);
    3.28 @@ -157,12 +159,12 @@
    3.29              new ListBuffer<Pair<MethodSymbol,Attribute>>();
    3.30          for (List<JCExpression> tl = args; tl.nonEmpty(); tl = tl.tail) {
    3.31              JCExpression t = tl.head;
    3.32 -            if (t.getTag() != JCTree.ASSIGN) {
    3.33 +            if (!t.hasTag(ASSIGN)) {
    3.34                  log.error(t.pos(), "annotation.value.must.be.name.value");
    3.35                  continue;
    3.36              }
    3.37              JCAssign assign = (JCAssign)t;
    3.38 -            if (assign.lhs.getTag() != JCTree.IDENT) {
    3.39 +            if (!assign.lhs.hasTag(IDENT)) {
    3.40                  log.error(t.pos(), "annotation.value.must.be.name.value");
    3.41                  continue;
    3.42              }
    3.43 @@ -222,14 +224,14 @@
    3.44                                         (((JCFieldAccess) tree).selected).type);
    3.45          }
    3.46          if ((expected.tsym.flags() & Flags.ANNOTATION) != 0) {
    3.47 -            if (tree.getTag() != JCTree.ANNOTATION) {
    3.48 +            if (!tree.hasTag(ANNOTATION)) {
    3.49                  log.error(tree.pos(), "annotation.value.must.be.annotation");
    3.50                  expected = syms.errorType;
    3.51              }
    3.52              return enterAnnotation((JCAnnotation)tree, expected, env);
    3.53          }
    3.54          if (expected.tag == TypeTags.ARRAY) { // should really be isArray()
    3.55 -            if (tree.getTag() != JCTree.NEWARRAY) {
    3.56 +            if (!tree.hasTag(NEWARRAY)) {
    3.57                  tree = make.at(tree.pos).
    3.58                      NewArray(null, List.<JCExpression>nil(), List.of(tree));
    3.59              }
     4.1 --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java	Sat Nov 05 00:02:33 2011 -0700
     4.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java	Tue Nov 08 11:51:05 2011 -0800
     4.3 @@ -49,8 +49,13 @@
     4.4  import com.sun.source.util.SimpleTreeVisitor;
     4.5  
     4.6  import static com.sun.tools.javac.code.Flags.*;
     4.7 +import static com.sun.tools.javac.code.Flags.ANNOTATION;
     4.8 +import static com.sun.tools.javac.code.Flags.BLOCK;
     4.9  import static com.sun.tools.javac.code.Kinds.*;
    4.10 +import static com.sun.tools.javac.code.Kinds.ERRONEOUS;
    4.11  import static com.sun.tools.javac.code.TypeTags.*;
    4.12 +import static com.sun.tools.javac.code.TypeTags.WILDCARD;
    4.13 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    4.14  
    4.15  /** This is the main context-dependent analysis phase in GJC. It
    4.16   *  encompasses name resolution, type checking and constant folding as
    4.17 @@ -245,7 +250,7 @@
    4.18              ((v.flags() & HASINIT) != 0
    4.19               ||
    4.20               !((base == null ||
    4.21 -               (base.getTag() == JCTree.IDENT && TreeInfo.name(base) == names._this)) &&
    4.22 +               (base.hasTag(IDENT) && TreeInfo.name(base) == names._this)) &&
    4.23                 isAssignableAsBlankFinal(v, env)))) {
    4.24              if (v.isResourceVariable()) { //TWR resource
    4.25                  log.error(pos, "try.resource.may.not.be.assigned", v);
    4.26 @@ -263,7 +268,7 @@
    4.27       *  @param tree    The candidate tree.
    4.28       */
    4.29      boolean isStaticReference(JCTree tree) {
    4.30 -        if (tree.getTag() == JCTree.SELECT) {
    4.31 +        if (tree.hasTag(SELECT)) {
    4.32              Symbol lsym = TreeInfo.symbol(((JCFieldAccess) tree).selected);
    4.33              if (lsym == null || lsym.kind != TYP) {
    4.34                  return false;
    4.35 @@ -693,7 +698,7 @@
    4.36              // disable implicit outer instance from being passed.
    4.37              // (This would be an illegal access to "this before super").
    4.38              if (env.info.isSelfCall &&
    4.39 -                env.tree.getTag() == JCTree.NEWCLASS &&
    4.40 +                env.tree.hasTag(NEWCLASS) &&
    4.41                  ((JCNewClass) env.tree).encl == null)
    4.42              {
    4.43                  c.flags_field |= NOOUTERTHIS;
    4.44 @@ -863,7 +868,7 @@
    4.45              chk.checkDeprecatedAnnotation(tree.pos(), v);
    4.46  
    4.47              if (tree.init != null) {
    4.48 -                if ((v.flags_field & FINAL) != 0 && tree.init.getTag() != JCTree.NEWCLASS) {
    4.49 +                if ((v.flags_field & FINAL) != 0 && !tree.init.hasTag(NEWCLASS)) {
    4.50                      // In this case, `v' is final.  Ensure that it's initializer is
    4.51                      // evaluated.
    4.52                      v.getConstValue(); // ensure initializer is evaluated
    4.53 @@ -971,8 +976,8 @@
    4.54      public void visitLabelled(JCLabeledStatement tree) {
    4.55          // Check that label is not used in an enclosing statement
    4.56          Env<AttrContext> env1 = env;
    4.57 -        while (env1 != null && env1.tree.getTag() != JCTree.CLASSDEF) {
    4.58 -            if (env1.tree.getTag() == JCTree.LABELLED &&
    4.59 +        while (env1 != null && !env1.tree.hasTag(CLASSDEF)) {
    4.60 +            if (env1.tree.hasTag(LABELLED) &&
    4.61                  ((JCLabeledStatement) env1.tree).label == tree.label) {
    4.62                  log.error(tree.pos(), "label.already.in.use",
    4.63                            tree.label);
    4.64 @@ -1052,14 +1057,14 @@
    4.65          private static void addVars(List<JCStatement> stats, Scope switchScope) {
    4.66              for (;stats.nonEmpty(); stats = stats.tail) {
    4.67                  JCTree stat = stats.head;
    4.68 -                if (stat.getTag() == JCTree.VARDEF)
    4.69 +                if (stat.hasTag(VARDEF))
    4.70                      switchScope.enter(((JCVariableDecl) stat).sym);
    4.71              }
    4.72          }
    4.73      // where
    4.74      /** Return the selected enumeration constant symbol, or null. */
    4.75      private Symbol enumConstant(JCTree tree, Type enumType) {
    4.76 -        if (tree.getTag() != JCTree.IDENT) {
    4.77 +        if (!tree.hasTag(IDENT)) {
    4.78              log.error(tree.pos(), "enum.label.must.be.unqualified.enum");
    4.79              return syms.errSymbol;
    4.80          }
    4.81 @@ -1094,7 +1099,7 @@
    4.82              localEnv;
    4.83          // Attribute resource declarations
    4.84          for (JCTree resource : tree.resources) {
    4.85 -            if (resource.getTag() == JCTree.VARDEF) {
    4.86 +            if (resource.hasTag(VARDEF)) {
    4.87                  attribStat(resource, tryEnv);
    4.88                  chk.checkType(resource, resource.type, syms.autoCloseableType, "try.not.applicable.to.type");
    4.89  
    4.90 @@ -1312,7 +1317,7 @@
    4.91           *  @param env     The environment current at the jump statement.
    4.92           */
    4.93          private JCTree findJumpTarget(DiagnosticPosition pos,
    4.94 -                                    int tag,
    4.95 +                                    JCTree.Tag tag,
    4.96                                      Name label,
    4.97                                      Env<AttrContext> env) {
    4.98              // Search environments outwards from the point of jump.
    4.99 @@ -1320,15 +1325,15 @@
   4.100              LOOP:
   4.101              while (env1 != null) {
   4.102                  switch (env1.tree.getTag()) {
   4.103 -                case JCTree.LABELLED:
   4.104 +                case LABELLED:
   4.105                      JCLabeledStatement labelled = (JCLabeledStatement)env1.tree;
   4.106                      if (label == labelled.label) {
   4.107                          // If jump is a continue, check that target is a loop.
   4.108 -                        if (tag == JCTree.CONTINUE) {
   4.109 -                            if (labelled.body.getTag() != JCTree.DOLOOP &&
   4.110 -                                labelled.body.getTag() != JCTree.WHILELOOP &&
   4.111 -                                labelled.body.getTag() != JCTree.FORLOOP &&
   4.112 -                                labelled.body.getTag() != JCTree.FOREACHLOOP)
   4.113 +                        if (tag == CONTINUE) {
   4.114 +                            if (!labelled.body.hasTag(DOLOOP) &&
   4.115 +                                !labelled.body.hasTag(WHILELOOP) &&
   4.116 +                                !labelled.body.hasTag(FORLOOP) &&
   4.117 +                                !labelled.body.hasTag(FOREACHLOOP))
   4.118                                  log.error(pos, "not.loop.label", label);
   4.119                              // Found labelled statement target, now go inwards
   4.120                              // to next non-labelled tree.
   4.121 @@ -1338,17 +1343,17 @@
   4.122                          }
   4.123                      }
   4.124                      break;
   4.125 -                case JCTree.DOLOOP:
   4.126 -                case JCTree.WHILELOOP:
   4.127 -                case JCTree.FORLOOP:
   4.128 -                case JCTree.FOREACHLOOP:
   4.129 +                case DOLOOP:
   4.130 +                case WHILELOOP:
   4.131 +                case FORLOOP:
   4.132 +                case FOREACHLOOP:
   4.133                      if (label == null) return env1.tree;
   4.134                      break;
   4.135 -                case JCTree.SWITCH:
   4.136 -                    if (label == null && tag == JCTree.BREAK) return env1.tree;
   4.137 +                case SWITCH:
   4.138 +                    if (label == null && tag == BREAK) return env1.tree;
   4.139                      break;
   4.140 -                case JCTree.METHODDEF:
   4.141 -                case JCTree.CLASSDEF:
   4.142 +                case METHODDEF:
   4.143 +                case CLASSDEF:
   4.144                      break LOOP;
   4.145                  default:
   4.146                  }
   4.147 @@ -1356,7 +1361,7 @@
   4.148              }
   4.149              if (label != null)
   4.150                  log.error(pos, "undef.label", label);
   4.151 -            else if (tag == JCTree.CONTINUE)
   4.152 +            else if (tag == CONTINUE)
   4.153                  log.error(pos, "cont.outside.loop");
   4.154              else
   4.155                  log.error(pos, "break.outside.switch.loop");
   4.156 @@ -1452,7 +1457,7 @@
   4.157                      if (encl.tag == CLASS) {
   4.158                          // we are calling a nested class
   4.159  
   4.160 -                        if (tree.meth.getTag() == JCTree.SELECT) {
   4.161 +                        if (tree.meth.hasTag(SELECT)) {
   4.162                              JCTree qualifier = ((JCFieldAccess) tree.meth).selected;
   4.163  
   4.164                              // We are seeing a prefixed call, of the form
   4.165 @@ -1468,7 +1473,7 @@
   4.166                              rs.resolveImplicitThis(tree.meth.pos(),
   4.167                                                     localEnv, site, true);
   4.168                          }
   4.169 -                    } else if (tree.meth.getTag() == JCTree.SELECT) {
   4.170 +                    } else if (tree.meth.hasTag(SELECT)) {
   4.171                          log.error(tree.meth.pos(), "illegal.qual.not.icls",
   4.172                                    site.tsym);
   4.173                      }
   4.174 @@ -1522,7 +1527,7 @@
   4.175  
   4.176              // as a special case, array.clone() has a result that is
   4.177              // the same as static type of the array being cloned
   4.178 -            if (tree.meth.getTag() == JCTree.SELECT &&
   4.179 +            if (tree.meth.hasTag(SELECT) &&
   4.180                  allowCovariantReturns &&
   4.181                  methName == names.clone &&
   4.182                  types.isArray(((JCFieldAccess) tree.meth).selected.type))
   4.183 @@ -1531,7 +1536,7 @@
   4.184              // as a special case, x.getClass() has type Class<? extends |X|>
   4.185              if (allowGenerics &&
   4.186                  methName == names.getClass && tree.args.isEmpty()) {
   4.187 -                Type qualifier = (tree.meth.getTag() == JCTree.SELECT)
   4.188 +                Type qualifier = (tree.meth.hasTag(SELECT))
   4.189                      ? ((JCFieldAccess) tree.meth).selected.type
   4.190                      : env.enclClass.sym.type;
   4.191                  restype = new
   4.192 @@ -1560,7 +1565,7 @@
   4.193              JCMethodDecl enclMethod = env.enclMethod;
   4.194              if (enclMethod != null && enclMethod.name == names.init) {
   4.195                  JCBlock body = enclMethod.body;
   4.196 -                if (body.stats.head.getTag() == JCTree.EXEC &&
   4.197 +                if (body.stats.head.hasTag(EXEC) &&
   4.198                      ((JCExpressionStatement) body.stats.head).expr == tree)
   4.199                      return true;
   4.200              }
   4.201 @@ -1591,7 +1596,7 @@
   4.202          // complete class name to be fully qualified
   4.203          JCExpression clazz = tree.clazz; // Class field following new
   4.204          JCExpression clazzid =          // Identifier in class field
   4.205 -            (clazz.getTag() == JCTree.TYPEAPPLY)
   4.206 +            (clazz.hasTag(TYPEAPPLY))
   4.207              ? ((JCTypeApply) clazz).clazz
   4.208              : clazz;
   4.209  
   4.210 @@ -1610,7 +1615,7 @@
   4.211                                               attribExpr(tree.encl, env));
   4.212              clazzid1 = make.at(clazz.pos).Select(make.Type(encltype),
   4.213                                                   ((JCIdent) clazzid).name);
   4.214 -            if (clazz.getTag() == JCTree.TYPEAPPLY)
   4.215 +            if (clazz.hasTag(TYPEAPPLY))
   4.216                  clazz = make.at(tree.pos).
   4.217                      TypeApply(clazzid1,
   4.218                                ((JCTypeApply) clazz).arguments);
   4.219 @@ -1689,7 +1694,7 @@
   4.220              // Enums may not be instantiated except implicitly
   4.221              if (allowEnums &&
   4.222                  (clazztype.tsym.flags_field&Flags.ENUM) != 0 &&
   4.223 -                (env.tree.getTag() != JCTree.VARDEF ||
   4.224 +                (!env.tree.hasTag(VARDEF) ||
   4.225                   (((JCVariableDecl) env.tree).mods.flags&Flags.ENUM) == 0 ||
   4.226                   ((JCVariableDecl) env.tree).init != tree))
   4.227                  log.error(tree.pos(), "enum.cant.be.instantiated");
   4.228 @@ -1930,7 +1935,7 @@
   4.229          Name name = TreeInfo.name(arg);
   4.230          if (name == names._this || name == names._super) return arg;
   4.231  
   4.232 -        int optag = JCTree.NULLCHK;
   4.233 +        JCTree.Tag optag = NULLCHK;
   4.234          JCUnary tree = make.at(arg.pos).Unary(optag, arg);
   4.235          tree.operator = syms.nullcheck;
   4.236          tree.type = arg.type;
   4.237 @@ -1991,7 +1996,7 @@
   4.238          Type operand = attribExpr(tree.rhs, env);
   4.239          // Find operator.
   4.240          Symbol operator = tree.operator = rs.resolveBinaryOperator(
   4.241 -            tree.pos(), tree.getTag() - JCTree.ASGOffset, env,
   4.242 +            tree.pos(), tree.getTag().noAssignOp(), env,
   4.243              owntype, operand);
   4.244  
   4.245          if (operator.kind == MTH &&
   4.246 @@ -1999,7 +2004,7 @@
   4.247                  !operand.isErroneous()) {
   4.248              chk.checkOperator(tree.pos(),
   4.249                                (OperatorSymbol)operator,
   4.250 -                              tree.getTag() - JCTree.ASGOffset,
   4.251 +                              tree.getTag().noAssignOp(),
   4.252                                owntype,
   4.253                                operand);
   4.254              chk.checkDivZero(tree.rhs.pos(), operator, operand);
   4.255 @@ -2012,7 +2017,7 @@
   4.256  
   4.257      public void visitUnary(JCUnary tree) {
   4.258          // Attribute arguments.
   4.259 -        Type argtype = (JCTree.PREINC <= tree.getTag() && tree.getTag() <= JCTree.POSTDEC)
   4.260 +        Type argtype = (tree.getTag().isIncOrDecUnaryOp())
   4.261              ? attribTree(tree.arg, env, VAR, Type.noType)
   4.262              : chk.checkNonVoid(tree.arg.pos(), attribExpr(tree.arg, env));
   4.263  
   4.264 @@ -2023,7 +2028,7 @@
   4.265          Type owntype = types.createErrorType(tree.type);
   4.266          if (operator.kind == MTH &&
   4.267                  !argtype.isErroneous()) {
   4.268 -            owntype = (JCTree.PREINC <= tree.getTag() && tree.getTag() <= JCTree.POSTDEC)
   4.269 +            owntype = (tree.getTag().isIncOrDecUnaryOp())
   4.270                  ? tree.arg.type
   4.271                  : operator.type.getReturnType();
   4.272              int opc = ((OperatorSymbol)operator).opcode;
   4.273 @@ -2621,7 +2626,7 @@
   4.274                  canOwnInitializer(env.info.scope.owner) &&
   4.275                  v.owner == env.info.scope.owner.enclClass() &&
   4.276                  ((v.flags() & STATIC) != 0) == Resolve.isStatic(env) &&
   4.277 -                (env.tree.getTag() != JCTree.ASSIGN ||
   4.278 +                (!env.tree.hasTag(ASSIGN) ||
   4.279                   TreeInfo.skipParens(((JCAssign) env.tree).lhs) != tree)) {
   4.280                  String suffix = (env.info.enclVar == v) ?
   4.281                                  "self.ref" : "forward.ref";
   4.282 @@ -2812,10 +2817,10 @@
   4.283                  }
   4.284                  Type elemtype = types.elemtype(argtype);
   4.285                  switch (tree.getTag()) {
   4.286 -                case JCTree.APPLY:
   4.287 +                case APPLY:
   4.288                      ((JCMethodInvocation) tree).varargsElement = elemtype;
   4.289                      break;
   4.290 -                case JCTree.NEWCLASS:
   4.291 +                case NEWCLASS:
   4.292                      ((JCNewClass) tree).varargsElement = elemtype;
   4.293                      break;
   4.294                  default:
   4.295 @@ -2896,9 +2901,9 @@
   4.296                  if (clazzOuter.tag == CLASS) {
   4.297                      Type site;
   4.298                      JCExpression clazz = TreeInfo.typeIn(tree.clazz);
   4.299 -                    if (clazz.getTag() == JCTree.IDENT) {
   4.300 +                    if (clazz.hasTag(IDENT)) {
   4.301                          site = env.enclClass.sym.type;
   4.302 -                    } else if (clazz.getTag() == JCTree.SELECT) {
   4.303 +                    } else if (clazz.hasTag(SELECT)) {
   4.304                          site = ((JCFieldAccess) clazz).selected.type;
   4.305                      } else throw new AssertionError(""+tree);
   4.306                      if (clazzOuter.tag == CLASS && site != clazzOuter) {
   4.307 @@ -3068,7 +3073,7 @@
   4.308       * Attribute an env for either a top level tree or class declaration.
   4.309       */
   4.310      public void attrib(Env<AttrContext> env) {
   4.311 -        if (env.tree.getTag() == JCTree.TOPLEVEL)
   4.312 +        if (env.tree.hasTag(TOPLEVEL))
   4.313              attribTopLevel(env);
   4.314          else
   4.315              attribClass(env.tree.pos(), env.enclClass.sym);
   4.316 @@ -3245,7 +3250,7 @@
   4.317                  ((c.flags() & STATIC) == 0 || c.name == names.empty) &&
   4.318                  (TreeInfo.flags(l.head) & (STATIC | INTERFACE)) != 0) {
   4.319                  Symbol sym = null;
   4.320 -                if (l.head.getTag() == JCTree.VARDEF) sym = ((JCVariableDecl) l.head).sym;
   4.321 +                if (l.head.hasTag(VARDEF)) sym = ((JCVariableDecl) l.head).sym;
   4.322                  if (sym == null ||
   4.323                      sym.kind != VAR ||
   4.324                      ((VarSymbol) sym).getConstValue() == null)
     5.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Sat Nov 05 00:02:33 2011 -0700
     5.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Tue Nov 08 11:51:05 2011 -0800
     5.3 @@ -42,10 +42,14 @@
     5.4  import com.sun.tools.javac.code.Symbol.*;
     5.5  
     5.6  import static com.sun.tools.javac.code.Flags.*;
     5.7 +import static com.sun.tools.javac.code.Flags.ANNOTATION;
     5.8 +import static com.sun.tools.javac.code.Flags.SYNCHRONIZED;
     5.9  import static com.sun.tools.javac.code.Kinds.*;
    5.10  import static com.sun.tools.javac.code.TypeTags.*;
    5.11 +import static com.sun.tools.javac.code.TypeTags.WILDCARD;
    5.12  
    5.13  import static com.sun.tools.javac.main.OptionName.*;
    5.14 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    5.15  
    5.16  /** Type checking helper class for the attribution phase.
    5.17   *
    5.18 @@ -987,7 +991,7 @@
    5.19       *  <i>not</i> final.
    5.20       */
    5.21      private long implicitEnumFinalFlag(JCTree tree) {
    5.22 -        if (tree.getTag() != JCTree.CLASSDEF) return 0;
    5.23 +        if (!tree.hasTag(CLASSDEF)) return 0;
    5.24          class SpecialTreeVisitor extends JCTree.Visitor {
    5.25              boolean specialized;
    5.26              SpecialTreeVisitor() {
    5.27 @@ -1099,7 +1103,7 @@
    5.28                  // not parameterized at all.
    5.29                  if (tree.type.getEnclosingType().isRaw())
    5.30                      log.error(tree.pos(), "improperly.formed.type.inner.raw.param");
    5.31 -                if (tree.clazz.getTag() == JCTree.SELECT)
    5.32 +                if (tree.clazz.hasTag(SELECT))
    5.33                      visitSelectInternal((JCFieldAccess)tree.clazz);
    5.34              }
    5.35          }
    5.36 @@ -2413,7 +2417,7 @@
    5.37  
    5.38          // count them off as they're annotated
    5.39          for (JCTree arg : a.args) {
    5.40 -            if (arg.getTag() != JCTree.ASSIGN) continue; // recovery
    5.41 +            if (!arg.hasTag(ASSIGN)) continue; // recovery
    5.42              JCAssign assign = (JCAssign) arg;
    5.43              Symbol m = TreeInfo.symbol(assign.lhs);
    5.44              if (m == null || m.type.isErroneous()) continue;
    5.45 @@ -2442,12 +2446,12 @@
    5.46              a.args.tail == null)
    5.47              return;
    5.48  
    5.49 -        if (a.args.head.getTag() != JCTree.ASSIGN) return; // error recovery
    5.50 +        if (!a.args.head.hasTag(ASSIGN)) return; // error recovery
    5.51          JCAssign assign = (JCAssign) a.args.head;
    5.52          Symbol m = TreeInfo.symbol(assign.lhs);
    5.53          if (m.name != names.value) return;
    5.54          JCTree rhs = assign.rhs;
    5.55 -        if (rhs.getTag() != JCTree.NEWARRAY) return;
    5.56 +        if (!rhs.hasTag(NEWARRAY)) return;
    5.57          JCNewArray na = (JCNewArray) rhs;
    5.58          Set<Symbol> targets = new HashSet<Symbol>();
    5.59          for (JCTree elem : na.elems) {
    5.60 @@ -2506,7 +2510,7 @@
    5.61          try {
    5.62              tree.sym.flags_field |= LOCKED;
    5.63              for (JCTree def : tree.defs) {
    5.64 -                if (def.getTag() != JCTree.METHODDEF) continue;
    5.65 +                if (!def.hasTag(METHODDEF)) continue;
    5.66                  JCMethodDecl meth = (JCMethodDecl)def;
    5.67                  checkAnnotationResType(meth.pos(), meth.restype.type);
    5.68              }
    5.69 @@ -2614,7 +2618,7 @@
    5.70       */
    5.71      int checkOperator(DiagnosticPosition pos,
    5.72                         OperatorSymbol operator,
    5.73 -                       int tag,
    5.74 +                       JCTree.Tag tag,
    5.75                         Type left,
    5.76                         Type right) {
    5.77          if (operator.opcode == ByteCodes.error) {
    5.78 @@ -2650,7 +2654,8 @@
    5.79       * Check for empty statements after if
    5.80       */
    5.81      void checkEmptyIf(JCIf tree) {
    5.82 -        if (tree.thenpart.getTag() == JCTree.SKIP && tree.elsepart == null && lint.isEnabled(LintCategory.EMPTY))
    5.83 +        if (tree.thenpart.hasTag(SKIP) && tree.elsepart == null &&
    5.84 +                lint.isEnabled(LintCategory.EMPTY))
    5.85              log.warning(LintCategory.EMPTY, tree.thenpart.pos(), "empty.if");
    5.86      }
    5.87  
    5.88 @@ -2754,7 +2759,7 @@
    5.89      }
    5.90          // where
    5.91          private boolean isCanonical(JCTree tree) {
    5.92 -            while (tree.getTag() == JCTree.SELECT) {
    5.93 +            while (tree.hasTag(SELECT)) {
    5.94                  JCFieldAccess s = (JCFieldAccess) tree;
    5.95                  if (s.sym.owner != TreeInfo.symbol(s.selected))
    5.96                      return false;
     6.1 --- a/src/share/classes/com/sun/tools/javac/comp/Enter.java	Sat Nov 05 00:02:33 2011 -0700
     6.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Enter.java	Tue Nov 08 11:51:05 2011 -0800
     6.3 @@ -228,7 +228,7 @@
     6.4       *  only, and members go into the class member scope.
     6.5       */
     6.6      Scope enterScope(Env<AttrContext> env) {
     6.7 -        return (env.tree.getTag() == JCTree.CLASSDEF)
     6.8 +        return (env.tree.hasTag(JCTree.Tag.CLASSDEF))
     6.9              ? ((JCClassDecl) env.tree).sym.members_field
    6.10              : env.info.scope;
    6.11      }
     7.1 --- a/src/share/classes/com/sun/tools/javac/comp/Env.java	Sat Nov 05 00:02:33 2011 -0700
     7.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Env.java	Tue Nov 08 11:51:05 2011 -0800
     7.3 @@ -1,5 +1,5 @@
     7.4  /*
     7.5 - * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
     7.6 + * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
     7.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     7.8   *
     7.9   * This code is free software; you can redistribute it and/or modify it
    7.10 @@ -116,9 +116,9 @@
    7.11  
    7.12      /** Return closest enclosing environment which points to a tree with given tag.
    7.13       */
    7.14 -    public Env<A> enclosing(int tag) {
    7.15 +    public Env<A> enclosing(JCTree.Tag tag) {
    7.16          Env<A> env1 = this;
    7.17 -        while (env1 != null && env1.tree.getTag() != tag) env1 = env1.next;
    7.18 +        while (env1 != null && !env1.tree.hasTag(tag)) env1 = env1.next;
    7.19          return env1;
    7.20      }
    7.21  
     8.1 --- a/src/share/classes/com/sun/tools/javac/comp/Flow.java	Sat Nov 05 00:02:33 2011 -0700
     8.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Flow.java	Tue Nov 08 11:51:05 2011 -0800
     8.3 @@ -40,8 +40,10 @@
     8.4  import com.sun.tools.javac.tree.JCTree.*;
     8.5  
     8.6  import static com.sun.tools.javac.code.Flags.*;
     8.7 +import static com.sun.tools.javac.code.Flags.BLOCK;
     8.8  import static com.sun.tools.javac.code.Kinds.*;
     8.9  import static com.sun.tools.javac.code.TypeTags.*;
    8.10 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    8.11  
    8.12  /** This pass implements dataflow analysis for Java programs.
    8.13   *  Liveness analysis checks that every statement is reachable.
    8.14 @@ -321,7 +323,7 @@
    8.15                  log.error(exit.tree.pos(),
    8.16                          "unreported.exception.default.constructor",
    8.17                          exit.thrown);
    8.18 -            } else if (exit.tree.getTag() == JCTree.VARDEF &&
    8.19 +            } else if (exit.tree.hasTag(VARDEF) &&
    8.20                      ((JCVariableDecl)exit.tree).sym.isResourceVariable()) {
    8.21                  log.error(exit.tree.pos(),
    8.22                          "unreported.exception.implicit.close",
    8.23 @@ -416,7 +418,7 @@
    8.24       */
    8.25      void letInit(JCTree tree) {
    8.26          tree = TreeInfo.skipParens(tree);
    8.27 -        if (tree.getTag() == JCTree.IDENT || tree.getTag() == JCTree.SELECT) {
    8.28 +        if (tree.hasTag(IDENT) || tree.hasTag(SELECT)) {
    8.29              Symbol sym = TreeInfo.symbol(tree);
    8.30              if (sym.kind == VAR) {
    8.31                  letInit(tree.pos(), (VarSymbol)sym);
    8.32 @@ -452,7 +454,7 @@
    8.33          pendingExits = oldPendingExits;
    8.34          for (; exits.nonEmpty(); exits = exits.tail) {
    8.35              PendingExit exit = exits.head;
    8.36 -            if (exit.tree.getTag() == JCTree.BREAK &&
    8.37 +            if (exit.tree.hasTag(BREAK) &&
    8.38                  ((JCBreak) exit.tree).target == tree) {
    8.39                  inits.andSet(exit.inits);
    8.40                  uninits.andSet(exit.uninits);
    8.41 @@ -471,7 +473,7 @@
    8.42          pendingExits = new ListBuffer<PendingExit>();
    8.43          for (; exits.nonEmpty(); exits = exits.tail) {
    8.44              PendingExit exit = exits.head;
    8.45 -            if (exit.tree.getTag() == JCTree.CONTINUE &&
    8.46 +            if (exit.tree.hasTag(CONTINUE) &&
    8.47                  ((JCContinue) exit.tree).target == tree) {
    8.48                  inits.andSet(exit.inits);
    8.49                  uninits.andSet(exit.uninits);
    8.50 @@ -517,7 +519,7 @@
    8.51       */
    8.52      void scanDef(JCTree tree) {
    8.53          scanStat(tree);
    8.54 -        if (tree != null && tree.getTag() == JCTree.BLOCK && !alive) {
    8.55 +        if (tree != null && tree.hasTag(JCTree.Tag.BLOCK) && !alive) {
    8.56              log.error(tree.pos(),
    8.57                        "initializer.must.be.able.to.complete.normally");
    8.58          }
    8.59 @@ -528,7 +530,7 @@
    8.60      void scanStat(JCTree tree) {
    8.61          if (!alive && tree != null) {
    8.62              log.error(tree.pos(), "unreachable.stmt");
    8.63 -            if (tree.getTag() != JCTree.SKIP) alive = true;
    8.64 +            if (!tree.hasTag(SKIP)) alive = true;
    8.65          }
    8.66          scan(tree);
    8.67      }
    8.68 @@ -614,7 +616,7 @@
    8.69          try {
    8.70              // define all the static fields
    8.71              for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
    8.72 -                if (l.head.getTag() == JCTree.VARDEF) {
    8.73 +                if (l.head.hasTag(VARDEF)) {
    8.74                      JCVariableDecl def = (JCVariableDecl)l.head;
    8.75                      if ((def.mods.flags & STATIC) != 0) {
    8.76                          VarSymbol sym = def.sym;
    8.77 @@ -626,7 +628,7 @@
    8.78  
    8.79              // process all the static initializers
    8.80              for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
    8.81 -                if (l.head.getTag() != JCTree.METHODDEF &&
    8.82 +                if (!l.head.hasTag(METHODDEF) &&
    8.83                      (TreeInfo.flags(l.head) & STATIC) != 0) {
    8.84                      scanDef(l.head);
    8.85                      errorUncaught();
    8.86 @@ -653,7 +655,7 @@
    8.87  
    8.88              // define all the instance fields
    8.89              for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
    8.90 -                if (l.head.getTag() == JCTree.VARDEF) {
    8.91 +                if (l.head.hasTag(VARDEF)) {
    8.92                      JCVariableDecl def = (JCVariableDecl)l.head;
    8.93                      if ((def.mods.flags & STATIC) == 0) {
    8.94                          VarSymbol sym = def.sym;
    8.95 @@ -665,7 +667,7 @@
    8.96  
    8.97              // process all the instance initializers
    8.98              for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
    8.99 -                if (l.head.getTag() != JCTree.METHODDEF &&
   8.100 +                if (!l.head.hasTag(METHODDEF) &&
   8.101                      (TreeInfo.flags(l.head) & STATIC) == 0) {
   8.102                      scanDef(l.head);
   8.103                      errorUncaught();
   8.104 @@ -691,7 +693,7 @@
   8.105  
   8.106              // process all the methods
   8.107              for (List<JCTree> l = tree.defs; l.nonEmpty(); l = l.tail) {
   8.108 -                if (l.head.getTag() == JCTree.METHODDEF) {
   8.109 +                if (l.head.hasTag(METHODDEF)) {
   8.110                      scan(l.head);
   8.111                      errorUncaught();
   8.112                  }
   8.113 @@ -760,7 +762,7 @@
   8.114                  PendingExit exit = exits.head;
   8.115                  exits = exits.tail;
   8.116                  if (exit.thrown == null) {
   8.117 -                    Assert.check(exit.tree.getTag() == JCTree.RETURN);
   8.118 +                    Assert.check(exit.tree.hasTag(RETURN));
   8.119                      if (isInitialConstructor) {
   8.120                          inits = exit.inits;
   8.121                          for (int i = firstadr; i < nextadr; i++)
   8.122 @@ -989,7 +991,7 @@
   8.123                                      Bits uninits) {
   8.124              for (;stats.nonEmpty(); stats = stats.tail) {
   8.125                  JCTree stat = stats.head;
   8.126 -                if (stat.getTag() == JCTree.VARDEF) {
   8.127 +                if (stat.hasTag(VARDEF)) {
   8.128                      int adr = ((JCVariableDecl) stat).sym.adr;
   8.129                      inits.excl(adr);
   8.130                      uninits.incl(adr);
   8.131 @@ -1346,7 +1348,7 @@
   8.132  
   8.133      public void visitUnary(JCUnary tree) {
   8.134          switch (tree.getTag()) {
   8.135 -        case JCTree.NOT:
   8.136 +        case NOT:
   8.137              scanCond(tree.arg);
   8.138              Bits t = initsWhenFalse;
   8.139              initsWhenFalse = initsWhenTrue;
   8.140 @@ -1355,8 +1357,8 @@
   8.141              uninitsWhenFalse = uninitsWhenTrue;
   8.142              uninitsWhenTrue = t;
   8.143              break;
   8.144 -        case JCTree.PREINC: case JCTree.POSTINC:
   8.145 -        case JCTree.PREDEC: case JCTree.POSTDEC:
   8.146 +        case PREINC: case POSTINC:
   8.147 +        case PREDEC: case POSTDEC:
   8.148              scanExpr(tree.arg);
   8.149              letInit(tree.arg);
   8.150              break;
   8.151 @@ -1367,7 +1369,7 @@
   8.152  
   8.153      public void visitBinary(JCBinary tree) {
   8.154          switch (tree.getTag()) {
   8.155 -        case JCTree.AND:
   8.156 +        case AND:
   8.157              scanCond(tree.lhs);
   8.158              Bits initsWhenFalseLeft = initsWhenFalse;
   8.159              Bits uninitsWhenFalseLeft = uninitsWhenFalse;
   8.160 @@ -1377,7 +1379,7 @@
   8.161              initsWhenFalse.andSet(initsWhenFalseLeft);
   8.162              uninitsWhenFalse.andSet(uninitsWhenFalseLeft);
   8.163              break;
   8.164 -        case JCTree.OR:
   8.165 +        case OR:
   8.166              scanCond(tree.lhs);
   8.167              Bits initsWhenTrueLeft = initsWhenTrue;
   8.168              Bits uninitsWhenTrueLeft = uninitsWhenTrue;
   8.169 @@ -1418,7 +1420,7 @@
   8.170          private boolean is292targetTypeCast(JCTypeCast tree) {
   8.171              boolean is292targetTypeCast = false;
   8.172              JCExpression expr = TreeInfo.skipParens(tree.expr);
   8.173 -            if (expr.getTag() == JCTree.APPLY) {
   8.174 +            if (expr.hasTag(APPLY)) {
   8.175                  JCMethodInvocation apply = (JCMethodInvocation)expr;
   8.176                  Symbol sym = TreeInfo.symbol(apply.meth);
   8.177                  is292targetTypeCast = sym != null &&
     9.1 --- a/src/share/classes/com/sun/tools/javac/comp/Infer.java	Sat Nov 05 00:02:33 2011 -0700
     9.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Infer.java	Tue Nov 08 11:51:05 2011 -0800
     9.3 @@ -633,13 +633,13 @@
     9.4          //the polymorphic signature call environment is nested.
     9.5  
     9.6          switch (env.next.tree.getTag()) {
     9.7 -            case JCTree.TYPECAST:
     9.8 +            case TYPECAST:
     9.9                  JCTypeCast castTree = (JCTypeCast)env.next.tree;
    9.10                  restype = (TreeInfo.skipParens(castTree.expr) == env.tree) ?
    9.11                      castTree.clazz.type :
    9.12                      syms.objectType;
    9.13                  break;
    9.14 -            case JCTree.EXEC:
    9.15 +            case EXEC:
    9.16                  JCTree.JCExpressionStatement execTree =
    9.17                          (JCTree.JCExpressionStatement)env.next.tree;
    9.18                  restype = (TreeInfo.skipParens(execTree.expr) == env.tree) ?
    10.1 --- a/src/share/classes/com/sun/tools/javac/comp/Lower.java	Sat Nov 05 00:02:33 2011 -0700
    10.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Lower.java	Tue Nov 08 11:51:05 2011 -0800
    10.3 @@ -42,9 +42,11 @@
    10.4  import com.sun.tools.javac.jvm.Target;
    10.5  
    10.6  import static com.sun.tools.javac.code.Flags.*;
    10.7 +import static com.sun.tools.javac.code.Flags.BLOCK;
    10.8  import static com.sun.tools.javac.code.Kinds.*;
    10.9  import static com.sun.tools.javac.code.TypeTags.*;
   10.10  import static com.sun.tools.javac.jvm.ByteCodes.*;
   10.11 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   10.12  
   10.13  /** This pass translates away some syntactic sugar: inner classes,
   10.14   *  class literals, assertions, foreach loops, etc.
   10.15 @@ -303,7 +305,7 @@
   10.16                  Symbol constructor = TreeInfo.symbol(tree.meth);
   10.17                  ClassSymbol c = (ClassSymbol)constructor.owner;
   10.18                  if (c.hasOuterInstance() &&
   10.19 -                    tree.meth.getTag() != JCTree.SELECT &&
   10.20 +                    !tree.meth.hasTag(SELECT) &&
   10.21                      outerThisStack.head != null)
   10.22                      visitSymbol(outerThisStack.head);
   10.23              }
   10.24 @@ -508,7 +510,7 @@
   10.25       *  @param optag    The operators tree tag.
   10.26       *  @param arg      The operator's argument.
   10.27       */
   10.28 -    JCUnary makeUnary(int optag, JCExpression arg) {
   10.29 +    JCUnary makeUnary(JCTree.Tag optag, JCExpression arg) {
   10.30          JCUnary tree = make.Unary(optag, arg);
   10.31          tree.operator = rs.resolveUnaryOperator(
   10.32              make_pos, optag, attrEnv, arg.type);
   10.33 @@ -521,7 +523,7 @@
   10.34       *  @param lhs      The operator's left argument.
   10.35       *  @param rhs      The operator's right argument.
   10.36       */
   10.37 -    JCBinary makeBinary(int optag, JCExpression lhs, JCExpression rhs) {
   10.38 +    JCBinary makeBinary(JCTree.Tag optag, JCExpression lhs, JCExpression rhs) {
   10.39          JCBinary tree = make.Binary(optag, lhs, rhs);
   10.40          tree.operator = rs.resolveBinaryOperator(
   10.41              make_pos, optag, attrEnv, lhs.type, rhs.type);
   10.42 @@ -534,10 +536,10 @@
   10.43       *  @param lhs      The operator's left argument.
   10.44       *  @param rhs      The operator's right argument.
   10.45       */
   10.46 -    JCAssignOp makeAssignop(int optag, JCTree lhs, JCTree rhs) {
   10.47 +    JCAssignOp makeAssignop(JCTree.Tag optag, JCTree lhs, JCTree rhs) {
   10.48          JCAssignOp tree = make.Assignop(optag, lhs, rhs);
   10.49          tree.operator = rs.resolveBinaryOperator(
   10.50 -            make_pos, tree.getTag() - JCTree.ASGOffset, attrEnv, lhs.type, rhs.type);
   10.51 +            make_pos, tree.getTag().noAssignOp(), attrEnv, lhs.type, rhs.type);
   10.52          tree.type = lhs.type;
   10.53          return tree;
   10.54      }
   10.55 @@ -720,7 +722,7 @@
   10.56      // where
   10.57      private boolean isTranslatedClassAvailable(ClassSymbol c) {
   10.58          for (JCTree tree: translated) {
   10.59 -            if (tree.getTag() == JCTree.CLASSDEF
   10.60 +            if (tree.hasTag(CLASSDEF)
   10.61                      && ((JCClassDecl) tree).sym == c) {
   10.62                  return true;
   10.63              }
   10.64 @@ -802,13 +804,13 @@
   10.65      private static int accessCode(JCTree tree, JCTree enclOp) {
   10.66          if (enclOp == null)
   10.67              return DEREFcode;
   10.68 -        else if (enclOp.getTag() == JCTree.ASSIGN &&
   10.69 +        else if (enclOp.hasTag(ASSIGN) &&
   10.70                   tree == TreeInfo.skipParens(((JCAssign) enclOp).lhs))
   10.71              return ASSIGNcode;
   10.72 -        else if (JCTree.PREINC <= enclOp.getTag() && enclOp.getTag() <= JCTree.POSTDEC &&
   10.73 +        else if (enclOp.getTag().isIncOrDecUnaryOp() &&
   10.74                   tree == TreeInfo.skipParens(((JCUnary) enclOp).arg))
   10.75 -            return (enclOp.getTag() - JCTree.PREINC) * 2 + PREINCcode;
   10.76 -        else if (JCTree.BITOR_ASG <= enclOp.getTag() && enclOp.getTag() <= JCTree.MOD_ASG &&
   10.77 +            return mapTagToUnaryOpCode(enclOp.getTag());
   10.78 +        else if (enclOp.getTag().isAssignop() &&
   10.79                   tree == TreeInfo.skipParens(((JCAssignOp) enclOp).lhs))
   10.80              return accessCode(((OperatorSymbol) ((JCAssignOp) enclOp).operator).opcode);
   10.81          else
   10.82 @@ -832,39 +834,39 @@
   10.83      /** Return tree tag for assignment operation corresponding
   10.84       *  to given binary operator.
   10.85       */
   10.86 -    private static int treeTag(OperatorSymbol operator) {
   10.87 +    private static JCTree.Tag treeTag(OperatorSymbol operator) {
   10.88          switch (operator.opcode) {
   10.89          case ByteCodes.ior: case ByteCodes.lor:
   10.90 -            return JCTree.BITOR_ASG;
   10.91 +            return BITOR_ASG;
   10.92          case ByteCodes.ixor: case ByteCodes.lxor:
   10.93 -            return JCTree.BITXOR_ASG;
   10.94 +            return BITXOR_ASG;
   10.95          case ByteCodes.iand: case ByteCodes.land:
   10.96 -            return JCTree.BITAND_ASG;
   10.97 +            return BITAND_ASG;
   10.98          case ByteCodes.ishl: case ByteCodes.lshl:
   10.99          case ByteCodes.ishll: case ByteCodes.lshll:
  10.100 -            return JCTree.SL_ASG;
  10.101 +            return SL_ASG;
  10.102          case ByteCodes.ishr: case ByteCodes.lshr:
  10.103          case ByteCodes.ishrl: case ByteCodes.lshrl:
  10.104 -            return JCTree.SR_ASG;
  10.105 +            return SR_ASG;
  10.106          case ByteCodes.iushr: case ByteCodes.lushr:
  10.107          case ByteCodes.iushrl: case ByteCodes.lushrl:
  10.108 -            return JCTree.USR_ASG;
  10.109 +            return USR_ASG;
  10.110          case ByteCodes.iadd: case ByteCodes.ladd:
  10.111          case ByteCodes.fadd: case ByteCodes.dadd:
  10.112          case ByteCodes.string_add:
  10.113 -            return JCTree.PLUS_ASG;
  10.114 +            return PLUS_ASG;
  10.115          case ByteCodes.isub: case ByteCodes.lsub:
  10.116          case ByteCodes.fsub: case ByteCodes.dsub:
  10.117 -            return JCTree.MINUS_ASG;
  10.118 +            return MINUS_ASG;
  10.119          case ByteCodes.imul: case ByteCodes.lmul:
  10.120          case ByteCodes.fmul: case ByteCodes.dmul:
  10.121 -            return JCTree.MUL_ASG;
  10.122 +            return MUL_ASG;
  10.123          case ByteCodes.idiv: case ByteCodes.ldiv:
  10.124          case ByteCodes.fdiv: case ByteCodes.ddiv:
  10.125 -            return JCTree.DIV_ASG;
  10.126 +            return DIV_ASG;
  10.127          case ByteCodes.imod: case ByteCodes.lmod:
  10.128          case ByteCodes.fmod: case ByteCodes.dmod:
  10.129 -            return JCTree.MOD_ASG;
  10.130 +            return MOD_ASG;
  10.131          default:
  10.132              throw new AssertionError();
  10.133          }
  10.134 @@ -1003,7 +1005,7 @@
  10.135          if (!currentClass.isSubClass(sym.owner, types))
  10.136              return true;
  10.137          if ((sym.flags() & STATIC) != 0 ||
  10.138 -            tree.getTag() != JCTree.SELECT ||
  10.139 +            !tree.hasTag(SELECT) ||
  10.140              TreeInfo.name(((JCFieldAccess) tree).selected) == names._super)
  10.141              return false;
  10.142          return !((JCFieldAccess) tree).selected.type.tsym.isSubClass(currentClass, types);
  10.143 @@ -1018,7 +1020,7 @@
  10.144          if (protAccess) {
  10.145              Symbol qualifier = null;
  10.146              ClassSymbol c = currentClass;
  10.147 -            if (tree.getTag() == JCTree.SELECT && (sym.flags() & STATIC) == 0) {
  10.148 +            if (tree.hasTag(SELECT) && (sym.flags() & STATIC) == 0) {
  10.149                  qualifier = ((JCFieldAccess) tree).selected.type.tsym;
  10.150                  while (!qualifier.isSubClass(c, types)) {
  10.151                      c = c.owner.enclClass();
  10.152 @@ -1058,7 +1060,7 @@
  10.153              Assert.check(sym != null && (sym.flags_field & FINAL) != 0);
  10.154              tree = make.at(tree.pos).Ident(sym);
  10.155          }
  10.156 -        JCExpression base = (tree.getTag() == JCTree.SELECT) ? ((JCFieldAccess) tree).selected : null;
  10.157 +        JCExpression base = (tree.hasTag(SELECT)) ? ((JCFieldAccess) tree).selected : null;
  10.158          switch (sym.kind) {
  10.159          case TYP:
  10.160              if (sym.owner.kind != PCK) {
  10.161 @@ -1068,11 +1070,11 @@
  10.162                  while (base != null &&
  10.163                         TreeInfo.symbol(base) != null &&
  10.164                         TreeInfo.symbol(base).kind != PCK) {
  10.165 -                    base = (base.getTag() == JCTree.SELECT)
  10.166 +                    base = (base.hasTag(SELECT))
  10.167                          ? ((JCFieldAccess) base).selected
  10.168                          : null;
  10.169                  }
  10.170 -                if (tree.getTag() == JCTree.IDENT) {
  10.171 +                if (tree.hasTag(IDENT)) {
  10.172                      ((JCIdent) tree).name = flatname;
  10.173                  } else if (base == null) {
  10.174                      tree = make.at(tree.pos).Ident(sym);
  10.175 @@ -1220,6 +1222,42 @@
  10.176          }
  10.177      }
  10.178  
  10.179 +    /** Maps unary operator integer codes to JCTree.Tag objects
  10.180 +     *  @param unaryOpCode the unary operator code
  10.181 +     */
  10.182 +    private static Tag mapUnaryOpCodeToTag(int unaryOpCode){
  10.183 +        switch (unaryOpCode){
  10.184 +            case PREINCcode:
  10.185 +                return PREINC;
  10.186 +            case PREDECcode:
  10.187 +                return PREDEC;
  10.188 +            case POSTINCcode:
  10.189 +                return POSTINC;
  10.190 +            case POSTDECcode:
  10.191 +                return POSTDEC;
  10.192 +            default:
  10.193 +                return NO_TAG;
  10.194 +        }
  10.195 +    }
  10.196 +
  10.197 +    /** Maps JCTree.Tag objects to unary operator integer codes
  10.198 +     *  @param tag the JCTree.Tag
  10.199 +     */
  10.200 +    private static int mapTagToUnaryOpCode(Tag tag){
  10.201 +        switch (tag){
  10.202 +            case PREINC:
  10.203 +                return PREINCcode;
  10.204 +            case PREDEC:
  10.205 +                return PREDECcode;
  10.206 +            case POSTINC:
  10.207 +                return POSTINCcode;
  10.208 +            case POSTDEC:
  10.209 +                return POSTDECcode;
  10.210 +            default:
  10.211 +                return -1;
  10.212 +        }
  10.213 +    }
  10.214 +
  10.215      /** Construct definition of an access method.
  10.216       *  @param pos        The source code position of the definition.
  10.217       *  @param vsym       The private or protected symbol.
  10.218 @@ -1259,8 +1297,7 @@
  10.219                  expr = make.Assign(ref, args.head);
  10.220                  break;
  10.221              case PREINCcode: case POSTINCcode: case PREDECcode: case POSTDECcode:
  10.222 -                expr = makeUnary(
  10.223 -                    ((acode1 - PREINCcode) >> 1) + JCTree.PREINC, ref);
  10.224 +                expr = makeUnary(mapUnaryOpCodeToTag(acode1), ref);
  10.225                  break;
  10.226              default:
  10.227                  expr = make.Assignop(
  10.228 @@ -1576,7 +1613,7 @@
  10.229      }
  10.230  
  10.231      private JCExpression makeNonNullCheck(JCExpression expression) {
  10.232 -        return makeBinary(JCTree.NE, expression, makeNull());
  10.233 +        return makeBinary(NE, expression, makeNull());
  10.234      }
  10.235  
  10.236      /** Construct a tree that represents the outer instance
  10.237 @@ -1808,7 +1845,7 @@
  10.238              // $newcache.getClass().getComponentType().getClassLoader() : cl$"
  10.239              JCExpression clvalue =
  10.240                  make.Conditional(
  10.241 -                    makeBinary(JCTree.EQ, make.Ident(clsym), makeNull()),
  10.242 +                    makeBinary(EQ, make.Ident(clsym), makeNull()),
  10.243                      make.Assign(
  10.244                          make.Ident(clsym),
  10.245                          makeCall(
  10.246 @@ -1976,7 +2013,7 @@
  10.247                  writer.xClassName(type).toString().replace('/', '.');
  10.248              Symbol cs = cacheSym(pos, sig);
  10.249              return make_at(pos).Conditional(
  10.250 -                makeBinary(JCTree.EQ, make.Ident(cs), makeNull()),
  10.251 +                makeBinary(EQ, make.Ident(cs), makeNull()),
  10.252                  make.Assign(
  10.253                      make.Ident(cs),
  10.254                      make.App(
  10.255 @@ -2023,7 +2060,7 @@
  10.256                                                              List.<Type>nil());
  10.257              JCClassDecl containerDef = classDef(container);
  10.258              make_at(containerDef.pos());
  10.259 -            JCExpression notStatus = makeUnary(JCTree.NOT, make.App(make.Select(
  10.260 +            JCExpression notStatus = makeUnary(NOT, make.App(make.Select(
  10.261                      classOfType(types.erasure(outermostClass.type),
  10.262                                  containerDef.pos()),
  10.263                      desiredAssertionStatusSym)));
  10.264 @@ -2032,7 +2069,7 @@
  10.265              containerDef.defs = containerDef.defs.prepend(assertDisabledDef);
  10.266          }
  10.267          make_at(pos);
  10.268 -        return makeUnary(JCTree.NOT, make.Ident(assertDisabledSym));
  10.269 +        return makeUnary(NOT, make.Ident(assertDisabledSym));
  10.270      }
  10.271  
  10.272  
  10.273 @@ -2062,9 +2099,9 @@
  10.274      JCTree abstractRval(JCTree rval, Type type, TreeBuilder builder) {
  10.275          rval = TreeInfo.skipParens(rval);
  10.276          switch (rval.getTag()) {
  10.277 -        case JCTree.LITERAL:
  10.278 +        case LITERAL:
  10.279              return builder.build(rval);
  10.280 -        case JCTree.IDENT:
  10.281 +        case IDENT:
  10.282              JCIdent id = (JCIdent) rval;
  10.283              if ((id.sym.flags() & FINAL) != 0 && id.sym.owner.kind == MTH)
  10.284                  return builder.build(rval);
  10.285 @@ -2097,9 +2134,9 @@
  10.286      JCTree abstractLval(JCTree lval, final TreeBuilder builder) {
  10.287          lval = TreeInfo.skipParens(lval);
  10.288          switch (lval.getTag()) {
  10.289 -        case JCTree.IDENT:
  10.290 +        case IDENT:
  10.291              return builder.build(lval);
  10.292 -        case JCTree.SELECT: {
  10.293 +        case SELECT: {
  10.294              final JCFieldAccess s = (JCFieldAccess)lval;
  10.295              JCTree selected = TreeInfo.skipParens(s.selected);
  10.296              Symbol lid = TreeInfo.symbol(s.selected);
  10.297 @@ -2110,7 +2147,7 @@
  10.298                      }
  10.299                  });
  10.300          }
  10.301 -        case JCTree.INDEXED: {
  10.302 +        case INDEXED: {
  10.303              final JCArrayAccess i = (JCArrayAccess)lval;
  10.304              return abstractRval(i.indexed, new TreeBuilder() {
  10.305                      public JCTree build(final JCTree indexed) {
  10.306 @@ -2125,7 +2162,7 @@
  10.307                      }
  10.308                  });
  10.309          }
  10.310 -        case JCTree.TYPECAST: {
  10.311 +        case TYPECAST: {
  10.312              return abstractLval(((JCTypeCast)lval).expr, builder);
  10.313          }
  10.314          }
  10.315 @@ -2345,7 +2382,7 @@
  10.316          for (List<JCTree> defs = tree.defs;
  10.317               defs.nonEmpty();
  10.318               defs=defs.tail) {
  10.319 -            if (defs.head.getTag() == JCTree.VARDEF && (((JCVariableDecl) defs.head).mods.flags & ENUM) != 0) {
  10.320 +            if (defs.head.hasTag(VARDEF) && (((JCVariableDecl) defs.head).mods.flags & ENUM) != 0) {
  10.321                  JCVariableDecl var = (JCVariableDecl)defs.head;
  10.322                  visitEnumConstantDef(var, nextOrdinal++);
  10.323                  values.append(make.QualIdent(var.sym));
  10.324 @@ -2757,9 +2794,9 @@
  10.325                  List.<JCExpression>nil() : List.of(translate(tree.detail));
  10.326              if (!tree.cond.type.isFalse()) {
  10.327                  cond = makeBinary
  10.328 -                    (JCTree.AND,
  10.329 +                    (AND,
  10.330                       cond,
  10.331 -                     makeUnary(JCTree.NOT, tree.cond));
  10.332 +                     makeUnary(NOT, tree.cond));
  10.333              }
  10.334              result =
  10.335                  make.If(cond,
  10.336 @@ -2816,7 +2853,7 @@
  10.337              // first argument.
  10.338              if (c.hasOuterInstance()) {
  10.339                  JCExpression thisArg;
  10.340 -                if (tree.meth.getTag() == JCTree.SELECT) {
  10.341 +                if (tree.meth.hasTag(SELECT)) {
  10.342                      thisArg = attr.
  10.343                          makeNullCheck(translate(((JCFieldAccess) tree.meth).selected));
  10.344                      tree.meth = make.Ident(constructor);
  10.345 @@ -2837,7 +2874,7 @@
  10.346              // If the translated method itself is an Apply tree, we are
  10.347              // seeing an access method invocation. In this case, append
  10.348              // the method arguments to the arguments of the access method.
  10.349 -            if (tree.meth.getTag() == JCTree.APPLY) {
  10.350 +            if (tree.meth.hasTag(APPLY)) {
  10.351                  JCMethodInvocation app = (JCMethodInvocation)tree.meth;
  10.352                  app.args = tree.args.prependList(app.args);
  10.353                  result = app;
  10.354 @@ -2971,7 +3008,7 @@
  10.355          // If translated left hand side is an Apply, we are
  10.356          // seeing an access method invocation. In this case, append
  10.357          // right hand side as last argument of the access method.
  10.358 -        if (tree.lhs.getTag() == JCTree.APPLY) {
  10.359 +        if (tree.lhs.hasTag(APPLY)) {
  10.360              JCMethodInvocation app = (JCMethodInvocation)tree.lhs;
  10.361              app.args = List.of(tree.rhs).prependList(app.args);
  10.362              result = app;
  10.363 @@ -2988,7 +3025,7 @@
  10.364              // (but without recomputing x)
  10.365              JCTree newTree = abstractLval(tree.lhs, new TreeBuilder() {
  10.366                      public JCTree build(final JCTree lhs) {
  10.367 -                        int newTag = tree.getTag() - JCTree.ASGOffset;
  10.368 +                        JCTree.Tag newTag = tree.getTag().noAssignOp();
  10.369                          // Erasure (TransTypes) can change the type of
  10.370                          // tree.lhs.  However, we can still get the
  10.371                          // unerased type of tree.lhs as it is stored
  10.372 @@ -3018,7 +3055,7 @@
  10.373          // If translated left hand side is an Apply, we are
  10.374          // seeing an access method invocation. In this case, append
  10.375          // right hand side as last argument of the access method.
  10.376 -        if (tree.lhs.getTag() == JCTree.APPLY) {
  10.377 +        if (tree.lhs.hasTag(APPLY)) {
  10.378              JCMethodInvocation app = (JCMethodInvocation)tree.lhs;
  10.379              // if operation is a += on strings,
  10.380              // make sure to convert argument to string
  10.381 @@ -3038,13 +3075,13 @@
  10.382          // or
  10.383          // translate to tmp1=lval(e); tmp2=tmp1; (typeof tree)tmp1 OP 1; tmp2
  10.384          // where OP is += or -=
  10.385 -        final boolean cast = TreeInfo.skipParens(tree.arg).getTag() == JCTree.TYPECAST;
  10.386 +        final boolean cast = TreeInfo.skipParens(tree.arg).hasTag(TYPECAST);
  10.387          return abstractLval(tree.arg, new TreeBuilder() {
  10.388                  public JCTree build(final JCTree tmp1) {
  10.389                      return abstractRval(tmp1, tree.arg.type, new TreeBuilder() {
  10.390                              public JCTree build(final JCTree tmp2) {
  10.391 -                                int opcode = (tree.getTag() == JCTree.POSTINC)
  10.392 -                                    ? JCTree.PLUS_ASG : JCTree.MINUS_ASG;
  10.393 +                                JCTree.Tag opcode = (tree.hasTag(POSTINC))
  10.394 +                                    ? PLUS_ASG : MINUS_ASG;
  10.395                                  JCTree lhs = cast
  10.396                                      ? make.TypeCast(tree.arg.type, (JCExpression)tmp1)
  10.397                                      : tmp1;
  10.398 @@ -3059,25 +3096,24 @@
  10.399      }
  10.400  
  10.401      public void visitUnary(JCUnary tree) {
  10.402 -        boolean isUpdateOperator =
  10.403 -            JCTree.PREINC <= tree.getTag() && tree.getTag() <= JCTree.POSTDEC;
  10.404 +        boolean isUpdateOperator = tree.getTag().isIncOrDecUnaryOp();
  10.405          if (isUpdateOperator && !tree.arg.type.isPrimitive()) {
  10.406              switch(tree.getTag()) {
  10.407 -            case JCTree.PREINC:            // ++ e
  10.408 +            case PREINC:            // ++ e
  10.409                      // translate to e += 1
  10.410 -            case JCTree.PREDEC:            // -- e
  10.411 +            case PREDEC:            // -- e
  10.412                      // translate to e -= 1
  10.413                  {
  10.414 -                    int opcode = (tree.getTag() == JCTree.PREINC)
  10.415 -                        ? JCTree.PLUS_ASG : JCTree.MINUS_ASG;
  10.416 +                    JCTree.Tag opcode = (tree.hasTag(PREINC))
  10.417 +                        ? PLUS_ASG : MINUS_ASG;
  10.418                      JCAssignOp newTree = makeAssignop(opcode,
  10.419                                                      tree.arg,
  10.420                                                      make.Literal(1));
  10.421                      result = translate(newTree, tree.type);
  10.422                      return;
  10.423                  }
  10.424 -            case JCTree.POSTINC:           // e ++
  10.425 -            case JCTree.POSTDEC:           // e --
  10.426 +            case POSTINC:           // e ++
  10.427 +            case POSTDEC:           // e --
  10.428                  {
  10.429                      result = translate(lowerBoxedPostop(tree), tree.type);
  10.430                      return;
  10.431 @@ -3088,14 +3124,14 @@
  10.432  
  10.433          tree.arg = boxIfNeeded(translate(tree.arg, tree), tree.type);
  10.434  
  10.435 -        if (tree.getTag() == JCTree.NOT && tree.arg.type.constValue() != null) {
  10.436 +        if (tree.hasTag(NOT) && tree.arg.type.constValue() != null) {
  10.437              tree.type = cfolder.fold1(bool_not, tree.arg.type);
  10.438          }
  10.439  
  10.440          // If translated left hand side is an Apply, we are
  10.441          // seeing an access method invocation. In this case, return
  10.442          // that access method invocation as result.
  10.443 -        if (isUpdateOperator && tree.arg.getTag() == JCTree.APPLY) {
  10.444 +        if (isUpdateOperator && tree.arg.hasTag(APPLY)) {
  10.445              result = tree.arg;
  10.446          } else {
  10.447              result = tree;
  10.448 @@ -3106,7 +3142,7 @@
  10.449          List<Type> formals = tree.operator.type.getParameterTypes();
  10.450          JCTree lhs = tree.lhs = translate(tree.lhs, formals.head);
  10.451          switch (tree.getTag()) {
  10.452 -        case JCTree.OR:
  10.453 +        case OR:
  10.454              if (lhs.type.isTrue()) {
  10.455                  result = lhs;
  10.456                  return;
  10.457 @@ -3116,7 +3152,7 @@
  10.458                  return;
  10.459              }
  10.460              break;
  10.461 -        case JCTree.AND:
  10.462 +        case AND:
  10.463              if (lhs.type.isFalse()) {
  10.464                  result = lhs;
  10.465                  return;
  10.466 @@ -3186,9 +3222,9 @@
  10.467              indexdef.init.type = indexdef.type = syms.intType.constType(0);
  10.468  
  10.469              List<JCStatement> loopinit = List.of(arraycachedef, lencachedef, indexdef);
  10.470 -            JCBinary cond = makeBinary(JCTree.LT, make.Ident(index), make.Ident(lencache));
  10.471 -
  10.472 -            JCExpressionStatement step = make.Exec(makeUnary(JCTree.PREINC, make.Ident(index)));
  10.473 +            JCBinary cond = makeBinary(LT, make.Ident(index), make.Ident(lencache));
  10.474 +
  10.475 +            JCExpressionStatement step = make.Exec(makeUnary(PREINC, make.Ident(index)));
  10.476  
  10.477              Type elemtype = types.elemtype(tree.expr.type);
  10.478              JCExpression loopvarinit = make.Indexed(make.Ident(arraycache),
  10.479 @@ -3592,7 +3628,7 @@
  10.480          // need to special case-access of the form C.super.x
  10.481          // these will always need an access method.
  10.482          boolean qualifiedSuperAccess =
  10.483 -            tree.selected.getTag() == JCTree.SELECT &&
  10.484 +            tree.selected.hasTag(SELECT) &&
  10.485              TreeInfo.name(tree.selected) == names._super;
  10.486          tree.selected = translate(tree.selected);
  10.487          if (tree.name == names._class)
  10.488 @@ -3642,7 +3678,7 @@
  10.489              endPositions = env.toplevel.endPositions;
  10.490              currentClass = null;
  10.491              currentMethodDef = null;
  10.492 -            outermostClassDef = (cdef.getTag() == JCTree.CLASSDEF) ? (JCClassDecl)cdef : null;
  10.493 +            outermostClassDef = (cdef.hasTag(CLASSDEF)) ? (JCClassDecl)cdef : null;
  10.494              outermostMemberDef = null;
  10.495              this.translated = new ListBuffer<JCTree>();
  10.496              classdefs = new HashMap<ClassSymbol,JCClassDecl>();
  10.497 @@ -3838,7 +3874,7 @@
  10.498  
  10.499          JCIdent fLocUsageId = make.Ident(otherVarSym);
  10.500          JCExpression sel = make.Select(fLocUsageId, ordinalSymbol);
  10.501 -        JCBinary bin = makeBinary(JCTree.MINUS, id1, sel);
  10.502 +        JCBinary bin = makeBinary(MINUS, id1, sel);
  10.503          JCReturn ret = make.Return(bin);
  10.504          blockStatements.append(ret);
  10.505          JCMethodDecl compareToMethod = make.MethodDef((MethodSymbol)compareToSym,
    11.1 --- a/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Sat Nov 05 00:02:33 2011 -0700
    11.2 +++ b/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Tue Nov 08 11:51:05 2011 -0800
    11.3 @@ -40,8 +40,10 @@
    11.4  import com.sun.tools.javac.tree.JCTree.*;
    11.5  
    11.6  import static com.sun.tools.javac.code.Flags.*;
    11.7 +import static com.sun.tools.javac.code.Flags.ANNOTATION;
    11.8  import static com.sun.tools.javac.code.Kinds.*;
    11.9  import static com.sun.tools.javac.code.TypeTags.*;
   11.10 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   11.11  import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
   11.12  
   11.13  /** This is the second phase of Enter, in which classes are completed
   11.14 @@ -644,7 +646,7 @@
   11.15          tree.sym = v;
   11.16          if (tree.init != null) {
   11.17              v.flags_field |= HASINIT;
   11.18 -            if ((v.flags_field & FINAL) != 0 && tree.init.getTag() != JCTree.NEWCLASS) {
   11.19 +            if ((v.flags_field & FINAL) != 0 && !tree.init.hasTag(NEWCLASS)) {
   11.20                  Env<AttrContext> initEnv = getInitEnv(tree, env);
   11.21                  initEnv.info.enclVar = v;
   11.22                  v.setLazyConstValue(initEnv(tree, initEnv), attr, tree.init);
   11.23 @@ -868,7 +870,7 @@
   11.24              // If this is a toplevel-class, make sure any preceding import
   11.25              // clauses have been seen.
   11.26              if (c.owner.kind == PCK) {
   11.27 -                memberEnter(env.toplevel, env.enclosing(JCTree.TOPLEVEL));
   11.28 +                memberEnter(env.toplevel, env.enclosing(TOPLEVEL));
   11.29                  todo.append(env);
   11.30              }
   11.31  
    12.1 --- a/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Sat Nov 05 00:02:33 2011 -0700
    12.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Resolve.java	Tue Nov 08 11:51:05 2011 -0800
    12.3 @@ -49,9 +49,12 @@
    12.4  import javax.lang.model.element.ElementVisitor;
    12.5  
    12.6  import static com.sun.tools.javac.code.Flags.*;
    12.7 +import static com.sun.tools.javac.code.Flags.BLOCK;
    12.8  import static com.sun.tools.javac.code.Kinds.*;
    12.9 +import static com.sun.tools.javac.code.Kinds.ERRONEOUS;
   12.10  import static com.sun.tools.javac.code.TypeTags.*;
   12.11  import static com.sun.tools.javac.comp.Resolve.MethodResolutionPhase.*;
   12.12 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   12.13  
   12.14  /** Helper class for name resolution, used mostly by the attribution phase.
   12.15   *
   12.16 @@ -1269,7 +1272,7 @@
   12.17                  staticOnly = true;
   12.18          }
   12.19  
   12.20 -        if (env.tree.getTag() != JCTree.IMPORT) {
   12.21 +        if (!env.tree.hasTag(IMPORT)) {
   12.22              sym = findGlobalType(env, env.toplevel.namedImportScope, name);
   12.23              if (sym.exists()) return sym;
   12.24              else if (sym.kind < bestSoFar.kind) bestSoFar = sym;
   12.25 @@ -1796,7 +1799,7 @@
   12.26       *  @param env       The environment current at the operation.
   12.27       *  @param argtypes  The types of the operands.
   12.28       */
   12.29 -    Symbol resolveOperator(DiagnosticPosition pos, int optag,
   12.30 +    Symbol resolveOperator(DiagnosticPosition pos, JCTree.Tag optag,
   12.31                             Env<AttrContext> env, List<Type> argtypes) {
   12.32          startResolution();
   12.33          Name name = treeinfo.operatorName(optag);
   12.34 @@ -1815,7 +1818,7 @@
   12.35       *  @param env       The environment current at the operation.
   12.36       *  @param arg       The type of the operand.
   12.37       */
   12.38 -    Symbol resolveUnaryOperator(DiagnosticPosition pos, int optag, Env<AttrContext> env, Type arg) {
   12.39 +    Symbol resolveUnaryOperator(DiagnosticPosition pos, JCTree.Tag optag, Env<AttrContext> env, Type arg) {
   12.40          return resolveOperator(pos, optag, env, List.of(arg));
   12.41      }
   12.42  
   12.43 @@ -1827,7 +1830,7 @@
   12.44       *  @param right     The types of the right operand.
   12.45       */
   12.46      Symbol resolveBinaryOperator(DiagnosticPosition pos,
   12.47 -                                 int optag,
   12.48 +                                 JCTree.Tag optag,
   12.49                                   Env<AttrContext> env,
   12.50                                   Type left,
   12.51                                   Type right) {
    13.1 --- a/src/share/classes/com/sun/tools/javac/jvm/CRTable.java	Sat Nov 05 00:02:33 2011 -0700
    13.2 +++ b/src/share/classes/com/sun/tools/javac/jvm/CRTable.java	Tue Nov 08 11:51:05 2011 -0800
    13.3 @@ -532,7 +532,7 @@
    13.4           */
    13.5          public int endPos(JCTree tree) {
    13.6              if (tree == null) return Position.NOPOS;
    13.7 -            if (tree.getTag() == JCTree.BLOCK)
    13.8 +            if (tree.hasTag(JCTree.Tag.BLOCK))
    13.9                  return ((JCBlock) tree).endpos;
   13.10              Integer endpos = endPositions.get(tree);
   13.11              if (endpos != null)
    14.1 --- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Sat Nov 05 00:02:33 2011 -0700
    14.2 +++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Tue Nov 08 11:51:05 2011 -0800
    14.3 @@ -47,6 +47,8 @@
    14.4  import static com.sun.tools.javac.jvm.ByteCodes.*;
    14.5  import static com.sun.tools.javac.jvm.CRTFlags.*;
    14.6  import static com.sun.tools.javac.main.OptionName.*;
    14.7 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    14.8 +import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK;
    14.9  
   14.10  /** This pass maps flat Java (i.e. without inner classes) to bytecodes.
   14.11   *
   14.12 @@ -433,7 +435,7 @@
   14.13       */
   14.14      boolean hasFinally(JCTree target, Env<GenContext> env) {
   14.15          while (env.tree != target) {
   14.16 -            if (env.tree.getTag() == JCTree.TRY && env.info.finalize.hasFinalizer())
   14.17 +            if (env.tree.hasTag(TRY) && env.info.finalize.hasFinalizer())
   14.18                  return true;
   14.19              env = env.next;
   14.20          }
   14.21 @@ -460,17 +462,17 @@
   14.22          for (List<JCTree> l = defs; l.nonEmpty(); l = l.tail) {
   14.23              JCTree def = l.head;
   14.24              switch (def.getTag()) {
   14.25 -            case JCTree.BLOCK:
   14.26 +            case BLOCK:
   14.27                  JCBlock block = (JCBlock)def;
   14.28                  if ((block.flags & STATIC) != 0)
   14.29                      clinitCode.append(block);
   14.30                  else
   14.31                      initCode.append(block);
   14.32                  break;
   14.33 -            case JCTree.METHODDEF:
   14.34 +            case METHODDEF:
   14.35                  methodDefs.append(def);
   14.36                  break;
   14.37 -            case JCTree.VARDEF:
   14.38 +            case VARDEF:
   14.39                  JCVariableDecl vdef = (JCVariableDecl) def;
   14.40                  VarSymbol sym = vdef.sym;
   14.41                  checkDimension(vdef.pos(), sym.type);
   14.42 @@ -707,7 +709,7 @@
   14.43          }
   14.44          int startpc = code.curPc();
   14.45          genStat(tree, env);
   14.46 -        if (tree.getTag() == JCTree.BLOCK) crtFlags |= CRT_BLOCK;
   14.47 +        if (tree.hasTag(BLOCK)) crtFlags |= CRT_BLOCK;
   14.48          code.crt.put(tree, crtFlags, startpc, code.curPc());
   14.49      }
   14.50  
   14.51 @@ -717,7 +719,7 @@
   14.52          if (code.isAlive()) {
   14.53              code.statBegin(tree.pos);
   14.54              genDef(tree, env);
   14.55 -        } else if (env.info.isSwitch && tree.getTag() == JCTree.VARDEF) {
   14.56 +        } else if (env.info.isSwitch && tree.hasTag(VARDEF)) {
   14.57              // variables whose declarations are in a switch
   14.58              // can be used even if the decl is unreachable.
   14.59              code.newLocal(((JCVariableDecl) tree).sym);
   14.60 @@ -784,7 +786,7 @@
   14.61       */
   14.62      public CondItem genCond(JCTree _tree, boolean markBranches) {
   14.63          JCTree inner_tree = TreeInfo.skipParens(_tree);
   14.64 -        if (inner_tree.getTag() == JCTree.CONDEXPR) {
   14.65 +        if (inner_tree.hasTag(CONDEXPR)) {
   14.66              JCConditional tree = (JCConditional)inner_tree;
   14.67              CondItem cond = genCond(tree.cond, CRT_FLOW_CONTROLLER);
   14.68              if (cond.isTrue()) {
   14.69 @@ -1033,7 +1035,7 @@
   14.70          Env<GenContext> localEnv = env.dup(tree, new GenContext());
   14.71          genStats(tree.stats, localEnv);
   14.72          // End the scope of all block-local variables in variable info.
   14.73 -        if (env.tree.getTag() != JCTree.METHODDEF) {
   14.74 +        if (!env.tree.hasTag(METHODDEF)) {
   14.75              code.statBegin(tree.endpos);
   14.76              code.endScopes(limit);
   14.77              code.pendingStatPos = Position.NOPOS;
   14.78 @@ -1628,11 +1630,11 @@
   14.79          // Optimize x++ to ++x and x-- to --x.
   14.80          JCExpression e = tree.expr;
   14.81          switch (e.getTag()) {
   14.82 -            case JCTree.POSTINC:
   14.83 -                ((JCUnary) e).setTag(JCTree.PREINC);
   14.84 +            case POSTINC:
   14.85 +                ((JCUnary) e).setTag(PREINC);
   14.86                  break;
   14.87 -            case JCTree.POSTDEC:
   14.88 -                ((JCUnary) e).setTag(JCTree.PREDEC);
   14.89 +            case POSTDEC:
   14.90 +                ((JCUnary) e).setTag(PREDEC);
   14.91                  break;
   14.92          }
   14.93          genExpr(tree.expr, tree.expr.type).drop();
   14.94 @@ -1819,13 +1821,13 @@
   14.95              // If we have an increment of -32768 to +32767 of a local
   14.96              // int variable we can use an incr instruction instead of
   14.97              // proceeding further.
   14.98 -            if ((tree.getTag() == JCTree.PLUS_ASG || tree.getTag() == JCTree.MINUS_ASG) &&
   14.99 +            if ((tree.hasTag(PLUS_ASG) || tree.hasTag(MINUS_ASG)) &&
  14.100                  l instanceof LocalItem &&
  14.101                  tree.lhs.type.tag <= INT &&
  14.102                  tree.rhs.type.tag <= INT &&
  14.103                  tree.rhs.type.constValue() != null) {
  14.104                  int ival = ((Number) tree.rhs.type.constValue()).intValue();
  14.105 -                if (tree.getTag() == JCTree.MINUS_ASG) ival = -ival;
  14.106 +                if (tree.hasTag(MINUS_ASG)) ival = -ival;
  14.107                  ((LocalItem)l).incr(ival);
  14.108                  result = l;
  14.109                  return;
  14.110 @@ -1841,29 +1843,29 @@
  14.111  
  14.112      public void visitUnary(JCUnary tree) {
  14.113          OperatorSymbol operator = (OperatorSymbol)tree.operator;
  14.114 -        if (tree.getTag() == JCTree.NOT) {
  14.115 +        if (tree.hasTag(NOT)) {
  14.116              CondItem od = genCond(tree.arg, false);
  14.117              result = od.negate();
  14.118          } else {
  14.119              Item od = genExpr(tree.arg, operator.type.getParameterTypes().head);
  14.120              switch (tree.getTag()) {
  14.121 -            case JCTree.POS:
  14.122 +            case POS:
  14.123                  result = od.load();
  14.124                  break;
  14.125 -            case JCTree.NEG:
  14.126 +            case NEG:
  14.127                  result = od.load();
  14.128                  code.emitop0(operator.opcode);
  14.129                  break;
  14.130 -            case JCTree.COMPL:
  14.131 +            case COMPL:
  14.132                  result = od.load();
  14.133                  emitMinusOne(od.typecode);
  14.134                  code.emitop0(operator.opcode);
  14.135                  break;
  14.136 -            case JCTree.PREINC: case JCTree.PREDEC:
  14.137 +            case PREINC: case PREDEC:
  14.138                  od.duplicate();
  14.139                  if (od instanceof LocalItem &&
  14.140                      (operator.opcode == iadd || operator.opcode == isub)) {
  14.141 -                    ((LocalItem)od).incr(tree.getTag() == JCTree.PREINC ? 1 : -1);
  14.142 +                    ((LocalItem)od).incr(tree.hasTag(PREINC) ? 1 : -1);
  14.143                      result = od;
  14.144                  } else {
  14.145                      od.load();
  14.146 @@ -1877,12 +1879,12 @@
  14.147                      result = items.makeAssignItem(od);
  14.148                  }
  14.149                  break;
  14.150 -            case JCTree.POSTINC: case JCTree.POSTDEC:
  14.151 +            case POSTINC: case POSTDEC:
  14.152                  od.duplicate();
  14.153                  if (od instanceof LocalItem &&
  14.154                      (operator.opcode == iadd || operator.opcode == isub)) {
  14.155                      Item res = od.load();
  14.156 -                    ((LocalItem)od).incr(tree.getTag() == JCTree.POSTINC ? 1 : -1);
  14.157 +                    ((LocalItem)od).incr(tree.hasTag(POSTINC) ? 1 : -1);
  14.158                      result = res;
  14.159                  } else {
  14.160                      Item res = od.load();
  14.161 @@ -1898,7 +1900,7 @@
  14.162                      result = res;
  14.163                  }
  14.164                  break;
  14.165 -            case JCTree.NULLCHK:
  14.166 +            case NULLCHK:
  14.167                  result = od.load();
  14.168                  code.emitop0(dup);
  14.169                  genNullCheck(tree.pos());
  14.170 @@ -1926,7 +1928,7 @@
  14.171              // Convert buffer to string.
  14.172              bufferToString(tree.pos());
  14.173              result = items.makeStackItem(syms.stringType);
  14.174 -        } else if (tree.getTag() == JCTree.AND) {
  14.175 +        } else if (tree.hasTag(AND)) {
  14.176              CondItem lcond = genCond(tree.lhs, CRT_FLOW_CONTROLLER);
  14.177              if (!lcond.isFalse()) {
  14.178                  Chain falseJumps = lcond.jumpFalse();
  14.179 @@ -1940,7 +1942,7 @@
  14.180              } else {
  14.181                  result = lcond;
  14.182              }
  14.183 -        } else if (tree.getTag() == JCTree.OR) {
  14.184 +        } else if (tree.hasTag(OR)) {
  14.185              CondItem lcond = genCond(tree.lhs, CRT_FLOW_CONTROLLER);
  14.186              if (!lcond.isTrue()) {
  14.187                  Chain trueJumps = lcond.jumpTrue();
  14.188 @@ -1997,7 +1999,7 @@
  14.189           */
  14.190          void appendStrings(JCTree tree) {
  14.191              tree = TreeInfo.skipParens(tree);
  14.192 -            if (tree.getTag() == JCTree.PLUS && tree.type.constValue() == null) {
  14.193 +            if (tree.hasTag(PLUS) && tree.type.constValue() == null) {
  14.194                  JCBinary op = (JCBinary) tree;
  14.195                  if (op.operator.kind == MTH &&
  14.196                      ((OperatorSymbol) op.operator).opcode == string_add) {
  14.197 @@ -2240,7 +2242,7 @@
  14.198              if (nerrs != 0) {
  14.199                  // if errors, discard code
  14.200                  for (List<JCTree> l = cdef.defs; l.nonEmpty(); l = l.tail) {
  14.201 -                    if (l.head.getTag() == JCTree.METHODDEF)
  14.202 +                    if (l.head.hasTag(METHODDEF))
  14.203                          ((JCMethodDecl) l.head).sym.code = null;
  14.204                  }
  14.205              }
    15.1 --- a/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Sat Nov 05 00:02:33 2011 -0700
    15.2 +++ b/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Tue Nov 08 11:51:05 2011 -0800
    15.3 @@ -1506,20 +1506,20 @@
    15.4                      for (List<JCTree> it = tree.defs; it.tail != null; it = it.tail) {
    15.5                          JCTree t = it.head;
    15.6                          switch (t.getTag()) {
    15.7 -                        case JCTree.CLASSDEF:
    15.8 +                        case CLASSDEF:
    15.9                              if (isInterface ||
   15.10                                  (((JCClassDecl) t).mods.flags & (Flags.PROTECTED|Flags.PUBLIC)) != 0 ||
   15.11                                  (((JCClassDecl) t).mods.flags & (Flags.PRIVATE)) == 0 && ((JCClassDecl) t).sym.packge().getQualifiedName() == names.java_lang)
   15.12                                  newdefs.append(t);
   15.13                              break;
   15.14 -                        case JCTree.METHODDEF:
   15.15 +                        case METHODDEF:
   15.16                              if (isInterface ||
   15.17                                  (((JCMethodDecl) t).mods.flags & (Flags.PROTECTED|Flags.PUBLIC)) != 0 ||
   15.18                                  ((JCMethodDecl) t).sym.name == names.init ||
   15.19                                  (((JCMethodDecl) t).mods.flags & (Flags.PRIVATE)) == 0 && ((JCMethodDecl) t).sym.packge().getQualifiedName() == names.java_lang)
   15.20                                  newdefs.append(t);
   15.21                              break;
   15.22 -                        case JCTree.VARDEF:
   15.23 +                        case VARDEF:
   15.24                              if (isInterface || (((JCVariableDecl) t).mods.flags & (Flags.PROTECTED|Flags.PUBLIC)) != 0 ||
   15.25                                  (((JCVariableDecl) t).mods.flags & (Flags.PRIVATE)) == 0 && ((JCVariableDecl) t).sym.packge().getQualifiedName() == names.java_lang)
   15.26                                  newdefs.append(t);
    16.1 --- a/src/share/classes/com/sun/tools/javac/model/JavacElements.java	Sat Nov 05 00:02:33 2011 -0700
    16.2 +++ b/src/share/classes/com/sun/tools/javac/model/JavacElements.java	Tue Nov 08 11:51:05 2011 -0800
    16.3 @@ -1,5 +1,5 @@
    16.4  /*
    16.5 - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
    16.6 + * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
    16.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    16.8   *
    16.9   * This code is free software; you can redistribute it and/or modify it
   16.10 @@ -48,6 +48,7 @@
   16.11  import com.sun.tools.javac.util.*;
   16.12  import com.sun.tools.javac.util.Name;
   16.13  
   16.14 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   16.15  import static javax.lang.model.util.ElementFilter.methodsIn;
   16.16  
   16.17  /**
   16.18 @@ -288,7 +289,7 @@
   16.19                  }
   16.20              }
   16.21              public void visitArray(Attribute.Array array) {
   16.22 -                if (tree.getTag() == JCTree.NEWARRAY &&
   16.23 +                if (tree.hasTag(NEWARRAY) &&
   16.24                          types.elemtype(array.type).tsym == findme.type.tsym) {
   16.25                      List<JCExpression> elems = ((JCNewArray) tree).elems;
   16.26                      for (Attribute value : array.values) {
   16.27 @@ -327,7 +328,7 @@
   16.28                      scan(t.args);
   16.29              }
   16.30              public void visitAssign(JCAssign t) {
   16.31 -                if (t.lhs.getTag() == JCTree.IDENT) {
   16.32 +                if (t.lhs.hasTag(IDENT)) {
   16.33                      JCIdent ident = (JCIdent) t.lhs;
   16.34                      if (ident.sym == sym)
   16.35                          result = t.rhs;
    17.1 --- a/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Sat Nov 05 00:02:33 2011 -0700
    17.2 +++ b/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Tue Nov 08 11:51:05 2011 -0800
    17.3 @@ -37,8 +37,16 @@
    17.4  import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
    17.5  import com.sun.tools.javac.util.List;
    17.6  
    17.7 +import static com.sun.tools.javac.parser.Tokens.TokenKind.*;
    17.8 +import static com.sun.tools.javac.parser.Tokens.TokenKind.ASSERT;
    17.9 +import static com.sun.tools.javac.parser.Tokens.TokenKind.CASE;
   17.10 +import static com.sun.tools.javac.parser.Tokens.TokenKind.CATCH;
   17.11 +import static com.sun.tools.javac.parser.Tokens.TokenKind.EQ;
   17.12 +import static com.sun.tools.javac.parser.Tokens.TokenKind.GT;
   17.13 +import static com.sun.tools.javac.parser.Tokens.TokenKind.IMPORT;
   17.14 +import static com.sun.tools.javac.parser.Tokens.TokenKind.LT;
   17.15  import static com.sun.tools.javac.util.ListBuffer.lb;
   17.16 -import static com.sun.tools.javac.parser.Tokens.TokenKind.*;
   17.17 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   17.18  
   17.19  /** The parser maps a token sequence into an abstract syntax
   17.20   *  tree. It operates by recursive descent, with code derived
   17.21 @@ -758,7 +766,7 @@
   17.22          Assert.check(top == 0);
   17.23          t = odStack[0];
   17.24  
   17.25 -        if (t.getTag() == JCTree.PLUS) {
   17.26 +        if (t.hasTag(JCTree.Tag.PLUS)) {
   17.27              StringBuffer buf = foldStrings(t);
   17.28              if (buf != null) {
   17.29                  t = toP(F.at(startPos).Literal(TypeTags.CLASS, buf.toString()));
   17.30 @@ -791,7 +799,7 @@
   17.31                  return null;
   17.32              List<String> buf = List.nil();
   17.33              while (true) {
   17.34 -                if (tree.getTag() == JCTree.LITERAL) {
   17.35 +                if (tree.hasTag(LITERAL)) {
   17.36                      JCLiteral lit = (JCLiteral) tree;
   17.37                      if (lit.typetag == TypeTags.CLASS) {
   17.38                          StringBuffer sbuf =
   17.39 @@ -802,9 +810,9 @@
   17.40                          }
   17.41                          return sbuf;
   17.42                      }
   17.43 -                } else if (tree.getTag() == JCTree.PLUS) {
   17.44 +                } else if (tree.hasTag(JCTree.Tag.PLUS)) {
   17.45                      JCBinary op = (JCBinary)tree;
   17.46 -                    if (op.rhs.getTag() == JCTree.LITERAL) {
   17.47 +                    if (op.rhs.hasTag(LITERAL)) {
   17.48                          JCLiteral lit = (JCLiteral) op.rhs;
   17.49                          if (lit.typetag == TypeTags.CLASS) {
   17.50                              buf = buf.prepend((String) lit.value);
   17.51 @@ -900,7 +908,7 @@
   17.52                  t = term3();
   17.53                  if ((mode & TYPE) != 0 && token.kind == LT) {
   17.54                      // Could be a cast to a parameterized type
   17.55 -                    int op = JCTree.LT;
   17.56 +                    JCTree.Tag op = JCTree.Tag.LT;
   17.57                      int pos1 = token.pos;
   17.58                      nextToken();
   17.59                      mode &= (EXPR | TYPE);
   17.60 @@ -1154,7 +1162,7 @@
   17.61          while ((token.kind == PLUSPLUS || token.kind == SUBSUB) && (mode & EXPR) != 0) {
   17.62              mode = EXPR;
   17.63              t = to(F.at(token.pos).Unary(
   17.64 -                  token.kind == PLUSPLUS ? JCTree.POSTINC : JCTree.POSTDEC, t));
   17.65 +                  token.kind == PLUSPLUS ? POSTINC : POSTDEC, t));
   17.66              nextToken();
   17.67          }
   17.68          return toP(t);
   17.69 @@ -1627,7 +1635,7 @@
   17.70              default:
   17.71                  Token prevToken = token;
   17.72                  JCExpression t = term(EXPR | TYPE);
   17.73 -                if (token.kind == COLON && t.getTag() == JCTree.IDENT) {
   17.74 +                if (token.kind == COLON && t.hasTag(IDENT)) {
   17.75                      nextToken();
   17.76                      JCStatement stat = parseStatement();
   17.77                      stats.append(F.at(pos).Labelled(prevToken.name(), stat));
   17.78 @@ -1702,7 +1710,7 @@
   17.79              accept(LPAREN);
   17.80              List<JCStatement> inits = token.kind == SEMI ? List.<JCStatement>nil() : forInit();
   17.81              if (inits.length() == 1 &&
   17.82 -                inits.head.getTag() == JCTree.VARDEF &&
   17.83 +                inits.head.hasTag(VARDEF) &&
   17.84                  ((JCVariableDecl) inits.head).init == null &&
   17.85                  token.kind == COLON) {
   17.86                  checkForeach();
   17.87 @@ -1835,7 +1843,7 @@
   17.88          default:
   17.89              Token prevToken = token;
   17.90              JCExpression expr = parseExpression();
   17.91 -            if (token.kind == COLON && expr.getTag() == JCTree.IDENT) {
   17.92 +            if (token.kind == COLON && expr.hasTag(IDENT)) {
   17.93                  nextToken();
   17.94                  JCStatement stat = parseStatement();
   17.95                  return F.at(pos).Labelled(prevToken.name(), stat);
   17.96 @@ -2088,7 +2096,7 @@
   17.97          if (token.kind == IDENTIFIER) {
   17.98              mode = EXPR;
   17.99              JCExpression t1 = term1();
  17.100 -            if (t1.getTag() == JCTree.IDENT && token.kind == EQ) {
  17.101 +            if (t1.hasTag(IDENT) && token.kind == EQ) {
  17.102                  int pos = token.pos;
  17.103                  accept(EQ);
  17.104                  JCExpression v = annotationValue();
  17.105 @@ -2618,7 +2626,7 @@
  17.106                  } else {
  17.107                      type = parseType();
  17.108                  }
  17.109 -                if (token.kind == LPAREN && !isInterface && type.getTag() == JCTree.IDENT) {
  17.110 +                if (token.kind == LPAREN && !isInterface && type.hasTag(IDENT)) {
  17.111                      if (isInterface || tk.name() != className)
  17.112                          error(pos, "invalid.meth.decl.ret.type.req");
  17.113                      return List.of(methodDeclaratorRest(
  17.114 @@ -2815,15 +2823,15 @@
  17.115       */
  17.116      protected JCExpression checkExprStat(JCExpression t) {
  17.117          switch(t.getTag()) {
  17.118 -        case JCTree.PREINC: case JCTree.PREDEC:
  17.119 -        case JCTree.POSTINC: case JCTree.POSTDEC:
  17.120 -        case JCTree.ASSIGN:
  17.121 -        case JCTree.BITOR_ASG: case JCTree.BITXOR_ASG: case JCTree.BITAND_ASG:
  17.122 -        case JCTree.SL_ASG: case JCTree.SR_ASG: case JCTree.USR_ASG:
  17.123 -        case JCTree.PLUS_ASG: case JCTree.MINUS_ASG:
  17.124 -        case JCTree.MUL_ASG: case JCTree.DIV_ASG: case JCTree.MOD_ASG:
  17.125 -        case JCTree.APPLY: case JCTree.NEWCLASS:
  17.126 -        case JCTree.ERRONEOUS:
  17.127 +        case PREINC: case PREDEC:
  17.128 +        case POSTINC: case POSTDEC:
  17.129 +        case ASSIGN:
  17.130 +        case BITOR_ASG: case BITXOR_ASG: case BITAND_ASG:
  17.131 +        case SL_ASG: case SR_ASG: case USR_ASG:
  17.132 +        case PLUS_ASG: case MINUS_ASG:
  17.133 +        case MUL_ASG: case DIV_ASG: case MOD_ASG:
  17.134 +        case APPLY: case NEWCLASS:
  17.135 +        case ERRONEOUS:
  17.136              return t;
  17.137          default:
  17.138              JCExpression ret = F.at(t.pos).Erroneous(List.<JCTree>of(t));
  17.139 @@ -2836,8 +2844,8 @@
  17.140       *  -1 if token is not a binary operator. @see TreeInfo.opPrec
  17.141       */
  17.142      static int prec(TokenKind token) {
  17.143 -        int oc = optag(token);
  17.144 -        return (oc >= 0) ? TreeInfo.opPrec(oc) : -1;
  17.145 +        JCTree.Tag oc = optag(token);
  17.146 +        return (oc != NO_TAG) ? TreeInfo.opPrec(oc) : -1;
  17.147      }
  17.148  
  17.149      /**
  17.150 @@ -2853,96 +2861,96 @@
  17.151      }
  17.152  
  17.153      /** Return operation tag of binary operator represented by token,
  17.154 -     *  -1 if token is not a binary operator.
  17.155 +     *  No_TAG if token is not a binary operator.
  17.156       */
  17.157 -    static int optag(TokenKind token) {
  17.158 +    static JCTree.Tag optag(TokenKind token) {
  17.159          switch (token) {
  17.160          case BARBAR:
  17.161 -            return JCTree.OR;
  17.162 +            return OR;
  17.163          case AMPAMP:
  17.164 -            return JCTree.AND;
  17.165 +            return AND;
  17.166          case BAR:
  17.167 -            return JCTree.BITOR;
  17.168 +            return BITOR;
  17.169          case BAREQ:
  17.170 -            return JCTree.BITOR_ASG;
  17.171 +            return BITOR_ASG;
  17.172          case CARET:
  17.173 -            return JCTree.BITXOR;
  17.174 +            return BITXOR;
  17.175          case CARETEQ:
  17.176 -            return JCTree.BITXOR_ASG;
  17.177 +            return BITXOR_ASG;
  17.178          case AMP:
  17.179 -            return JCTree.BITAND;
  17.180 +            return BITAND;
  17.181          case AMPEQ:
  17.182 -            return JCTree.BITAND_ASG;
  17.183 +            return BITAND_ASG;
  17.184          case EQEQ:
  17.185 -            return JCTree.EQ;
  17.186 +            return JCTree.Tag.EQ;
  17.187          case BANGEQ:
  17.188 -            return JCTree.NE;
  17.189 +            return NE;
  17.190          case LT:
  17.191 -            return JCTree.LT;
  17.192 +            return JCTree.Tag.LT;
  17.193          case GT:
  17.194 -            return JCTree.GT;
  17.195 +            return JCTree.Tag.GT;
  17.196          case LTEQ:
  17.197 -            return JCTree.LE;
  17.198 +            return LE;
  17.199          case GTEQ:
  17.200 -            return JCTree.GE;
  17.201 +            return GE;
  17.202          case LTLT:
  17.203 -            return JCTree.SL;
  17.204 +            return SL;
  17.205          case LTLTEQ:
  17.206 -            return JCTree.SL_ASG;
  17.207 +            return SL_ASG;
  17.208          case GTGT:
  17.209 -            return JCTree.SR;
  17.210 +            return SR;
  17.211          case GTGTEQ:
  17.212 -            return JCTree.SR_ASG;
  17.213 +            return SR_ASG;
  17.214          case GTGTGT:
  17.215 -            return JCTree.USR;
  17.216 +            return USR;
  17.217          case GTGTGTEQ:
  17.218 -            return JCTree.USR_ASG;
  17.219 +            return USR_ASG;
  17.220          case PLUS:
  17.221 -            return JCTree.PLUS;
  17.222 +            return JCTree.Tag.PLUS;
  17.223          case PLUSEQ:
  17.224 -            return JCTree.PLUS_ASG;
  17.225 +            return PLUS_ASG;
  17.226          case SUB:
  17.227 -            return JCTree.MINUS;
  17.228 +            return MINUS;
  17.229          case SUBEQ:
  17.230 -            return JCTree.MINUS_ASG;
  17.231 +            return MINUS_ASG;
  17.232          case STAR:
  17.233 -            return JCTree.MUL;
  17.234 +            return MUL;
  17.235          case STAREQ:
  17.236 -            return JCTree.MUL_ASG;
  17.237 +            return MUL_ASG;
  17.238          case SLASH:
  17.239 -            return JCTree.DIV;
  17.240 +            return DIV;
  17.241          case SLASHEQ:
  17.242 -            return JCTree.DIV_ASG;
  17.243 +            return DIV_ASG;
  17.244          case PERCENT:
  17.245 -            return JCTree.MOD;
  17.246 +            return MOD;
  17.247          case PERCENTEQ:
  17.248 -            return JCTree.MOD_ASG;
  17.249 +            return MOD_ASG;
  17.250          case INSTANCEOF:
  17.251 -            return JCTree.TYPETEST;
  17.252 +            return TYPETEST;
  17.253          default:
  17.254 -            return -1;
  17.255 +            return NO_TAG;
  17.256          }
  17.257      }
  17.258  
  17.259      /** Return operation tag of unary operator represented by token,
  17.260 -     *  -1 if token is not a binary operator.
  17.261 +     *  No_TAG if token is not a binary operator.
  17.262       */
  17.263 -    static int unoptag(TokenKind token) {
  17.264 +    static JCTree.Tag unoptag(TokenKind token) {
  17.265          switch (token) {
  17.266          case PLUS:
  17.267 -            return JCTree.POS;
  17.268 +            return POS;
  17.269          case SUB:
  17.270 -            return JCTree.NEG;
  17.271 +            return NEG;
  17.272          case BANG:
  17.273 -            return JCTree.NOT;
  17.274 +            return NOT;
  17.275          case TILDE:
  17.276 -            return JCTree.COMPL;
  17.277 +            return COMPL;
  17.278          case PLUSPLUS:
  17.279 -            return JCTree.PREINC;
  17.280 +            return PREINC;
  17.281          case SUBSUB:
  17.282 -            return JCTree.PREDEC;
  17.283 +            return PREDEC;
  17.284          default:
  17.285 -            return -1;
  17.286 +            return NO_TAG;
  17.287          }
  17.288      }
  17.289  
    18.1 --- a/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Sat Nov 05 00:02:33 2011 -0700
    18.2 +++ b/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java	Tue Nov 08 11:51:05 2011 -0800
    18.3 @@ -1222,7 +1222,7 @@
    18.4          List<ClassSymbol> classes = List.nil();
    18.5          for (JCCompilationUnit unit : units) {
    18.6              for (JCTree node : unit.defs) {
    18.7 -                if (node.getTag() == JCTree.CLASSDEF) {
    18.8 +                if (node.hasTag(JCTree.Tag.CLASSDEF)) {
    18.9                      ClassSymbol sym = ((JCClassDecl) node).sym;
   18.10                      Assert.checkNonNull(sym);
   18.11                      classes = classes.prepend(sym);
    19.1 --- a/src/share/classes/com/sun/tools/javac/tree/JCTree.java	Sat Nov 05 00:02:33 2011 -0700
    19.2 +++ b/src/share/classes/com/sun/tools/javac/tree/JCTree.java	Tue Nov 08 11:51:05 2011 -0800
    19.3 @@ -42,6 +42,7 @@
    19.4  import com.sun.source.tree.*;
    19.5  
    19.6  import static com.sun.tools.javac.code.BoundKind.*;
    19.7 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    19.8  
    19.9  /**
   19.10   * Root class for abstract syntax tree nodes. It provides definitions
   19.11 @@ -79,253 +80,289 @@
   19.12  public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
   19.13  
   19.14      /* Tree tag values, identifying kinds of trees */
   19.15 +    public enum Tag{
   19.16 +        /** For methods that return an invalid tag if a given condition is not met
   19.17 +         */
   19.18 +        NO_TAG,
   19.19  
   19.20 -    /** Toplevel nodes, of type TopLevel, representing entire source files.
   19.21 -     */
   19.22 -    public static final int  TOPLEVEL = 1;
   19.23 +        /** Toplevel nodes, of type TopLevel, representing entire source files.
   19.24 +        */
   19.25 +        TOPLEVEL,
   19.26  
   19.27 -    /** Import clauses, of type Import.
   19.28 -     */
   19.29 -    public static final int IMPORT = TOPLEVEL + 1;
   19.30 +        /** Import clauses, of type Import.
   19.31 +         */
   19.32 +        IMPORT,
   19.33  
   19.34 -    /** Class definitions, of type ClassDef.
   19.35 -     */
   19.36 -    public static final int CLASSDEF = IMPORT + 1;
   19.37 +        /** Class definitions, of type ClassDef.
   19.38 +         */
   19.39 +        CLASSDEF,
   19.40  
   19.41 -    /** Method definitions, of type MethodDef.
   19.42 -     */
   19.43 -    public static final int METHODDEF = CLASSDEF + 1;
   19.44 +        /** Method definitions, of type MethodDef.
   19.45 +         */
   19.46 +        METHODDEF,
   19.47  
   19.48 -    /** Variable definitions, of type VarDef.
   19.49 -     */
   19.50 -    public static final int VARDEF = METHODDEF + 1;
   19.51 +        /** Variable definitions, of type VarDef.
   19.52 +         */
   19.53 +        VARDEF,
   19.54  
   19.55 -    /** The no-op statement ";", of type Skip
   19.56 -     */
   19.57 -    public static final int SKIP = VARDEF + 1;
   19.58 +        /** The no-op statement ";", of type Skip
   19.59 +         */
   19.60 +        SKIP,
   19.61  
   19.62 -    /** Blocks, of type Block.
   19.63 -     */
   19.64 -    public static final int BLOCK = SKIP + 1;
   19.65 +        /** Blocks, of type Block.
   19.66 +         */
   19.67 +        BLOCK,
   19.68  
   19.69 -    /** Do-while loops, of type DoLoop.
   19.70 -     */
   19.71 -    public static final int DOLOOP = BLOCK + 1;
   19.72 +        /** Do-while loops, of type DoLoop.
   19.73 +         */
   19.74 +        DOLOOP,
   19.75  
   19.76 -    /** While-loops, of type WhileLoop.
   19.77 -     */
   19.78 -    public static final int WHILELOOP = DOLOOP + 1;
   19.79 +        /** While-loops, of type WhileLoop.
   19.80 +         */
   19.81 +        WHILELOOP,
   19.82  
   19.83 -    /** For-loops, of type ForLoop.
   19.84 -     */
   19.85 -    public static final int FORLOOP = WHILELOOP + 1;
   19.86 +        /** For-loops, of type ForLoop.
   19.87 +         */
   19.88 +        FORLOOP,
   19.89  
   19.90 -    /** Foreach-loops, of type ForeachLoop.
   19.91 -     */
   19.92 -    public static final int FOREACHLOOP = FORLOOP + 1;
   19.93 +        /** Foreach-loops, of type ForeachLoop.
   19.94 +         */
   19.95 +        FOREACHLOOP,
   19.96  
   19.97 -    /** Labelled statements, of type Labelled.
   19.98 -     */
   19.99 -    public static final int LABELLED = FOREACHLOOP + 1;
  19.100 +        /** Labelled statements, of type Labelled.
  19.101 +         */
  19.102 +        LABELLED,
  19.103  
  19.104 -    /** Switch statements, of type Switch.
  19.105 -     */
  19.106 -    public static final int SWITCH = LABELLED + 1;
  19.107 +        /** Switch statements, of type Switch.
  19.108 +         */
  19.109 +        SWITCH,
  19.110  
  19.111 -    /** Case parts in switch statements, of type Case.
  19.112 -     */
  19.113 -    public static final int CASE = SWITCH + 1;
  19.114 +        /** Case parts in switch statements, of type Case.
  19.115 +         */
  19.116 +        CASE,
  19.117  
  19.118 -    /** Synchronized statements, of type Synchonized.
  19.119 -     */
  19.120 -    public static final int SYNCHRONIZED = CASE + 1;
  19.121 +        /** Synchronized statements, of type Synchonized.
  19.122 +         */
  19.123 +        SYNCHRONIZED,
  19.124  
  19.125 -    /** Try statements, of type Try.
  19.126 -     */
  19.127 -    public static final int TRY = SYNCHRONIZED + 1;
  19.128 +        /** Try statements, of type Try.
  19.129 +         */
  19.130 +        TRY,
  19.131  
  19.132 -    /** Catch clauses in try statements, of type Catch.
  19.133 -     */
  19.134 -    public static final int CATCH = TRY + 1;
  19.135 +        /** Catch clauses in try statements, of type Catch.
  19.136 +         */
  19.137 +        CATCH,
  19.138  
  19.139 -    /** Conditional expressions, of type Conditional.
  19.140 -     */
  19.141 -    public static final int CONDEXPR = CATCH + 1;
  19.142 +        /** Conditional expressions, of type Conditional.
  19.143 +         */
  19.144 +        CONDEXPR,
  19.145  
  19.146 -    /** Conditional statements, of type If.
  19.147 -     */
  19.148 -    public static final int IF = CONDEXPR + 1;
  19.149 +        /** Conditional statements, of type If.
  19.150 +         */
  19.151 +        IF,
  19.152  
  19.153 -    /** Expression statements, of type Exec.
  19.154 -     */
  19.155 -    public static final int EXEC = IF + 1;
  19.156 +        /** Expression statements, of type Exec.
  19.157 +         */
  19.158 +        EXEC,
  19.159  
  19.160 -    /** Break statements, of type Break.
  19.161 -     */
  19.162 -    public static final int BREAK = EXEC + 1;
  19.163 +        /** Break statements, of type Break.
  19.164 +         */
  19.165 +        BREAK,
  19.166  
  19.167 -    /** Continue statements, of type Continue.
  19.168 -     */
  19.169 -    public static final int CONTINUE = BREAK + 1;
  19.170 +        /** Continue statements, of type Continue.
  19.171 +         */
  19.172 +        CONTINUE,
  19.173  
  19.174 -    /** Return statements, of type Return.
  19.175 -     */
  19.176 -    public static final int RETURN = CONTINUE + 1;
  19.177 +        /** Return statements, of type Return.
  19.178 +         */
  19.179 +        RETURN,
  19.180  
  19.181 -    /** Throw statements, of type Throw.
  19.182 -     */
  19.183 -    public static final int THROW = RETURN + 1;
  19.184 +        /** Throw statements, of type Throw.
  19.185 +         */
  19.186 +        THROW,
  19.187  
  19.188 -    /** Assert statements, of type Assert.
  19.189 -     */
  19.190 -    public static final int ASSERT = THROW + 1;
  19.191 +        /** Assert statements, of type Assert.
  19.192 +         */
  19.193 +        ASSERT,
  19.194  
  19.195 -    /** Method invocation expressions, of type Apply.
  19.196 -     */
  19.197 -    public static final int APPLY = ASSERT + 1;
  19.198 +        /** Method invocation expressions, of type Apply.
  19.199 +         */
  19.200 +        APPLY,
  19.201  
  19.202 -    /** Class instance creation expressions, of type NewClass.
  19.203 -     */
  19.204 -    public static final int NEWCLASS = APPLY + 1;
  19.205 +        /** Class instance creation expressions, of type NewClass.
  19.206 +         */
  19.207 +        NEWCLASS,
  19.208  
  19.209 -    /** Array creation expressions, of type NewArray.
  19.210 -     */
  19.211 -    public static final int NEWARRAY = NEWCLASS + 1;
  19.212 +        /** Array creation expressions, of type NewArray.
  19.213 +         */
  19.214 +        NEWARRAY,
  19.215  
  19.216 -    /** Parenthesized subexpressions, of type Parens.
  19.217 -     */
  19.218 -    public static final int PARENS = NEWARRAY + 1;
  19.219 +        /** Parenthesized subexpressions, of type Parens.
  19.220 +         */
  19.221 +        PARENS,
  19.222  
  19.223 -    /** Assignment expressions, of type Assign.
  19.224 -     */
  19.225 -    public static final int ASSIGN = PARENS + 1;
  19.226 +        /** Assignment expressions, of type Assign.
  19.227 +         */
  19.228 +        ASSIGN,
  19.229  
  19.230 -    /** Type cast expressions, of type TypeCast.
  19.231 -     */
  19.232 -    public static final int TYPECAST = ASSIGN + 1;
  19.233 +        /** Type cast expressions, of type TypeCast.
  19.234 +         */
  19.235 +        TYPECAST,
  19.236  
  19.237 -    /** Type test expressions, of type TypeTest.
  19.238 -     */
  19.239 -    public static final int TYPETEST = TYPECAST + 1;
  19.240 +        /** Type test expressions, of type TypeTest.
  19.241 +         */
  19.242 +        TYPETEST,
  19.243  
  19.244 -    /** Indexed array expressions, of type Indexed.
  19.245 -     */
  19.246 -    public static final int INDEXED = TYPETEST + 1;
  19.247 +        /** Indexed array expressions, of type Indexed.
  19.248 +         */
  19.249 +        INDEXED,
  19.250  
  19.251 -    /** Selections, of type Select.
  19.252 -     */
  19.253 -    public static final int SELECT = INDEXED + 1;
  19.254 +        /** Selections, of type Select.
  19.255 +         */
  19.256 +        SELECT,
  19.257  
  19.258 -    /** Simple identifiers, of type Ident.
  19.259 -     */
  19.260 -    public static final int IDENT = SELECT + 1;
  19.261 +        /** Simple identifiers, of type Ident.
  19.262 +         */
  19.263 +        IDENT,
  19.264  
  19.265 -    /** Literals, of type Literal.
  19.266 -     */
  19.267 -    public static final int LITERAL = IDENT + 1;
  19.268 +        /** Literals, of type Literal.
  19.269 +         */
  19.270 +        LITERAL,
  19.271  
  19.272 -    /** Basic type identifiers, of type TypeIdent.
  19.273 -     */
  19.274 -    public static final int TYPEIDENT = LITERAL + 1;
  19.275 +        /** Basic type identifiers, of type TypeIdent.
  19.276 +         */
  19.277 +        TYPEIDENT,
  19.278  
  19.279 -    /** Array types, of type TypeArray.
  19.280 -     */
  19.281 -    public static final int TYPEARRAY = TYPEIDENT + 1;
  19.282 +        /** Array types, of type TypeArray.
  19.283 +         */
  19.284 +        TYPEARRAY,
  19.285  
  19.286 -    /** Parameterized types, of type TypeApply.
  19.287 -     */
  19.288 -    public static final int TYPEAPPLY = TYPEARRAY + 1;
  19.289 +        /** Parameterized types, of type TypeApply.
  19.290 +         */
  19.291 +        TYPEAPPLY,
  19.292  
  19.293 -    /** Union types, of type TypeUnion
  19.294 -     */
  19.295 -    public static final int TYPEUNION = TYPEAPPLY + 1;
  19.296 +        /** Union types, of type TypeUnion
  19.297 +         */
  19.298 +        TYPEUNION,
  19.299  
  19.300 -    /** Formal type parameters, of type TypeParameter.
  19.301 -     */
  19.302 -    public static final int TYPEPARAMETER = TYPEUNION + 1;
  19.303 +        /** Formal type parameters, of type TypeParameter.
  19.304 +         */
  19.305 +        TYPEPARAMETER,
  19.306  
  19.307 -    /** Type argument.
  19.308 -     */
  19.309 -    public static final int WILDCARD = TYPEPARAMETER + 1;
  19.310 +        /** Type argument.
  19.311 +         */
  19.312 +        WILDCARD,
  19.313  
  19.314 -    /** Bound kind: extends, super, exact, or unbound
  19.315 -     */
  19.316 -    public static final int TYPEBOUNDKIND = WILDCARD + 1;
  19.317 +        /** Bound kind: extends, super, exact, or unbound
  19.318 +         */
  19.319 +        TYPEBOUNDKIND,
  19.320  
  19.321 -    /** metadata: Annotation.
  19.322 -     */
  19.323 -    public static final int ANNOTATION = TYPEBOUNDKIND + 1;
  19.324 +        /** metadata: Annotation.
  19.325 +         */
  19.326 +        ANNOTATION,
  19.327  
  19.328 -    /** metadata: Modifiers
  19.329 -     */
  19.330 -    public static final int MODIFIERS = ANNOTATION + 1;
  19.331 +        /** metadata: Modifiers
  19.332 +         */
  19.333 +        MODIFIERS,
  19.334  
  19.335 -    public static final int ANNOTATED_TYPE = MODIFIERS + 1;
  19.336 +        ANNOTATED_TYPE,
  19.337  
  19.338 -    /** Error trees, of type Erroneous.
  19.339 -     */
  19.340 -    public static final int ERRONEOUS = ANNOTATED_TYPE + 1;
  19.341 +        /** Error trees, of type Erroneous.
  19.342 +         */
  19.343 +        ERRONEOUS,
  19.344  
  19.345 -    /** Unary operators, of type Unary.
  19.346 -     */
  19.347 -    public static final int POS = ERRONEOUS + 1;             // +
  19.348 -    public static final int NEG = POS + 1;                   // -
  19.349 -    public static final int NOT = NEG + 1;                   // !
  19.350 -    public static final int COMPL = NOT + 1;                 // ~
  19.351 -    public static final int PREINC = COMPL + 1;              // ++ _
  19.352 -    public static final int PREDEC = PREINC + 1;             // -- _
  19.353 -    public static final int POSTINC = PREDEC + 1;            // _ ++
  19.354 -    public static final int POSTDEC = POSTINC + 1;           // _ --
  19.355 +        /** Unary operators, of type Unary.
  19.356 +         */
  19.357 +        POS,                             // +
  19.358 +        NEG,                             // -
  19.359 +        NOT,                             // !
  19.360 +        COMPL,                           // ~
  19.361 +        PREINC,                          // ++ _
  19.362 +        PREDEC,                          // -- _
  19.363 +        POSTINC,                         // _ ++
  19.364 +        POSTDEC,                         // _ --
  19.365  
  19.366 -    /** unary operator for null reference checks, only used internally.
  19.367 -     */
  19.368 -    public static final int NULLCHK = POSTDEC + 1;
  19.369 +        /** unary operator for null reference checks, only used internally.
  19.370 +         */
  19.371 +        NULLCHK,
  19.372  
  19.373 -    /** Binary operators, of type Binary.
  19.374 -     */
  19.375 -    public static final int OR = NULLCHK + 1;                // ||
  19.376 -    public static final int AND = OR + 1;                    // &&
  19.377 -    public static final int BITOR = AND + 1;                 // |
  19.378 -    public static final int BITXOR = BITOR + 1;              // ^
  19.379 -    public static final int BITAND = BITXOR + 1;             // &
  19.380 -    public static final int EQ = BITAND + 1;                 // ==
  19.381 -    public static final int NE = EQ + 1;                     // !=
  19.382 -    public static final int LT = NE + 1;                     // <
  19.383 -    public static final int GT = LT + 1;                     // >
  19.384 -    public static final int LE = GT + 1;                     // <=
  19.385 -    public static final int GE = LE + 1;                     // >=
  19.386 -    public static final int SL = GE + 1;                     // <<
  19.387 -    public static final int SR = SL + 1;                     // >>
  19.388 -    public static final int USR = SR + 1;                    // >>>
  19.389 -    public static final int PLUS = USR + 1;                  // +
  19.390 -    public static final int MINUS = PLUS + 1;                // -
  19.391 -    public static final int MUL = MINUS + 1;                 // *
  19.392 -    public static final int DIV = MUL + 1;                   // /
  19.393 -    public static final int MOD = DIV + 1;                   // %
  19.394 +        /** Binary operators, of type Binary.
  19.395 +         */
  19.396 +        OR,                              // ||
  19.397 +        AND,                             // &&
  19.398 +        BITOR,                           // |
  19.399 +        BITXOR,                          // ^
  19.400 +        BITAND,                          // &
  19.401 +        EQ,                              // ==
  19.402 +        NE,                              // !=
  19.403 +        LT,                              // <
  19.404 +        GT,                              // >
  19.405 +        LE,                              // <=
  19.406 +        GE,                              // >=
  19.407 +        SL,                              // <<
  19.408 +        SR,                              // >>
  19.409 +        USR,                             // >>>
  19.410 +        PLUS,                            // +
  19.411 +        MINUS,                           // -
  19.412 +        MUL,                             // *
  19.413 +        DIV,                             // /
  19.414 +        MOD,                             // %
  19.415  
  19.416 -    /** Assignment operators, of type Assignop.
  19.417 -     */
  19.418 -    public static final int BITOR_ASG = MOD + 1;             // |=
  19.419 -    public static final int BITXOR_ASG = BITOR_ASG + 1;      // ^=
  19.420 -    public static final int BITAND_ASG = BITXOR_ASG + 1;     // &=
  19.421 +        /** Assignment operators, of type Assignop.
  19.422 +         */
  19.423 +        BITOR_ASG(BITOR),                // |=
  19.424 +        BITXOR_ASG(BITXOR),              // ^=
  19.425 +        BITAND_ASG(BITAND),              // &=
  19.426  
  19.427 -    public static final int SL_ASG = SL + BITOR_ASG - BITOR; // <<=
  19.428 -    public static final int SR_ASG = SL_ASG + 1;             // >>=
  19.429 -    public static final int USR_ASG = SR_ASG + 1;            // >>>=
  19.430 -    public static final int PLUS_ASG = USR_ASG + 1;          // +=
  19.431 -    public static final int MINUS_ASG = PLUS_ASG + 1;        // -=
  19.432 -    public static final int MUL_ASG = MINUS_ASG + 1;         // *=
  19.433 -    public static final int DIV_ASG = MUL_ASG + 1;           // /=
  19.434 -    public static final int MOD_ASG = DIV_ASG + 1;           // %=
  19.435 +        SL_ASG(SL),                      // <<=
  19.436 +        SR_ASG(SR),                      // >>=
  19.437 +        USR_ASG(USR),                    // >>>=
  19.438 +        PLUS_ASG(PLUS),                  // +=
  19.439 +        MINUS_ASG(MINUS),                // -=
  19.440 +        MUL_ASG(MUL),                    // *=
  19.441 +        DIV_ASG(DIV),                    // /=
  19.442 +        MOD_ASG(MOD),                    // %=
  19.443  
  19.444 -    /** A synthetic let expression, of type LetExpr.
  19.445 -     */
  19.446 -    public static final int LETEXPR = MOD_ASG + 1;           // ala scheme
  19.447 +        /** A synthetic let expression, of type LetExpr.
  19.448 +         */
  19.449 +        LETEXPR;                         // ala scheme
  19.450  
  19.451 +        private Tag noAssignTag;
  19.452  
  19.453 -    /** The offset between assignment operators and normal operators.
  19.454 -     */
  19.455 -    public static final int ASGOffset = BITOR_ASG - BITOR;
  19.456 +        private static int numberOfOperators = MOD.ordinal() - POS.ordinal() + 1;
  19.457 +
  19.458 +        private Tag(Tag noAssignTag) {
  19.459 +            this.noAssignTag = noAssignTag;
  19.460 +        }
  19.461 +
  19.462 +        private Tag() { }
  19.463 +
  19.464 +        public static int getNumberOfOperators() {
  19.465 +            return numberOfOperators;
  19.466 +        }
  19.467 +
  19.468 +        public Tag noAssignOp() {
  19.469 +            if (noAssignTag != null)
  19.470 +                return noAssignTag;
  19.471 +            throw new AssertionError("noAssignOp() method is not available for non assignment tags");
  19.472 +        }
  19.473 +
  19.474 +        public boolean isPostUnaryOp() {
  19.475 +            return (this == POSTINC || this == POSTDEC);
  19.476 +        }
  19.477 +
  19.478 +        public boolean isIncOrDecUnaryOp() {
  19.479 +            return (this == PREINC || this == PREDEC || this == POSTINC || this == POSTDEC);
  19.480 +        }
  19.481 +
  19.482 +        public boolean isAssignop() {
  19.483 +            return noAssignTag != null;
  19.484 +        }
  19.485 +
  19.486 +        public int operatorIndex() {
  19.487 +            return (this.ordinal() - POS.ordinal());
  19.488 +        }
  19.489 +    }
  19.490  
  19.491      /* The (encoded) position in the source file. @see util.Position.
  19.492       */
  19.493 @@ -337,7 +374,13 @@
  19.494  
  19.495      /* The tag of this node -- one of the constants declared above.
  19.496       */
  19.497 -    public abstract int getTag();
  19.498 +    public abstract Tag getTag();
  19.499 +
  19.500 +    /* Returns true if the tag of this node is equals to tag.
  19.501 +     */
  19.502 +    public boolean hasTag(Tag tag) {
  19.503 +        return tag == getTag();
  19.504 +    }
  19.505  
  19.506      /** Convert a tree to a pretty-printed string. */
  19.507      @Override
  19.508 @@ -464,10 +507,9 @@
  19.509          public List<JCImport> getImports() {
  19.510              ListBuffer<JCImport> imports = new ListBuffer<JCImport>();
  19.511              for (JCTree tree : defs) {
  19.512 -                int tag = tree.getTag();
  19.513 -                if (tag == IMPORT)
  19.514 +                if (tree.hasTag(IMPORT))
  19.515                      imports.append((JCImport)tree);
  19.516 -                else if (tag != SKIP)
  19.517 +                else if (!tree.hasTag(SKIP))
  19.518                      break;
  19.519              }
  19.520              return imports.toList();
  19.521 @@ -482,7 +524,7 @@
  19.522          public List<JCTree> getTypeDecls() {
  19.523              List<JCTree> typeDefs;
  19.524              for (typeDefs = defs; !typeDefs.isEmpty(); typeDefs = typeDefs.tail)
  19.525 -                if (typeDefs.head.getTag() != IMPORT)
  19.526 +                if (!typeDefs.head.hasTag(IMPORT))
  19.527                      break;
  19.528              return typeDefs;
  19.529          }
  19.530 @@ -492,7 +534,7 @@
  19.531          }
  19.532  
  19.533          @Override
  19.534 -        public int getTag() {
  19.535 +        public Tag getTag() {
  19.536              return TOPLEVEL;
  19.537          }
  19.538      }
  19.539 @@ -521,7 +563,7 @@
  19.540          }
  19.541  
  19.542          @Override
  19.543 -        public int getTag() {
  19.544 +        public Tag getTag() {
  19.545              return IMPORT;
  19.546          }
  19.547      }
  19.548 @@ -618,7 +660,7 @@
  19.549          }
  19.550  
  19.551          @Override
  19.552 -        public int getTag() {
  19.553 +        public Tag getTag() {
  19.554              return CLASSDEF;
  19.555          }
  19.556      }
  19.557 @@ -690,7 +732,7 @@
  19.558          }
  19.559  
  19.560          @Override
  19.561 -        public int getTag() {
  19.562 +        public Tag getTag() {
  19.563              return METHODDEF;
  19.564          }
  19.565    }
  19.566 @@ -736,7 +778,7 @@
  19.567          }
  19.568  
  19.569          @Override
  19.570 -        public int getTag() {
  19.571 +        public Tag getTag() {
  19.572              return VARDEF;
  19.573          }
  19.574      }
  19.575 @@ -757,7 +799,7 @@
  19.576          }
  19.577  
  19.578          @Override
  19.579 -        public int getTag() {
  19.580 +        public Tag getTag() {
  19.581              return SKIP;
  19.582          }
  19.583      }
  19.584 @@ -790,7 +832,7 @@
  19.585          }
  19.586  
  19.587          @Override
  19.588 -        public int getTag() {
  19.589 +        public Tag getTag() {
  19.590              return BLOCK;
  19.591          }
  19.592      }
  19.593 @@ -817,7 +859,7 @@
  19.594          }
  19.595  
  19.596          @Override
  19.597 -        public int getTag() {
  19.598 +        public Tag getTag() {
  19.599              return DOLOOP;
  19.600          }
  19.601      }
  19.602 @@ -844,7 +886,7 @@
  19.603          }
  19.604  
  19.605          @Override
  19.606 -        public int getTag() {
  19.607 +        public Tag getTag() {
  19.608              return WHILELOOP;
  19.609          }
  19.610      }
  19.611 @@ -885,7 +927,7 @@
  19.612          }
  19.613  
  19.614          @Override
  19.615 -        public int getTag() {
  19.616 +        public Tag getTag() {
  19.617              return FORLOOP;
  19.618          }
  19.619      }
  19.620 @@ -914,7 +956,7 @@
  19.621              return v.visitEnhancedForLoop(this, d);
  19.622          }
  19.623          @Override
  19.624 -        public int getTag() {
  19.625 +        public Tag getTag() {
  19.626              return FOREACHLOOP;
  19.627          }
  19.628      }
  19.629 @@ -939,7 +981,7 @@
  19.630              return v.visitLabeledStatement(this, d);
  19.631          }
  19.632          @Override
  19.633 -        public int getTag() {
  19.634 +        public Tag getTag() {
  19.635              return LABELLED;
  19.636          }
  19.637      }
  19.638 @@ -965,7 +1007,7 @@
  19.639              return v.visitSwitch(this, d);
  19.640          }
  19.641          @Override
  19.642 -        public int getTag() {
  19.643 +        public Tag getTag() {
  19.644              return SWITCH;
  19.645          }
  19.646      }
  19.647 @@ -991,7 +1033,7 @@
  19.648              return v.visitCase(this, d);
  19.649          }
  19.650          @Override
  19.651 -        public int getTag() {
  19.652 +        public Tag getTag() {
  19.653              return CASE;
  19.654          }
  19.655      }
  19.656 @@ -1017,7 +1059,7 @@
  19.657              return v.visitSynchronized(this, d);
  19.658          }
  19.659          @Override
  19.660 -        public int getTag() {
  19.661 +        public Tag getTag() {
  19.662              return SYNCHRONIZED;
  19.663          }
  19.664      }
  19.665 @@ -1057,7 +1099,7 @@
  19.666              return resources;
  19.667          }
  19.668          @Override
  19.669 -        public int getTag() {
  19.670 +        public Tag getTag() {
  19.671              return TRY;
  19.672          }
  19.673      }
  19.674 @@ -1083,7 +1125,7 @@
  19.675              return v.visitCatch(this, d);
  19.676          }
  19.677          @Override
  19.678 -        public int getTag() {
  19.679 +        public Tag getTag() {
  19.680              return CATCH;
  19.681          }
  19.682      }
  19.683 @@ -1115,7 +1157,7 @@
  19.684              return v.visitConditionalExpression(this, d);
  19.685          }
  19.686          @Override
  19.687 -        public int getTag() {
  19.688 +        public Tag getTag() {
  19.689              return CONDEXPR;
  19.690          }
  19.691      }
  19.692 @@ -1147,7 +1189,7 @@
  19.693              return v.visitIf(this, d);
  19.694          }
  19.695          @Override
  19.696 -        public int getTag() {
  19.697 +        public Tag getTag() {
  19.698              return IF;
  19.699          }
  19.700      }
  19.701 @@ -1172,7 +1214,7 @@
  19.702              return v.visitExpressionStatement(this, d);
  19.703          }
  19.704          @Override
  19.705 -        public int getTag() {
  19.706 +        public Tag getTag() {
  19.707              return EXEC;
  19.708          }
  19.709  
  19.710 @@ -1212,7 +1254,7 @@
  19.711              return v.visitBreak(this, d);
  19.712          }
  19.713          @Override
  19.714 -        public int getTag() {
  19.715 +        public Tag getTag() {
  19.716              return BREAK;
  19.717          }
  19.718      }
  19.719 @@ -1237,7 +1279,7 @@
  19.720              return v.visitContinue(this, d);
  19.721          }
  19.722          @Override
  19.723 -        public int getTag() {
  19.724 +        public Tag getTag() {
  19.725              return CONTINUE;
  19.726          }
  19.727      }
  19.728 @@ -1260,7 +1302,7 @@
  19.729              return v.visitReturn(this, d);
  19.730          }
  19.731          @Override
  19.732 -        public int getTag() {
  19.733 +        public Tag getTag() {
  19.734              return RETURN;
  19.735          }
  19.736      }
  19.737 @@ -1283,7 +1325,7 @@
  19.738              return v.visitThrow(this, d);
  19.739          }
  19.740          @Override
  19.741 -        public int getTag() {
  19.742 +        public Tag getTag() {
  19.743              return THROW;
  19.744          }
  19.745      }
  19.746 @@ -1309,7 +1351,7 @@
  19.747              return v.visitAssert(this, d);
  19.748          }
  19.749          @Override
  19.750 -        public int getTag() {
  19.751 +        public Tag getTag() {
  19.752              return ASSERT;
  19.753          }
  19.754      }
  19.755 @@ -1352,7 +1394,7 @@
  19.756              return this;
  19.757          }
  19.758          @Override
  19.759 -        public int getTag() {
  19.760 +        public Tag getTag() {
  19.761              return(APPLY);
  19.762          }
  19.763      }
  19.764 @@ -1402,7 +1444,7 @@
  19.765              return v.visitNewClass(this, d);
  19.766          }
  19.767          @Override
  19.768 -        public int getTag() {
  19.769 +        public Tag getTag() {
  19.770              return NEWCLASS;
  19.771          }
  19.772      }
  19.773 @@ -1438,7 +1480,7 @@
  19.774              return v.visitNewArray(this, d);
  19.775          }
  19.776          @Override
  19.777 -        public int getTag() {
  19.778 +        public Tag getTag() {
  19.779              return NEWARRAY;
  19.780          }
  19.781      }
  19.782 @@ -1461,7 +1503,7 @@
  19.783              return v.visitParenthesized(this, d);
  19.784          }
  19.785          @Override
  19.786 -        public int getTag() {
  19.787 +        public Tag getTag() {
  19.788              return PARENS;
  19.789          }
  19.790      }
  19.791 @@ -1487,7 +1529,7 @@
  19.792              return v.visitAssignment(this, d);
  19.793          }
  19.794          @Override
  19.795 -        public int getTag() {
  19.796 +        public Tag getTag() {
  19.797              return ASSIGN;
  19.798          }
  19.799      }
  19.800 @@ -1496,11 +1538,11 @@
  19.801       * An assignment with "+=", "|=" ...
  19.802       */
  19.803      public static class JCAssignOp extends JCExpression implements CompoundAssignmentTree {
  19.804 -        private int opcode;
  19.805 +        private Tag opcode;
  19.806          public JCExpression lhs;
  19.807          public JCExpression rhs;
  19.808          public Symbol operator;
  19.809 -        protected JCAssignOp(int opcode, JCTree lhs, JCTree rhs, Symbol operator) {
  19.810 +        protected JCAssignOp(Tag opcode, JCTree lhs, JCTree rhs, Symbol operator) {
  19.811              this.opcode = opcode;
  19.812              this.lhs = (JCExpression)lhs;
  19.813              this.rhs = (JCExpression)rhs;
  19.814 @@ -1520,7 +1562,7 @@
  19.815              return v.visitCompoundAssignment(this, d);
  19.816          }
  19.817          @Override
  19.818 -        public int getTag() {
  19.819 +        public Tag getTag() {
  19.820              return opcode;
  19.821          }
  19.822      }
  19.823 @@ -1529,10 +1571,10 @@
  19.824       * A unary operation.
  19.825       */
  19.826      public static class JCUnary extends JCExpression implements UnaryTree {
  19.827 -        private int opcode;
  19.828 +        private Tag opcode;
  19.829          public JCExpression arg;
  19.830          public Symbol operator;
  19.831 -        protected JCUnary(int opcode, JCExpression arg) {
  19.832 +        protected JCUnary(Tag opcode, JCExpression arg) {
  19.833              this.opcode = opcode;
  19.834              this.arg = arg;
  19.835          }
  19.836 @@ -1549,11 +1591,11 @@
  19.837              return v.visitUnary(this, d);
  19.838          }
  19.839          @Override
  19.840 -        public int getTag() {
  19.841 +        public Tag getTag() {
  19.842              return opcode;
  19.843          }
  19.844  
  19.845 -        public void setTag(int tag) {
  19.846 +        public void setTag(Tag tag) {
  19.847              opcode = tag;
  19.848          }
  19.849      }
  19.850 @@ -1562,11 +1604,11 @@
  19.851       * A binary operation.
  19.852       */
  19.853      public static class JCBinary extends JCExpression implements BinaryTree {
  19.854 -        private int opcode;
  19.855 +        private Tag opcode;
  19.856          public JCExpression lhs;
  19.857          public JCExpression rhs;
  19.858          public Symbol operator;
  19.859 -        protected JCBinary(int opcode,
  19.860 +        protected JCBinary(Tag opcode,
  19.861                           JCExpression lhs,
  19.862                           JCExpression rhs,
  19.863                           Symbol operator) {
  19.864 @@ -1589,7 +1631,7 @@
  19.865              return v.visitBinary(this, d);
  19.866          }
  19.867          @Override
  19.868 -        public int getTag() {
  19.869 +        public Tag getTag() {
  19.870              return opcode;
  19.871          }
  19.872      }
  19.873 @@ -1615,7 +1657,7 @@
  19.874              return v.visitTypeCast(this, d);
  19.875          }
  19.876          @Override
  19.877 -        public int getTag() {
  19.878 +        public Tag getTag() {
  19.879              return TYPECAST;
  19.880          }
  19.881      }
  19.882 @@ -1641,7 +1683,7 @@
  19.883              return v.visitInstanceOf(this, d);
  19.884          }
  19.885          @Override
  19.886 -        public int getTag() {
  19.887 +        public Tag getTag() {
  19.888              return TYPETEST;
  19.889          }
  19.890      }
  19.891 @@ -1667,7 +1709,7 @@
  19.892              return v.visitArrayAccess(this, d);
  19.893          }
  19.894          @Override
  19.895 -        public int getTag() {
  19.896 +        public Tag getTag() {
  19.897              return INDEXED;
  19.898          }
  19.899      }
  19.900 @@ -1698,7 +1740,7 @@
  19.901          }
  19.902          public Name getIdentifier() { return name; }
  19.903          @Override
  19.904 -        public int getTag() {
  19.905 +        public Tag getTag() {
  19.906              return SELECT;
  19.907          }
  19.908      }
  19.909 @@ -1724,7 +1766,8 @@
  19.910          public <R,D> R accept(TreeVisitor<R,D> v, D d) {
  19.911              return v.visitIdentifier(this, d);
  19.912          }
  19.913 -        public int getTag() {
  19.914 +        @Override
  19.915 +        public Tag getTag() {
  19.916              return IDENT;
  19.917          }
  19.918      }
  19.919 @@ -1790,7 +1833,7 @@
  19.920              return this;
  19.921          }
  19.922          @Override
  19.923 -        public int getTag() {
  19.924 +        public Tag getTag() {
  19.925              return LITERAL;
  19.926          }
  19.927      }
  19.928 @@ -1838,7 +1881,7 @@
  19.929              return v.visitPrimitiveType(this, d);
  19.930          }
  19.931          @Override
  19.932 -        public int getTag() {
  19.933 +        public Tag getTag() {
  19.934              return TYPEIDENT;
  19.935          }
  19.936      }
  19.937 @@ -1861,7 +1904,7 @@
  19.938              return v.visitArrayType(this, d);
  19.939          }
  19.940          @Override
  19.941 -        public int getTag() {
  19.942 +        public Tag getTag() {
  19.943              return TYPEARRAY;
  19.944          }
  19.945      }
  19.946 @@ -1889,7 +1932,7 @@
  19.947              return v.visitParameterizedType(this, d);
  19.948          }
  19.949          @Override
  19.950 -        public int getTag() {
  19.951 +        public Tag getTag() {
  19.952              return TYPEAPPLY;
  19.953          }
  19.954      }
  19.955 @@ -1917,7 +1960,7 @@
  19.956              return v.visitUnionType(this, d);
  19.957          }
  19.958          @Override
  19.959 -        public int getTag() {
  19.960 +        public Tag getTag() {
  19.961              return TYPEUNION;
  19.962          }
  19.963      }
  19.964 @@ -1947,7 +1990,7 @@
  19.965              return v.visitTypeParameter(this, d);
  19.966          }
  19.967          @Override
  19.968 -        public int getTag() {
  19.969 +        public Tag getTag() {
  19.970              return TYPEPARAMETER;
  19.971          }
  19.972      }
  19.973 @@ -1981,7 +2024,7 @@
  19.974              return v.visitWildcard(this, d);
  19.975          }
  19.976          @Override
  19.977 -        public int getTag() {
  19.978 +        public Tag getTag() {
  19.979              return WILDCARD;
  19.980          }
  19.981      }
  19.982 @@ -2002,7 +2045,7 @@
  19.983              throw new AssertionError("TypeBoundKind is not part of a public API");
  19.984          }
  19.985          @Override
  19.986 -        public int getTag() {
  19.987 +        public Tag getTag() {
  19.988              return TYPEBOUNDKIND;
  19.989          }
  19.990      }
  19.991 @@ -2027,7 +2070,7 @@
  19.992              return v.visitAnnotation(this, d);
  19.993          }
  19.994          @Override
  19.995 -        public int getTag() {
  19.996 +        public Tag getTag() {
  19.997              return ANNOTATION;
  19.998          }
  19.999      }
 19.1000 @@ -2054,7 +2097,7 @@
 19.1001              return v.visitModifiers(this, d);
 19.1002          }
 19.1003          @Override
 19.1004 -        public int getTag() {
 19.1005 +        public Tag getTag() {
 19.1006              return MODIFIERS;
 19.1007          }
 19.1008      }
 19.1009 @@ -2079,7 +2122,7 @@
 19.1010              return v.visitErroneous(this, d);
 19.1011          }
 19.1012          @Override
 19.1013 -        public int getTag() {
 19.1014 +        public Tag getTag() {
 19.1015              return ERRONEOUS;
 19.1016          }
 19.1017      }
 19.1018 @@ -2103,7 +2146,7 @@
 19.1019              throw new AssertionError("LetExpr is not part of a public API");
 19.1020          }
 19.1021          @Override
 19.1022 -        public int getTag() {
 19.1023 +        public Tag getTag() {
 19.1024              return LETEXPR;
 19.1025          }
 19.1026      }
 19.1027 @@ -2175,9 +2218,9 @@
 19.1028                            List<JCExpression> elems);
 19.1029          JCParens Parens(JCExpression expr);
 19.1030          JCAssign Assign(JCExpression lhs, JCExpression rhs);
 19.1031 -        JCAssignOp Assignop(int opcode, JCTree lhs, JCTree rhs);
 19.1032 -        JCUnary Unary(int opcode, JCExpression arg);
 19.1033 -        JCBinary Binary(int opcode, JCExpression lhs, JCExpression rhs);
 19.1034 +        JCAssignOp Assignop(Tag opcode, JCTree lhs, JCTree rhs);
 19.1035 +        JCUnary Unary(Tag opcode, JCExpression arg);
 19.1036 +        JCBinary Binary(Tag opcode, JCExpression lhs, JCExpression rhs);
 19.1037          JCTypeCast TypeCast(JCTree expr, JCExpression type);
 19.1038          JCInstanceOf TypeTest(JCExpression expr, JCTree clazz);
 19.1039          JCArrayAccess Indexed(JCExpression indexed, JCExpression index);
    20.1 --- a/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Sat Nov 05 00:02:33 2011 -0700
    20.2 +++ b/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Tue Nov 08 11:51:05 2011 -0800
    20.3 @@ -36,6 +36,8 @@
    20.4  import com.sun.tools.javac.tree.JCTree.*;
    20.5  
    20.6  import static com.sun.tools.javac.code.Flags.*;
    20.7 +import static com.sun.tools.javac.code.Flags.ANNOTATION;
    20.8 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    20.9  
   20.10  /** Prints out a tree as an indented Java source program.
   20.11   *
   20.12 @@ -310,7 +312,7 @@
   20.13  
   20.14      /** Is the given tree an enumerator definition? */
   20.15      boolean isEnumerator(JCTree t) {
   20.16 -        return t.getTag() == JCTree.VARDEF && (((JCVariableDecl) t).mods.flags & ENUM) != 0;
   20.17 +        return t.hasTag(VARDEF) && (((JCVariableDecl) t).mods.flags & ENUM) != 0;
   20.18      }
   20.19  
   20.20      /** Print unit consisting of package clause and import statements in toplevel,
   20.21 @@ -331,9 +333,9 @@
   20.22          }
   20.23          boolean firstImport = true;
   20.24          for (List<JCTree> l = tree.defs;
   20.25 -        l.nonEmpty() && (cdef == null || l.head.getTag() == JCTree.IMPORT);
   20.26 +        l.nonEmpty() && (cdef == null || l.head.hasTag(IMPORT));
   20.27          l = l.tail) {
   20.28 -            if (l.head.getTag() == JCTree.IMPORT) {
   20.29 +            if (l.head.hasTag(IMPORT)) {
   20.30                  JCImport imp = (JCImport)l.head;
   20.31                  Name name = TreeInfo.name(imp.qualid);
   20.32                  if (name == name.table.names.asterisk ||
   20.33 @@ -484,7 +486,7 @@
   20.34                  print("/*public static final*/ ");
   20.35                  print(tree.name);
   20.36                  if (tree.init != null) {
   20.37 -                    if (sourceOutput && tree.init.getTag() == JCTree.NEWCLASS) {
   20.38 +                    if (sourceOutput && tree.init.hasTag(NEWCLASS)) {
   20.39                          print(" /*enum*/ ");
   20.40                          JCNewClass init = (JCNewClass) tree.init;
   20.41                          if (init.args != null && init.args.nonEmpty()) {
   20.42 @@ -545,7 +547,7 @@
   20.43              printStat(tree.body);
   20.44              align();
   20.45              print(" while ");
   20.46 -            if (tree.cond.getTag() == JCTree.PARENS) {
   20.47 +            if (tree.cond.hasTag(PARENS)) {
   20.48                  printExpr(tree.cond);
   20.49              } else {
   20.50                  print("(");
   20.51 @@ -561,7 +563,7 @@
   20.52      public void visitWhileLoop(JCWhileLoop tree) {
   20.53          try {
   20.54              print("while ");
   20.55 -            if (tree.cond.getTag() == JCTree.PARENS) {
   20.56 +            if (tree.cond.hasTag(PARENS)) {
   20.57                  printExpr(tree.cond);
   20.58              } else {
   20.59                  print("(");
   20.60 @@ -579,7 +581,7 @@
   20.61          try {
   20.62              print("for (");
   20.63              if (tree.init.nonEmpty()) {
   20.64 -                if (tree.init.head.getTag() == JCTree.VARDEF) {
   20.65 +                if (tree.init.head.hasTag(VARDEF)) {
   20.66                      printExpr(tree.init.head);
   20.67                      for (List<JCStatement> l = tree.init.tail; l.nonEmpty(); l = l.tail) {
   20.68                          JCVariableDecl vdef = (JCVariableDecl)l.head;
   20.69 @@ -626,7 +628,7 @@
   20.70      public void visitSwitch(JCSwitch tree) {
   20.71          try {
   20.72              print("switch ");
   20.73 -            if (tree.selector.getTag() == JCTree.PARENS) {
   20.74 +            if (tree.selector.hasTag(PARENS)) {
   20.75                  printExpr(tree.selector);
   20.76              } else {
   20.77                  print("(");
   20.78 @@ -665,7 +667,7 @@
   20.79      public void visitSynchronized(JCSynchronized tree) {
   20.80          try {
   20.81              print("synchronized ");
   20.82 -            if (tree.lock.getTag() == JCTree.PARENS) {
   20.83 +            if (tree.lock.hasTag(PARENS)) {
   20.84                  printExpr(tree.lock);
   20.85              } else {
   20.86                  print("(");
   20.87 @@ -736,7 +738,7 @@
   20.88      public void visitIf(JCIf tree) {
   20.89          try {
   20.90              print("if ");
   20.91 -            if (tree.cond.getTag() == JCTree.PARENS) {
   20.92 +            if (tree.cond.hasTag(PARENS)) {
   20.93                  printExpr(tree.cond);
   20.94              } else {
   20.95                  print("(");
   20.96 @@ -823,7 +825,7 @@
   20.97      public void visitApply(JCMethodInvocation tree) {
   20.98          try {
   20.99              if (!tree.typeargs.isEmpty()) {
  20.100 -                if (tree.meth.getTag() == JCTree.SELECT) {
  20.101 +                if (tree.meth.hasTag(SELECT)) {
  20.102                      JCFieldAccess left = (JCFieldAccess)tree.meth;
  20.103                      printExpr(left.selected);
  20.104                      print(".<");
  20.105 @@ -882,7 +884,7 @@
  20.106              if (tree.elemtype != null) {
  20.107                  print("new ");
  20.108                  JCTree elem = tree.elemtype;
  20.109 -                if (elem.getTag() == JCTree.TYPEARRAY)
  20.110 +                if (elem.hasTag(TYPEARRAY))
  20.111                      printBaseElementType((JCArrayTypeTree) elem);
  20.112                  else
  20.113                      printExpr(elem);
  20.114 @@ -927,36 +929,36 @@
  20.115          }
  20.116      }
  20.117  
  20.118 -    public String operatorName(int tag) {
  20.119 +    public String operatorName(JCTree.Tag tag) {
  20.120          switch(tag) {
  20.121 -            case JCTree.POS:     return "+";
  20.122 -            case JCTree.NEG:     return "-";
  20.123 -            case JCTree.NOT:     return "!";
  20.124 -            case JCTree.COMPL:   return "~";
  20.125 -            case JCTree.PREINC:  return "++";
  20.126 -            case JCTree.PREDEC:  return "--";
  20.127 -            case JCTree.POSTINC: return "++";
  20.128 -            case JCTree.POSTDEC: return "--";
  20.129 -            case JCTree.NULLCHK: return "<*nullchk*>";
  20.130 -            case JCTree.OR:      return "||";
  20.131 -            case JCTree.AND:     return "&&";
  20.132 -            case JCTree.EQ:      return "==";
  20.133 -            case JCTree.NE:      return "!=";
  20.134 -            case JCTree.LT:      return "<";
  20.135 -            case JCTree.GT:      return ">";
  20.136 -            case JCTree.LE:      return "<=";
  20.137 -            case JCTree.GE:      return ">=";
  20.138 -            case JCTree.BITOR:   return "|";
  20.139 -            case JCTree.BITXOR:  return "^";
  20.140 -            case JCTree.BITAND:  return "&";
  20.141 -            case JCTree.SL:      return "<<";
  20.142 -            case JCTree.SR:      return ">>";
  20.143 -            case JCTree.USR:     return ">>>";
  20.144 -            case JCTree.PLUS:    return "+";
  20.145 -            case JCTree.MINUS:   return "-";
  20.146 -            case JCTree.MUL:     return "*";
  20.147 -            case JCTree.DIV:     return "/";
  20.148 -            case JCTree.MOD:     return "%";
  20.149 +            case POS:     return "+";
  20.150 +            case NEG:     return "-";
  20.151 +            case NOT:     return "!";
  20.152 +            case COMPL:   return "~";
  20.153 +            case PREINC:  return "++";
  20.154 +            case PREDEC:  return "--";
  20.155 +            case POSTINC: return "++";
  20.156 +            case POSTDEC: return "--";
  20.157 +            case NULLCHK: return "<*nullchk*>";
  20.158 +            case OR:      return "||";
  20.159 +            case AND:     return "&&";
  20.160 +            case EQ:      return "==";
  20.161 +            case NE:      return "!=";
  20.162 +            case LT:      return "<";
  20.163 +            case GT:      return ">";
  20.164 +            case LE:      return "<=";
  20.165 +            case GE:      return ">=";
  20.166 +            case BITOR:   return "|";
  20.167 +            case BITXOR:  return "^";
  20.168 +            case BITAND:  return "&";
  20.169 +            case SL:      return "<<";
  20.170 +            case SR:      return ">>";
  20.171 +            case USR:     return ">>>";
  20.172 +            case PLUS:    return "+";
  20.173 +            case MINUS:   return "-";
  20.174 +            case MUL:     return "*";
  20.175 +            case DIV:     return "/";
  20.176 +            case MOD:     return "%";
  20.177              default: throw new Error();
  20.178          }
  20.179      }
  20.180 @@ -965,7 +967,7 @@
  20.181          try {
  20.182              open(prec, TreeInfo.assignopPrec);
  20.183              printExpr(tree.lhs, TreeInfo.assignopPrec + 1);
  20.184 -            print(" " + operatorName(tree.getTag() - JCTree.ASGOffset) + "= ");
  20.185 +            print(" " + operatorName(tree.getTag().noAssignOp()) + "= ");
  20.186              printExpr(tree.rhs, TreeInfo.assignopPrec);
  20.187              close(prec, TreeInfo.assignopPrec);
  20.188          } catch (IOException e) {
  20.189 @@ -978,7 +980,7 @@
  20.190              int ownprec = TreeInfo.opPrec(tree.getTag());
  20.191              String opname = operatorName(tree.getTag());
  20.192              open(prec, ownprec);
  20.193 -            if (tree.getTag() <= JCTree.PREDEC) {
  20.194 +            if (!tree.getTag().isPostUnaryOp()) {
  20.195                  print(opname);
  20.196                  printExpr(tree.arg, ownprec);
  20.197              } else {
  20.198 @@ -1153,7 +1155,7 @@
  20.199          while (true) {
  20.200              elem = tree.elemtype;
  20.201              print("[]");
  20.202 -            if (elem.getTag() != JCTree.TYPEARRAY) break;
  20.203 +            if (!elem.hasTag(TYPEARRAY)) break;
  20.204              tree = (JCArrayTypeTree) elem;
  20.205          }
  20.206      }
    21.1 --- a/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java	Sat Nov 05 00:02:33 2011 -0700
    21.2 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java	Tue Nov 08 11:51:05 2011 -0800
    21.3 @@ -406,7 +406,7 @@
    21.4      public JCTree visitOther(Tree node, P p) {
    21.5          JCTree tree = (JCTree) node;
    21.6          switch (tree.getTag()) {
    21.7 -            case JCTree.LETEXPR: {
    21.8 +            case LETEXPR: {
    21.9                  LetExpr t = (LetExpr) node;
   21.10                  List<JCVariableDecl> defs = copy(t.defs, p);
   21.11                  JCTree expr = copy(t.expr, p);
    22.1 --- a/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Sat Nov 05 00:02:33 2011 -0700
    22.2 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Tue Nov 08 11:51:05 2011 -0800
    22.3 @@ -35,6 +35,9 @@
    22.4  import com.sun.tools.javac.tree.JCTree.*;
    22.5  
    22.6  import static com.sun.tools.javac.code.Flags.*;
    22.7 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    22.8 +import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK;
    22.9 +import static com.sun.tools.javac.tree.JCTree.Tag.SYNCHRONIZED;
   22.10  
   22.11  /** Utility class containing inspector methods for trees.
   22.12   *
   22.13 @@ -56,53 +59,60 @@
   22.14  
   22.15      /** The names of all operators.
   22.16       */
   22.17 -    private Name[] opname = new Name[JCTree.MOD - JCTree.POS + 1];
   22.18 +    private Name[] opname = new Name[Tag.getNumberOfOperators()];
   22.19 +
   22.20 +    private void setOpname(Tag tag, String name, Names names) {
   22.21 +         setOpname(tag, names.fromString(name));
   22.22 +     }
   22.23 +     private void setOpname(Tag tag, Name name) {
   22.24 +         opname[tag.operatorIndex()] = name;
   22.25 +     }
   22.26  
   22.27      private TreeInfo(Context context) {
   22.28          context.put(treeInfoKey, this);
   22.29  
   22.30          Names names = Names.instance(context);
   22.31 -        opname[JCTree.POS     - JCTree.POS] = names.fromString("+");
   22.32 -        opname[JCTree.NEG     - JCTree.POS] = names.hyphen;
   22.33 -        opname[JCTree.NOT     - JCTree.POS] = names.fromString("!");
   22.34 -        opname[JCTree.COMPL   - JCTree.POS] = names.fromString("~");
   22.35 -        opname[JCTree.PREINC  - JCTree.POS] = names.fromString("++");
   22.36 -        opname[JCTree.PREDEC  - JCTree.POS] = names.fromString("--");
   22.37 -        opname[JCTree.POSTINC - JCTree.POS] = names.fromString("++");
   22.38 -        opname[JCTree.POSTDEC - JCTree.POS] = names.fromString("--");
   22.39 -        opname[JCTree.NULLCHK - JCTree.POS] = names.fromString("<*nullchk*>");
   22.40 -        opname[JCTree.OR      - JCTree.POS] = names.fromString("||");
   22.41 -        opname[JCTree.AND     - JCTree.POS] = names.fromString("&&");
   22.42 -        opname[JCTree.EQ      - JCTree.POS] = names.fromString("==");
   22.43 -        opname[JCTree.NE      - JCTree.POS] = names.fromString("!=");
   22.44 -        opname[JCTree.LT      - JCTree.POS] = names.fromString("<");
   22.45 -        opname[JCTree.GT      - JCTree.POS] = names.fromString(">");
   22.46 -        opname[JCTree.LE      - JCTree.POS] = names.fromString("<=");
   22.47 -        opname[JCTree.GE      - JCTree.POS] = names.fromString(">=");
   22.48 -        opname[JCTree.BITOR   - JCTree.POS] = names.fromString("|");
   22.49 -        opname[JCTree.BITXOR  - JCTree.POS] = names.fromString("^");
   22.50 -        opname[JCTree.BITAND  - JCTree.POS] = names.fromString("&");
   22.51 -        opname[JCTree.SL      - JCTree.POS] = names.fromString("<<");
   22.52 -        opname[JCTree.SR      - JCTree.POS] = names.fromString(">>");
   22.53 -        opname[JCTree.USR     - JCTree.POS] = names.fromString(">>>");
   22.54 -        opname[JCTree.PLUS    - JCTree.POS] = names.fromString("+");
   22.55 -        opname[JCTree.MINUS   - JCTree.POS] = names.hyphen;
   22.56 -        opname[JCTree.MUL     - JCTree.POS] = names.asterisk;
   22.57 -        opname[JCTree.DIV     - JCTree.POS] = names.slash;
   22.58 -        opname[JCTree.MOD     - JCTree.POS] = names.fromString("%");
   22.59 +        setOpname(POS, "+", names);
   22.60 +        setOpname(NEG, names.hyphen);
   22.61 +        setOpname(NOT, "!", names);
   22.62 +        setOpname(COMPL, "~", names);
   22.63 +        setOpname(PREINC, "++", names);
   22.64 +        setOpname(PREDEC, "--", names);
   22.65 +        setOpname(POSTINC, "++", names);
   22.66 +        setOpname(POSTDEC, "--", names);
   22.67 +        setOpname(NULLCHK, "<*nullchk*>", names);
   22.68 +        setOpname(OR, "||", names);
   22.69 +        setOpname(AND, "&&", names);
   22.70 +        setOpname(EQ, "==", names);
   22.71 +        setOpname(NE, "!=", names);
   22.72 +        setOpname(LT, "<", names);
   22.73 +        setOpname(GT, ">", names);
   22.74 +        setOpname(LE, "<=", names);
   22.75 +        setOpname(GE, ">=", names);
   22.76 +        setOpname(BITOR, "|", names);
   22.77 +        setOpname(BITXOR, "^", names);
   22.78 +        setOpname(BITAND, "&", names);
   22.79 +        setOpname(SL, "<<", names);
   22.80 +        setOpname(SR, ">>", names);
   22.81 +        setOpname(USR, ">>>", names);
   22.82 +        setOpname(PLUS, "+", names);
   22.83 +        setOpname(MINUS, names.hyphen);
   22.84 +        setOpname(MUL, names.asterisk);
   22.85 +        setOpname(DIV, names.slash);
   22.86 +        setOpname(MOD, "%", names);
   22.87      }
   22.88  
   22.89  
   22.90      /** Return name of operator with given tree tag.
   22.91       */
   22.92 -    public Name operatorName(int tag) {
   22.93 -        return opname[tag - JCTree.POS];
   22.94 +    public Name operatorName(JCTree.Tag tag) {
   22.95 +        return opname[tag.operatorIndex()];
   22.96      }
   22.97  
   22.98      /** Is tree a constructor declaration?
   22.99       */
  22.100      public static boolean isConstructor(JCTree tree) {
  22.101 -        if (tree.getTag() == JCTree.METHODDEF) {
  22.102 +        if (tree.hasTag(METHODDEF)) {
  22.103              Name name = ((JCMethodDecl) tree).name;
  22.104              return name == name.table.names.init;
  22.105          } else {
  22.106 @@ -119,17 +129,17 @@
  22.107      }
  22.108  
  22.109      public static boolean isMultiCatch(JCCatch catchClause) {
  22.110 -        return catchClause.param.vartype.getTag() == JCTree.TYPEUNION;
  22.111 +        return catchClause.param.vartype.hasTag(TYPEUNION);
  22.112      }
  22.113  
  22.114      /** Is statement an initializer for a synthetic field?
  22.115       */
  22.116      public static boolean isSyntheticInit(JCTree stat) {
  22.117 -        if (stat.getTag() == JCTree.EXEC) {
  22.118 +        if (stat.hasTag(EXEC)) {
  22.119              JCExpressionStatement exec = (JCExpressionStatement)stat;
  22.120 -            if (exec.expr.getTag() == JCTree.ASSIGN) {
  22.121 +            if (exec.expr.hasTag(ASSIGN)) {
  22.122                  JCAssign assign = (JCAssign)exec.expr;
  22.123 -                if (assign.lhs.getTag() == JCTree.SELECT) {
  22.124 +                if (assign.lhs.hasTag(SELECT)) {
  22.125                      JCFieldAccess select = (JCFieldAccess)assign.lhs;
  22.126                      if (select.sym != null &&
  22.127                          (select.sym.flags() & SYNTHETIC) != 0) {
  22.128 @@ -146,9 +156,9 @@
  22.129      /** If the expression is a method call, return the method name, null
  22.130       *  otherwise. */
  22.131      public static Name calledMethodName(JCTree tree) {
  22.132 -        if (tree.getTag() == JCTree.EXEC) {
  22.133 +        if (tree.hasTag(EXEC)) {
  22.134              JCExpressionStatement exec = (JCExpressionStatement)tree;
  22.135 -            if (exec.expr.getTag() == JCTree.APPLY) {
  22.136 +            if (exec.expr.hasTag(APPLY)) {
  22.137                  Name mname = TreeInfo.name(((JCMethodInvocation) exec.expr).meth);
  22.138                  return mname;
  22.139              }
  22.140 @@ -192,7 +202,7 @@
  22.141  
  22.142      /** Return the first call in a constructor definition. */
  22.143      public static JCMethodInvocation firstConstructorCall(JCTree tree) {
  22.144 -        if (tree.getTag() != JCTree.METHODDEF) return null;
  22.145 +        if (!tree.hasTag(METHODDEF)) return null;
  22.146          JCMethodDecl md = (JCMethodDecl) tree;
  22.147          Names names = md.name.table.names;
  22.148          if (md.name != names.init) return null;
  22.149 @@ -202,24 +212,24 @@
  22.150          while (stats.nonEmpty() && isSyntheticInit(stats.head))
  22.151              stats = stats.tail;
  22.152          if (stats.isEmpty()) return null;
  22.153 -        if (stats.head.getTag() != JCTree.EXEC) return null;
  22.154 +        if (!stats.head.hasTag(EXEC)) return null;
  22.155          JCExpressionStatement exec = (JCExpressionStatement) stats.head;
  22.156 -        if (exec.expr.getTag() != JCTree.APPLY) return null;
  22.157 +        if (!exec.expr.hasTag(APPLY)) return null;
  22.158          return (JCMethodInvocation)exec.expr;
  22.159      }
  22.160  
  22.161      /** Return true if a tree represents a diamond new expr. */
  22.162      public static boolean isDiamond(JCTree tree) {
  22.163          switch(tree.getTag()) {
  22.164 -            case JCTree.TYPEAPPLY: return ((JCTypeApply)tree).getTypeArguments().isEmpty();
  22.165 -            case JCTree.NEWCLASS: return isDiamond(((JCNewClass)tree).clazz);
  22.166 +            case TYPEAPPLY: return ((JCTypeApply)tree).getTypeArguments().isEmpty();
  22.167 +            case NEWCLASS: return isDiamond(((JCNewClass)tree).clazz);
  22.168              default: return false;
  22.169          }
  22.170      }
  22.171  
  22.172      /** Return true if a tree represents the null literal. */
  22.173      public static boolean isNull(JCTree tree) {
  22.174 -        if (tree.getTag() != JCTree.LITERAL)
  22.175 +        if (!tree.hasTag(LITERAL))
  22.176              return false;
  22.177          JCLiteral lit = (JCLiteral) tree;
  22.178          return (lit.typetag == TypeTags.BOT);
  22.179 @@ -229,7 +239,7 @@
  22.180       *  the block itself if it is empty.
  22.181       */
  22.182      public static int firstStatPos(JCTree tree) {
  22.183 -        if (tree.getTag() == JCTree.BLOCK && ((JCBlock) tree).stats.nonEmpty())
  22.184 +        if (tree.hasTag(BLOCK) && ((JCBlock) tree).stats.nonEmpty())
  22.185              return ((JCBlock) tree).stats.head.pos;
  22.186          else
  22.187              return tree.pos;
  22.188 @@ -239,11 +249,11 @@
  22.189       *  defined endpos.
  22.190       */
  22.191      public static int endPos(JCTree tree) {
  22.192 -        if (tree.getTag() == JCTree.BLOCK && ((JCBlock) tree).endpos != Position.NOPOS)
  22.193 +        if (tree.hasTag(BLOCK) && ((JCBlock) tree).endpos != Position.NOPOS)
  22.194              return ((JCBlock) tree).endpos;
  22.195 -        else if (tree.getTag() == JCTree.SYNCHRONIZED)
  22.196 +        else if (tree.hasTag(SYNCHRONIZED))
  22.197              return endPos(((JCSynchronized) tree).body);
  22.198 -        else if (tree.getTag() == JCTree.TRY) {
  22.199 +        else if (tree.hasTag(TRY)) {
  22.200              JCTry t = (JCTry) tree;
  22.201              return endPos((t.finalizer != null)
  22.202                            ? t.finalizer
  22.203 @@ -263,73 +273,73 @@
  22.204              return Position.NOPOS;
  22.205  
  22.206          switch(tree.getTag()) {
  22.207 -        case(JCTree.APPLY):
  22.208 -            return getStartPos(((JCMethodInvocation) tree).meth);
  22.209 -        case(JCTree.ASSIGN):
  22.210 -            return getStartPos(((JCAssign) tree).lhs);
  22.211 -        case(JCTree.BITOR_ASG): case(JCTree.BITXOR_ASG): case(JCTree.BITAND_ASG):
  22.212 -        case(JCTree.SL_ASG): case(JCTree.SR_ASG): case(JCTree.USR_ASG):
  22.213 -        case(JCTree.PLUS_ASG): case(JCTree.MINUS_ASG): case(JCTree.MUL_ASG):
  22.214 -        case(JCTree.DIV_ASG): case(JCTree.MOD_ASG):
  22.215 -            return getStartPos(((JCAssignOp) tree).lhs);
  22.216 -        case(JCTree.OR): case(JCTree.AND): case(JCTree.BITOR):
  22.217 -        case(JCTree.BITXOR): case(JCTree.BITAND): case(JCTree.EQ):
  22.218 -        case(JCTree.NE): case(JCTree.LT): case(JCTree.GT):
  22.219 -        case(JCTree.LE): case(JCTree.GE): case(JCTree.SL):
  22.220 -        case(JCTree.SR): case(JCTree.USR): case(JCTree.PLUS):
  22.221 -        case(JCTree.MINUS): case(JCTree.MUL): case(JCTree.DIV):
  22.222 -        case(JCTree.MOD):
  22.223 -            return getStartPos(((JCBinary) tree).lhs);
  22.224 -        case(JCTree.CLASSDEF): {
  22.225 -            JCClassDecl node = (JCClassDecl)tree;
  22.226 -            if (node.mods.pos != Position.NOPOS)
  22.227 -                return node.mods.pos;
  22.228 -            break;
  22.229 -        }
  22.230 -        case(JCTree.CONDEXPR):
  22.231 -            return getStartPos(((JCConditional) tree).cond);
  22.232 -        case(JCTree.EXEC):
  22.233 -            return getStartPos(((JCExpressionStatement) tree).expr);
  22.234 -        case(JCTree.INDEXED):
  22.235 -            return getStartPos(((JCArrayAccess) tree).indexed);
  22.236 -        case(JCTree.METHODDEF): {
  22.237 -            JCMethodDecl node = (JCMethodDecl)tree;
  22.238 -            if (node.mods.pos != Position.NOPOS)
  22.239 -                return node.mods.pos;
  22.240 -            if (node.typarams.nonEmpty()) // List.nil() used for no typarams
  22.241 -                return getStartPos(node.typarams.head);
  22.242 -            return node.restype == null ? node.pos : getStartPos(node.restype);
  22.243 -        }
  22.244 -        case(JCTree.SELECT):
  22.245 -            return getStartPos(((JCFieldAccess) tree).selected);
  22.246 -        case(JCTree.TYPEAPPLY):
  22.247 -            return getStartPos(((JCTypeApply) tree).clazz);
  22.248 -        case(JCTree.TYPEARRAY):
  22.249 -            return getStartPos(((JCArrayTypeTree) tree).elemtype);
  22.250 -        case(JCTree.TYPETEST):
  22.251 -            return getStartPos(((JCInstanceOf) tree).expr);
  22.252 -        case(JCTree.POSTINC):
  22.253 -        case(JCTree.POSTDEC):
  22.254 -            return getStartPos(((JCUnary) tree).arg);
  22.255 -        case(JCTree.NEWCLASS): {
  22.256 -            JCNewClass node = (JCNewClass)tree;
  22.257 -            if (node.encl != null)
  22.258 -                return getStartPos(node.encl);
  22.259 -            break;
  22.260 -        }
  22.261 -        case(JCTree.VARDEF): {
  22.262 -            JCVariableDecl node = (JCVariableDecl)tree;
  22.263 -            if (node.mods.pos != Position.NOPOS) {
  22.264 -                return node.mods.pos;
  22.265 -            } else {
  22.266 -                return getStartPos(node.vartype);
  22.267 +            case APPLY:
  22.268 +                return getStartPos(((JCMethodInvocation) tree).meth);
  22.269 +            case ASSIGN:
  22.270 +                return getStartPos(((JCAssign) tree).lhs);
  22.271 +            case BITOR_ASG: case BITXOR_ASG: case BITAND_ASG:
  22.272 +            case SL_ASG: case SR_ASG: case USR_ASG:
  22.273 +            case PLUS_ASG: case MINUS_ASG: case MUL_ASG:
  22.274 +            case DIV_ASG: case MOD_ASG:
  22.275 +                return getStartPos(((JCAssignOp) tree).lhs);
  22.276 +            case OR: case AND: case BITOR:
  22.277 +            case BITXOR: case BITAND: case EQ:
  22.278 +            case NE: case LT: case GT:
  22.279 +            case LE: case GE: case SL:
  22.280 +            case SR: case USR: case PLUS:
  22.281 +            case MINUS: case MUL: case DIV:
  22.282 +            case MOD:
  22.283 +                return getStartPos(((JCBinary) tree).lhs);
  22.284 +            case CLASSDEF: {
  22.285 +                JCClassDecl node = (JCClassDecl)tree;
  22.286 +                if (node.mods.pos != Position.NOPOS)
  22.287 +                    return node.mods.pos;
  22.288 +                break;
  22.289              }
  22.290 -        }
  22.291 -        case(JCTree.ERRONEOUS): {
  22.292 -            JCErroneous node = (JCErroneous)tree;
  22.293 -            if (node.errs != null && node.errs.nonEmpty())
  22.294 -                return getStartPos(node.errs.head);
  22.295 -        }
  22.296 +            case CONDEXPR:
  22.297 +                return getStartPos(((JCConditional) tree).cond);
  22.298 +            case EXEC:
  22.299 +                return getStartPos(((JCExpressionStatement) tree).expr);
  22.300 +            case INDEXED:
  22.301 +                return getStartPos(((JCArrayAccess) tree).indexed);
  22.302 +            case METHODDEF: {
  22.303 +                JCMethodDecl node = (JCMethodDecl)tree;
  22.304 +                if (node.mods.pos != Position.NOPOS)
  22.305 +                    return node.mods.pos;
  22.306 +                if (node.typarams.nonEmpty()) // List.nil() used for no typarams
  22.307 +                    return getStartPos(node.typarams.head);
  22.308 +                return node.restype == null ? node.pos : getStartPos(node.restype);
  22.309 +            }
  22.310 +            case SELECT:
  22.311 +                return getStartPos(((JCFieldAccess) tree).selected);
  22.312 +            case TYPEAPPLY:
  22.313 +                return getStartPos(((JCTypeApply) tree).clazz);
  22.314 +            case TYPEARRAY:
  22.315 +                return getStartPos(((JCArrayTypeTree) tree).elemtype);
  22.316 +            case TYPETEST:
  22.317 +                return getStartPos(((JCInstanceOf) tree).expr);
  22.318 +            case POSTINC:
  22.319 +            case POSTDEC:
  22.320 +                return getStartPos(((JCUnary) tree).arg);
  22.321 +            case NEWCLASS: {
  22.322 +                JCNewClass node = (JCNewClass)tree;
  22.323 +                if (node.encl != null)
  22.324 +                    return getStartPos(node.encl);
  22.325 +                break;
  22.326 +            }
  22.327 +            case VARDEF: {
  22.328 +                JCVariableDecl node = (JCVariableDecl)tree;
  22.329 +                if (node.mods.pos != Position.NOPOS) {
  22.330 +                    return node.mods.pos;
  22.331 +                } else {
  22.332 +                    return getStartPos(node.vartype);
  22.333 +                }
  22.334 +            }
  22.335 +            case ERRONEOUS: {
  22.336 +                JCErroneous node = (JCErroneous)tree;
  22.337 +                if (node.errs != null && node.errs.nonEmpty())
  22.338 +                    return getStartPos(node.errs.head);
  22.339 +            }
  22.340          }
  22.341          return tree.pos;
  22.342      }
  22.343 @@ -350,75 +360,75 @@
  22.344              return mapPos;
  22.345  
  22.346          switch(tree.getTag()) {
  22.347 -        case(JCTree.BITOR_ASG): case(JCTree.BITXOR_ASG): case(JCTree.BITAND_ASG):
  22.348 -        case(JCTree.SL_ASG): case(JCTree.SR_ASG): case(JCTree.USR_ASG):
  22.349 -        case(JCTree.PLUS_ASG): case(JCTree.MINUS_ASG): case(JCTree.MUL_ASG):
  22.350 -        case(JCTree.DIV_ASG): case(JCTree.MOD_ASG):
  22.351 -            return getEndPos(((JCAssignOp) tree).rhs, endPositions);
  22.352 -        case(JCTree.OR): case(JCTree.AND): case(JCTree.BITOR):
  22.353 -        case(JCTree.BITXOR): case(JCTree.BITAND): case(JCTree.EQ):
  22.354 -        case(JCTree.NE): case(JCTree.LT): case(JCTree.GT):
  22.355 -        case(JCTree.LE): case(JCTree.GE): case(JCTree.SL):
  22.356 -        case(JCTree.SR): case(JCTree.USR): case(JCTree.PLUS):
  22.357 -        case(JCTree.MINUS): case(JCTree.MUL): case(JCTree.DIV):
  22.358 -        case(JCTree.MOD):
  22.359 -            return getEndPos(((JCBinary) tree).rhs, endPositions);
  22.360 -        case(JCTree.CASE):
  22.361 -            return getEndPos(((JCCase) tree).stats.last(), endPositions);
  22.362 -        case(JCTree.CATCH):
  22.363 -            return getEndPos(((JCCatch) tree).body, endPositions);
  22.364 -        case(JCTree.CONDEXPR):
  22.365 -            return getEndPos(((JCConditional) tree).falsepart, endPositions);
  22.366 -        case(JCTree.FORLOOP):
  22.367 -            return getEndPos(((JCForLoop) tree).body, endPositions);
  22.368 -        case(JCTree.FOREACHLOOP):
  22.369 -            return getEndPos(((JCEnhancedForLoop) tree).body, endPositions);
  22.370 -        case(JCTree.IF): {
  22.371 -            JCIf node = (JCIf)tree;
  22.372 -            if (node.elsepart == null) {
  22.373 -                return getEndPos(node.thenpart, endPositions);
  22.374 -            } else {
  22.375 -                return getEndPos(node.elsepart, endPositions);
  22.376 +            case BITOR_ASG: case BITXOR_ASG: case BITAND_ASG:
  22.377 +            case SL_ASG: case SR_ASG: case USR_ASG:
  22.378 +            case PLUS_ASG: case MINUS_ASG: case MUL_ASG:
  22.379 +            case DIV_ASG: case MOD_ASG:
  22.380 +                return getEndPos(((JCAssignOp) tree).rhs, endPositions);
  22.381 +            case OR: case AND: case BITOR:
  22.382 +            case BITXOR: case BITAND: case EQ:
  22.383 +            case NE: case LT: case GT:
  22.384 +            case LE: case GE: case SL:
  22.385 +            case SR: case USR: case PLUS:
  22.386 +            case MINUS: case MUL: case DIV:
  22.387 +            case MOD:
  22.388 +                return getEndPos(((JCBinary) tree).rhs, endPositions);
  22.389 +            case CASE:
  22.390 +                return getEndPos(((JCCase) tree).stats.last(), endPositions);
  22.391 +            case CATCH:
  22.392 +                return getEndPos(((JCCatch) tree).body, endPositions);
  22.393 +            case CONDEXPR:
  22.394 +                return getEndPos(((JCConditional) tree).falsepart, endPositions);
  22.395 +            case FORLOOP:
  22.396 +                return getEndPos(((JCForLoop) tree).body, endPositions);
  22.397 +            case FOREACHLOOP:
  22.398 +                return getEndPos(((JCEnhancedForLoop) tree).body, endPositions);
  22.399 +            case IF: {
  22.400 +                JCIf node = (JCIf)tree;
  22.401 +                if (node.elsepart == null) {
  22.402 +                    return getEndPos(node.thenpart, endPositions);
  22.403 +                } else {
  22.404 +                    return getEndPos(node.elsepart, endPositions);
  22.405 +                }
  22.406              }
  22.407 -        }
  22.408 -        case(JCTree.LABELLED):
  22.409 -            return getEndPos(((JCLabeledStatement) tree).body, endPositions);
  22.410 -        case(JCTree.MODIFIERS):
  22.411 -            return getEndPos(((JCModifiers) tree).annotations.last(), endPositions);
  22.412 -        case(JCTree.SYNCHRONIZED):
  22.413 -            return getEndPos(((JCSynchronized) tree).body, endPositions);
  22.414 -        case(JCTree.TOPLEVEL):
  22.415 -            return getEndPos(((JCCompilationUnit) tree).defs.last(), endPositions);
  22.416 -        case(JCTree.TRY): {
  22.417 -            JCTry node = (JCTry)tree;
  22.418 -            if (node.finalizer != null) {
  22.419 -                return getEndPos(node.finalizer, endPositions);
  22.420 -            } else if (!node.catchers.isEmpty()) {
  22.421 -                return getEndPos(node.catchers.last(), endPositions);
  22.422 -            } else {
  22.423 -                return getEndPos(node.body, endPositions);
  22.424 +            case LABELLED:
  22.425 +                return getEndPos(((JCLabeledStatement) tree).body, endPositions);
  22.426 +            case MODIFIERS:
  22.427 +                return getEndPos(((JCModifiers) tree).annotations.last(), endPositions);
  22.428 +            case SYNCHRONIZED:
  22.429 +                return getEndPos(((JCSynchronized) tree).body, endPositions);
  22.430 +            case TOPLEVEL:
  22.431 +                return getEndPos(((JCCompilationUnit) tree).defs.last(), endPositions);
  22.432 +            case TRY: {
  22.433 +                JCTry node = (JCTry)tree;
  22.434 +                if (node.finalizer != null) {
  22.435 +                    return getEndPos(node.finalizer, endPositions);
  22.436 +                } else if (!node.catchers.isEmpty()) {
  22.437 +                    return getEndPos(node.catchers.last(), endPositions);
  22.438 +                } else {
  22.439 +                    return getEndPos(node.body, endPositions);
  22.440 +                }
  22.441              }
  22.442 -        }
  22.443 -        case(JCTree.WILDCARD):
  22.444 -            return getEndPos(((JCWildcard) tree).inner, endPositions);
  22.445 -        case(JCTree.TYPECAST):
  22.446 -            return getEndPos(((JCTypeCast) tree).expr, endPositions);
  22.447 -        case(JCTree.TYPETEST):
  22.448 -            return getEndPos(((JCInstanceOf) tree).clazz, endPositions);
  22.449 -        case(JCTree.POS):
  22.450 -        case(JCTree.NEG):
  22.451 -        case(JCTree.NOT):
  22.452 -        case(JCTree.COMPL):
  22.453 -        case(JCTree.PREINC):
  22.454 -        case(JCTree.PREDEC):
  22.455 -            return getEndPos(((JCUnary) tree).arg, endPositions);
  22.456 -        case(JCTree.WHILELOOP):
  22.457 -            return getEndPos(((JCWhileLoop) tree).body, endPositions);
  22.458 -        case(JCTree.ERRONEOUS): {
  22.459 -            JCErroneous node = (JCErroneous)tree;
  22.460 -            if (node.errs != null && node.errs.nonEmpty())
  22.461 -                return getEndPos(node.errs.last(), endPositions);
  22.462 -        }
  22.463 +            case WILDCARD:
  22.464 +                return getEndPos(((JCWildcard) tree).inner, endPositions);
  22.465 +            case TYPECAST:
  22.466 +                return getEndPos(((JCTypeCast) tree).expr, endPositions);
  22.467 +            case TYPETEST:
  22.468 +                return getEndPos(((JCInstanceOf) tree).clazz, endPositions);
  22.469 +            case POS:
  22.470 +            case NEG:
  22.471 +            case NOT:
  22.472 +            case COMPL:
  22.473 +            case PREINC:
  22.474 +            case PREDEC:
  22.475 +                return getEndPos(((JCUnary) tree).arg, endPositions);
  22.476 +            case WHILELOOP:
  22.477 +                return getEndPos(((JCWhileLoop) tree).body, endPositions);
  22.478 +            case ERRONEOUS: {
  22.479 +                JCErroneous node = (JCErroneous)tree;
  22.480 +                if (node.errs != null && node.errs.nonEmpty())
  22.481 +                    return getEndPos(node.errs.last(), endPositions);
  22.482 +            }
  22.483          }
  22.484          return Position.NOPOS;
  22.485      }
  22.486 @@ -443,11 +453,11 @@
  22.487      /** The position of the finalizer of given try/synchronized statement.
  22.488       */
  22.489      public static int finalizerPos(JCTree tree) {
  22.490 -        if (tree.getTag() == JCTree.TRY) {
  22.491 +        if (tree.hasTag(TRY)) {
  22.492              JCTry t = (JCTry) tree;
  22.493              Assert.checkNonNull(t.finalizer);
  22.494              return firstStatPos(t.finalizer);
  22.495 -        } else if (tree.getTag() == JCTree.SYNCHRONIZED) {
  22.496 +        } else if (tree.hasTag(SYNCHRONIZED)) {
  22.497              return endPos(((JCSynchronized) tree).body);
  22.498          } else {
  22.499              throw new AssertionError();
  22.500 @@ -547,9 +557,9 @@
  22.501      public static JCTree referencedStatement(JCLabeledStatement tree) {
  22.502          JCTree t = tree;
  22.503          do t = ((JCLabeledStatement) t).body;
  22.504 -        while (t.getTag() == JCTree.LABELLED);
  22.505 +        while (t.hasTag(LABELLED));
  22.506          switch (t.getTag()) {
  22.507 -        case JCTree.DOLOOP: case JCTree.WHILELOOP: case JCTree.FORLOOP: case JCTree.FOREACHLOOP: case JCTree.SWITCH:
  22.508 +        case DOLOOP: case WHILELOOP: case FORLOOP: case FOREACHLOOP: case SWITCH:
  22.509              return t;
  22.510          default:
  22.511              return tree;
  22.512 @@ -559,7 +569,7 @@
  22.513      /** Skip parens and return the enclosed expression
  22.514       */
  22.515      public static JCExpression skipParens(JCExpression tree) {
  22.516 -        while (tree.getTag() == JCTree.PARENS) {
  22.517 +        while (tree.hasTag(PARENS)) {
  22.518              tree = ((JCParens) tree).expr;
  22.519          }
  22.520          return tree;
  22.521 @@ -568,7 +578,7 @@
  22.522      /** Skip parens and return the enclosed expression
  22.523       */
  22.524      public static JCTree skipParens(JCTree tree) {
  22.525 -        if (tree.getTag() == JCTree.PARENS)
  22.526 +        if (tree.hasTag(PARENS))
  22.527              return skipParens((JCParens)tree);
  22.528          else
  22.529              return tree;
  22.530 @@ -588,11 +598,11 @@
  22.531       */
  22.532      public static Name name(JCTree tree) {
  22.533          switch (tree.getTag()) {
  22.534 -        case JCTree.IDENT:
  22.535 +        case IDENT:
  22.536              return ((JCIdent) tree).name;
  22.537 -        case JCTree.SELECT:
  22.538 +        case SELECT:
  22.539              return ((JCFieldAccess) tree).name;
  22.540 -        case JCTree.TYPEAPPLY:
  22.541 +        case TYPEAPPLY:
  22.542              return name(((JCTypeApply) tree).clazz);
  22.543          default:
  22.544              return null;
  22.545 @@ -605,9 +615,9 @@
  22.546      public static Name fullName(JCTree tree) {
  22.547          tree = skipParens(tree);
  22.548          switch (tree.getTag()) {
  22.549 -        case JCTree.IDENT:
  22.550 +        case IDENT:
  22.551              return ((JCIdent) tree).name;
  22.552 -        case JCTree.SELECT:
  22.553 +        case SELECT:
  22.554              Name sname = fullName(((JCFieldAccess) tree).selected);
  22.555              return sname == null ? null : sname.append('.', name(tree));
  22.556          default:
  22.557 @@ -618,11 +628,11 @@
  22.558      public static Symbol symbolFor(JCTree node) {
  22.559          node = skipParens(node);
  22.560          switch (node.getTag()) {
  22.561 -        case JCTree.CLASSDEF:
  22.562 +        case CLASSDEF:
  22.563              return ((JCClassDecl) node).sym;
  22.564 -        case JCTree.METHODDEF:
  22.565 +        case METHODDEF:
  22.566              return ((JCMethodDecl) node).sym;
  22.567 -        case JCTree.VARDEF:
  22.568 +        case VARDEF:
  22.569              return ((JCVariableDecl) node).sym;
  22.570          default:
  22.571              return null;
  22.572 @@ -632,9 +642,9 @@
  22.573      public static boolean isDeclaration(JCTree node) {
  22.574          node = skipParens(node);
  22.575          switch (node.getTag()) {
  22.576 -        case JCTree.CLASSDEF:
  22.577 -        case JCTree.METHODDEF:
  22.578 -        case JCTree.VARDEF:
  22.579 +        case CLASSDEF:
  22.580 +        case METHODDEF:
  22.581 +        case VARDEF:
  22.582              return true;
  22.583          default:
  22.584              return false;
  22.585 @@ -647,11 +657,11 @@
  22.586      public static Symbol symbol(JCTree tree) {
  22.587          tree = skipParens(tree);
  22.588          switch (tree.getTag()) {
  22.589 -        case JCTree.IDENT:
  22.590 +        case IDENT:
  22.591              return ((JCIdent) tree).sym;
  22.592 -        case JCTree.SELECT:
  22.593 +        case SELECT:
  22.594              return ((JCFieldAccess) tree).sym;
  22.595 -        case JCTree.TYPEAPPLY:
  22.596 +        case TYPEAPPLY:
  22.597              return symbol(((JCTypeApply) tree).clazz);
  22.598          default:
  22.599              return null;
  22.600 @@ -661,7 +671,7 @@
  22.601      /** Return true if this is a nonstatic selection. */
  22.602      public static boolean nonstaticSelect(JCTree tree) {
  22.603          tree = skipParens(tree);
  22.604 -        if (tree.getTag() != JCTree.SELECT) return false;
  22.605 +        if (!tree.hasTag(SELECT)) return false;
  22.606          JCFieldAccess s = (JCFieldAccess) tree;
  22.607          Symbol e = symbol(s.selected);
  22.608          return e == null || (e.kind != Kinds.PCK && e.kind != Kinds.TYP);
  22.609 @@ -672,9 +682,9 @@
  22.610      public static void setSymbol(JCTree tree, Symbol sym) {
  22.611          tree = skipParens(tree);
  22.612          switch (tree.getTag()) {
  22.613 -        case JCTree.IDENT:
  22.614 +        case IDENT:
  22.615              ((JCIdent) tree).sym = sym; break;
  22.616 -        case JCTree.SELECT:
  22.617 +        case SELECT:
  22.618              ((JCFieldAccess) tree).sym = sym; break;
  22.619          default:
  22.620          }
  22.621 @@ -685,13 +695,13 @@
  22.622       */
  22.623      public static long flags(JCTree tree) {
  22.624          switch (tree.getTag()) {
  22.625 -        case JCTree.VARDEF:
  22.626 +        case VARDEF:
  22.627              return ((JCVariableDecl) tree).mods.flags;
  22.628 -        case JCTree.METHODDEF:
  22.629 +        case METHODDEF:
  22.630              return ((JCMethodDecl) tree).mods.flags;
  22.631 -        case JCTree.CLASSDEF:
  22.632 +        case CLASSDEF:
  22.633              return ((JCClassDecl) tree).mods.flags;
  22.634 -        case JCTree.BLOCK:
  22.635 +        case BLOCK:
  22.636              return ((JCBlock) tree).flags;
  22.637          default:
  22.638              return 0;
  22.639 @@ -739,155 +749,155 @@
  22.640  
  22.641      /** Map operators to their precedence levels.
  22.642       */
  22.643 -    public static int opPrec(int op) {
  22.644 +    public static int opPrec(JCTree.Tag op) {
  22.645          switch(op) {
  22.646 -        case JCTree.POS:
  22.647 -        case JCTree.NEG:
  22.648 -        case JCTree.NOT:
  22.649 -        case JCTree.COMPL:
  22.650 -        case JCTree.PREINC:
  22.651 -        case JCTree.PREDEC: return prefixPrec;
  22.652 -        case JCTree.POSTINC:
  22.653 -        case JCTree.POSTDEC:
  22.654 -        case JCTree.NULLCHK: return postfixPrec;
  22.655 -        case JCTree.ASSIGN: return assignPrec;
  22.656 -        case JCTree.BITOR_ASG:
  22.657 -        case JCTree.BITXOR_ASG:
  22.658 -        case JCTree.BITAND_ASG:
  22.659 -        case JCTree.SL_ASG:
  22.660 -        case JCTree.SR_ASG:
  22.661 -        case JCTree.USR_ASG:
  22.662 -        case JCTree.PLUS_ASG:
  22.663 -        case JCTree.MINUS_ASG:
  22.664 -        case JCTree.MUL_ASG:
  22.665 -        case JCTree.DIV_ASG:
  22.666 -        case JCTree.MOD_ASG: return assignopPrec;
  22.667 -        case JCTree.OR: return orPrec;
  22.668 -        case JCTree.AND: return andPrec;
  22.669 -        case JCTree.EQ:
  22.670 -        case JCTree.NE: return eqPrec;
  22.671 -        case JCTree.LT:
  22.672 -        case JCTree.GT:
  22.673 -        case JCTree.LE:
  22.674 -        case JCTree.GE: return ordPrec;
  22.675 -        case JCTree.BITOR: return bitorPrec;
  22.676 -        case JCTree.BITXOR: return bitxorPrec;
  22.677 -        case JCTree.BITAND: return bitandPrec;
  22.678 -        case JCTree.SL:
  22.679 -        case JCTree.SR:
  22.680 -        case JCTree.USR: return shiftPrec;
  22.681 -        case JCTree.PLUS:
  22.682 -        case JCTree.MINUS: return addPrec;
  22.683 -        case JCTree.MUL:
  22.684 -        case JCTree.DIV:
  22.685 -        case JCTree.MOD: return mulPrec;
  22.686 -        case JCTree.TYPETEST: return ordPrec;
  22.687 +        case POS:
  22.688 +        case NEG:
  22.689 +        case NOT:
  22.690 +        case COMPL:
  22.691 +        case PREINC:
  22.692 +        case PREDEC: return prefixPrec;
  22.693 +        case POSTINC:
  22.694 +        case POSTDEC:
  22.695 +        case NULLCHK: return postfixPrec;
  22.696 +        case ASSIGN: return assignPrec;
  22.697 +        case BITOR_ASG:
  22.698 +        case BITXOR_ASG:
  22.699 +        case BITAND_ASG:
  22.700 +        case SL_ASG:
  22.701 +        case SR_ASG:
  22.702 +        case USR_ASG:
  22.703 +        case PLUS_ASG:
  22.704 +        case MINUS_ASG:
  22.705 +        case MUL_ASG:
  22.706 +        case DIV_ASG:
  22.707 +        case MOD_ASG: return assignopPrec;
  22.708 +        case OR: return orPrec;
  22.709 +        case AND: return andPrec;
  22.710 +        case EQ:
  22.711 +        case NE: return eqPrec;
  22.712 +        case LT:
  22.713 +        case GT:
  22.714 +        case LE:
  22.715 +        case GE: return ordPrec;
  22.716 +        case BITOR: return bitorPrec;
  22.717 +        case BITXOR: return bitxorPrec;
  22.718 +        case BITAND: return bitandPrec;
  22.719 +        case SL:
  22.720 +        case SR:
  22.721 +        case USR: return shiftPrec;
  22.722 +        case PLUS:
  22.723 +        case MINUS: return addPrec;
  22.724 +        case MUL:
  22.725 +        case DIV:
  22.726 +        case MOD: return mulPrec;
  22.727 +        case TYPETEST: return ordPrec;
  22.728          default: throw new AssertionError();
  22.729          }
  22.730      }
  22.731  
  22.732 -    static Tree.Kind tagToKind(int tag) {
  22.733 +    static Tree.Kind tagToKind(JCTree.Tag tag) {
  22.734          switch (tag) {
  22.735          // Postfix expressions
  22.736 -        case JCTree.POSTINC:           // _ ++
  22.737 +        case POSTINC:           // _ ++
  22.738              return Tree.Kind.POSTFIX_INCREMENT;
  22.739 -        case JCTree.POSTDEC:           // _ --
  22.740 +        case POSTDEC:           // _ --
  22.741              return Tree.Kind.POSTFIX_DECREMENT;
  22.742  
  22.743          // Unary operators
  22.744 -        case JCTree.PREINC:            // ++ _
  22.745 +        case PREINC:            // ++ _
  22.746              return Tree.Kind.PREFIX_INCREMENT;
  22.747 -        case JCTree.PREDEC:            // -- _
  22.748 +        case PREDEC:            // -- _
  22.749              return Tree.Kind.PREFIX_DECREMENT;
  22.750 -        case JCTree.POS:               // +
  22.751 +        case POS:               // +
  22.752              return Tree.Kind.UNARY_PLUS;
  22.753 -        case JCTree.NEG:               // -
  22.754 +        case NEG:               // -
  22.755              return Tree.Kind.UNARY_MINUS;
  22.756 -        case JCTree.COMPL:             // ~
  22.757 +        case COMPL:             // ~
  22.758              return Tree.Kind.BITWISE_COMPLEMENT;
  22.759 -        case JCTree.NOT:               // !
  22.760 +        case NOT:               // !
  22.761              return Tree.Kind.LOGICAL_COMPLEMENT;
  22.762  
  22.763          // Binary operators
  22.764  
  22.765          // Multiplicative operators
  22.766 -        case JCTree.MUL:               // *
  22.767 +        case MUL:               // *
  22.768              return Tree.Kind.MULTIPLY;
  22.769 -        case JCTree.DIV:               // /
  22.770 +        case DIV:               // /
  22.771              return Tree.Kind.DIVIDE;
  22.772 -        case JCTree.MOD:               // %
  22.773 +        case MOD:               // %
  22.774              return Tree.Kind.REMAINDER;
  22.775  
  22.776          // Additive operators
  22.777 -        case JCTree.PLUS:              // +
  22.778 +        case PLUS:              // +
  22.779              return Tree.Kind.PLUS;
  22.780 -        case JCTree.MINUS:             // -
  22.781 +        case MINUS:             // -
  22.782              return Tree.Kind.MINUS;
  22.783  
  22.784          // Shift operators
  22.785 -        case JCTree.SL:                // <<
  22.786 +        case SL:                // <<
  22.787              return Tree.Kind.LEFT_SHIFT;
  22.788 -        case JCTree.SR:                // >>
  22.789 +        case SR:                // >>
  22.790              return Tree.Kind.RIGHT_SHIFT;
  22.791 -        case JCTree.USR:               // >>>
  22.792 +        case USR:               // >>>
  22.793              return Tree.Kind.UNSIGNED_RIGHT_SHIFT;
  22.794  
  22.795          // Relational operators
  22.796 -        case JCTree.LT:                // <
  22.797 +        case LT:                // <
  22.798              return Tree.Kind.LESS_THAN;
  22.799 -        case JCTree.GT:                // >
  22.800 +        case GT:                // >
  22.801              return Tree.Kind.GREATER_THAN;
  22.802 -        case JCTree.LE:                // <=
  22.803 +        case LE:                // <=
  22.804              return Tree.Kind.LESS_THAN_EQUAL;
  22.805 -        case JCTree.GE:                // >=
  22.806 +        case GE:                // >=
  22.807              return Tree.Kind.GREATER_THAN_EQUAL;
  22.808  
  22.809          // Equality operators
  22.810 -        case JCTree.EQ:                // ==
  22.811 +        case EQ:                // ==
  22.812              return Tree.Kind.EQUAL_TO;
  22.813 -        case JCTree.NE:                // !=
  22.814 +        case NE:                // !=
  22.815              return Tree.Kind.NOT_EQUAL_TO;
  22.816  
  22.817          // Bitwise and logical operators
  22.818 -        case JCTree.BITAND:            // &
  22.819 +        case BITAND:            // &
  22.820              return Tree.Kind.AND;
  22.821 -        case JCTree.BITXOR:            // ^
  22.822 +        case BITXOR:            // ^
  22.823              return Tree.Kind.XOR;
  22.824 -        case JCTree.BITOR:             // |
  22.825 +        case BITOR:             // |
  22.826              return Tree.Kind.OR;
  22.827  
  22.828          // Conditional operators
  22.829 -        case JCTree.AND:               // &&
  22.830 +        case AND:               // &&
  22.831              return Tree.Kind.CONDITIONAL_AND;
  22.832 -        case JCTree.OR:                // ||
  22.833 +        case OR:                // ||
  22.834              return Tree.Kind.CONDITIONAL_OR;
  22.835  
  22.836          // Assignment operators
  22.837 -        case JCTree.MUL_ASG:           // *=
  22.838 +        case MUL_ASG:           // *=
  22.839              return Tree.Kind.MULTIPLY_ASSIGNMENT;
  22.840 -        case JCTree.DIV_ASG:           // /=
  22.841 +        case DIV_ASG:           // /=
  22.842              return Tree.Kind.DIVIDE_ASSIGNMENT;
  22.843 -        case JCTree.MOD_ASG:           // %=
  22.844 +        case MOD_ASG:           // %=
  22.845              return Tree.Kind.REMAINDER_ASSIGNMENT;
  22.846 -        case JCTree.PLUS_ASG:          // +=
  22.847 +        case PLUS_ASG:          // +=
  22.848              return Tree.Kind.PLUS_ASSIGNMENT;
  22.849 -        case JCTree.MINUS_ASG:         // -=
  22.850 +        case MINUS_ASG:         // -=
  22.851              return Tree.Kind.MINUS_ASSIGNMENT;
  22.852 -        case JCTree.SL_ASG:            // <<=
  22.853 +        case SL_ASG:            // <<=
  22.854              return Tree.Kind.LEFT_SHIFT_ASSIGNMENT;
  22.855 -        case JCTree.SR_ASG:            // >>=
  22.856 +        case SR_ASG:            // >>=
  22.857              return Tree.Kind.RIGHT_SHIFT_ASSIGNMENT;
  22.858 -        case JCTree.USR_ASG:           // >>>=
  22.859 +        case USR_ASG:           // >>>=
  22.860              return Tree.Kind.UNSIGNED_RIGHT_SHIFT_ASSIGNMENT;
  22.861 -        case JCTree.BITAND_ASG:        // &=
  22.862 +        case BITAND_ASG:        // &=
  22.863              return Tree.Kind.AND_ASSIGNMENT;
  22.864 -        case JCTree.BITXOR_ASG:        // ^=
  22.865 +        case BITXOR_ASG:        // ^=
  22.866              return Tree.Kind.XOR_ASSIGNMENT;
  22.867 -        case JCTree.BITOR_ASG:         // |=
  22.868 +        case BITOR_ASG:         // |=
  22.869              return Tree.Kind.OR_ASSIGNMENT;
  22.870  
  22.871          // Null check (implementation detail), for example, __.getClass()
  22.872 -        case JCTree.NULLCHK:
  22.873 +        case NULLCHK:
  22.874              return Tree.Kind.OTHER;
  22.875  
  22.876          default:
  22.877 @@ -901,13 +911,13 @@
  22.878       */
  22.879      public static JCExpression typeIn(JCExpression tree) {
  22.880          switch (tree.getTag()) {
  22.881 -        case JCTree.IDENT: /* simple names */
  22.882 -        case JCTree.TYPEIDENT: /* primitive name */
  22.883 -        case JCTree.SELECT: /* qualified name */
  22.884 -        case JCTree.TYPEARRAY: /* array types */
  22.885 -        case JCTree.WILDCARD: /* wild cards */
  22.886 -        case JCTree.TYPEPARAMETER: /* type parameters */
  22.887 -        case JCTree.TYPEAPPLY: /* parameterized types */
  22.888 +        case IDENT: /* simple names */
  22.889 +        case TYPEIDENT: /* primitive name */
  22.890 +        case SELECT: /* qualified name */
  22.891 +        case TYPEARRAY: /* array types */
  22.892 +        case WILDCARD: /* wild cards */
  22.893 +        case TYPEPARAMETER: /* type parameters */
  22.894 +        case TYPEAPPLY: /* parameterized types */
  22.895              return tree;
  22.896          default:
  22.897              throw new AssertionError("Unexpected type tree: " + tree);
  22.898 @@ -916,9 +926,9 @@
  22.899  
  22.900      public static JCTree innermostType(JCTree type) {
  22.901          switch (type.getTag()) {
  22.902 -        case JCTree.TYPEARRAY:
  22.903 +        case TYPEARRAY:
  22.904              return innermostType(((JCArrayTypeTree)type).elemtype);
  22.905 -        case JCTree.WILDCARD:
  22.906 +        case WILDCARD:
  22.907              return innermostType(((JCWildcard)type).inner);
  22.908          default:
  22.909              return type;
    23.1 --- a/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java	Sat Nov 05 00:02:33 2011 -0700
    23.2 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java	Tue Nov 08 11:51:05 2011 -0800
    23.3 @@ -363,19 +363,19 @@
    23.4          return tree;
    23.5      }
    23.6  
    23.7 -    public JCAssignOp Assignop(int opcode, JCTree lhs, JCTree rhs) {
    23.8 +    public JCAssignOp Assignop(JCTree.Tag opcode, JCTree lhs, JCTree rhs) {
    23.9          JCAssignOp tree = new JCAssignOp(opcode, lhs, rhs, null);
   23.10          tree.pos = pos;
   23.11          return tree;
   23.12      }
   23.13  
   23.14 -    public JCUnary Unary(int opcode, JCExpression arg) {
   23.15 +    public JCUnary Unary(JCTree.Tag opcode, JCExpression arg) {
   23.16          JCUnary tree = new JCUnary(opcode, arg);
   23.17          tree.pos = pos;
   23.18          return tree;
   23.19      }
   23.20  
   23.21 -    public JCBinary Binary(int opcode, JCExpression lhs, JCExpression rhs) {
   23.22 +    public JCBinary Binary(JCTree.Tag opcode, JCExpression lhs, JCExpression rhs) {
   23.23          JCBinary tree = new JCBinary(opcode, lhs, rhs, null);
   23.24          tree.pos = pos;
   23.25          return tree;
    24.1 --- a/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java	Sat Nov 05 00:02:33 2011 -0700
    24.2 +++ b/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java	Tue Nov 08 11:51:05 2011 -0800
    24.3 @@ -65,6 +65,7 @@
    24.4  import com.sun.tools.javac.util.Position;
    24.5  
    24.6  import static com.sun.tools.javac.code.Kinds.*;
    24.7 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
    24.8  
    24.9  /**
   24.10   * Represents a java class and provides access to information
   24.11 @@ -1083,7 +1084,7 @@
   24.12  
   24.13          Name asterisk = tsym.name.table.names.asterisk;
   24.14          for (JCTree t : compenv.toplevel.defs) {
   24.15 -            if (t.getTag() == JCTree.IMPORT) {
   24.16 +            if (t.hasTag(IMPORT)) {
   24.17                  JCTree imp = ((JCImport) t).qualid;
   24.18                  if ((TreeInfo.name(imp) != asterisk) &&
   24.19                          (imp.type.tsym.kind & Kinds.TYP) != 0) {
   24.20 @@ -1124,7 +1125,7 @@
   24.21          if (compenv == null) return new PackageDocImpl[0];
   24.22  
   24.23          for (JCTree t : compenv.toplevel.defs) {
   24.24 -            if (t.getTag() == JCTree.IMPORT) {
   24.25 +            if (t.hasTag(IMPORT)) {
   24.26                  JCTree imp = ((JCImport) t).qualid;
   24.27                  if (TreeInfo.name(imp) == names.asterisk) {
   24.28                      JCFieldAccess sel = (JCFieldAccess)imp;
    25.1 --- a/src/share/classes/com/sun/tools/javadoc/JavadocTool.java	Sat Nov 05 00:02:33 2011 -0700
    25.2 +++ b/src/share/classes/com/sun/tools/javadoc/JavadocTool.java	Tue Nov 08 11:51:05 2011 -0800
    25.3 @@ -419,7 +419,7 @@
    25.4          ListBuffer<JCClassDecl> result = new ListBuffer<JCClassDecl>();
    25.5          for (JCCompilationUnit t : trees) {
    25.6              for (JCTree def : t.defs) {
    25.7 -                if (def.getTag() == JCTree.CLASSDEF)
    25.8 +                if (def.hasTag(JCTree.Tag.CLASSDEF))
    25.9                      result.append((JCClassDecl)def);
   25.10              }
   25.11          }
    26.1 --- a/test/tools/javac/failover/CheckAttributedTree.java	Sat Nov 05 00:02:33 2011 -0700
    26.2 +++ b/test/tools/javac/failover/CheckAttributedTree.java	Tue Nov 08 11:51:05 2011 -0800
    26.3 @@ -1,5 +1,5 @@
    26.4  /*
    26.5 - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
    26.6 + * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
    26.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    26.8   *
    26.9   * This code is free software; you can redistribute it and/or modify it
   26.10 @@ -85,6 +85,8 @@
   26.11  import java.util.Set;
   26.12  import javax.lang.model.element.Element;
   26.13  
   26.14 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   26.15 +
   26.16  /**
   26.17   * Utility and test program to check validity of tree positions for tree nodes.
   26.18   * The program can be run standalone, or as a jtreg test.  In standalone mode,
   26.19 @@ -289,7 +291,7 @@
   26.20              for (CompilationUnitTree t : trees) {
   26.21                 JCCompilationUnit cu = (JCCompilationUnit)t;
   26.22                 for (JCTree def : cu.defs) {
   26.23 -                   if (def.getTag() == JCTree.CLASSDEF &&
   26.24 +                   if (def.hasTag(CLASSDEF) &&
   26.25                             analyzedElems.contains(((JCTree.JCClassDecl)def).sym)) {
   26.26                         //System.out.println("Adding pair...");
   26.27                         res.add(new Pair<>(cu, def));
   26.28 @@ -373,9 +375,9 @@
   26.29  
   26.30          private boolean mandatoryType(JCTree that) {
   26.31              return that instanceof JCTree.JCExpression ||
   26.32 -                    that.getTag() == JCTree.VARDEF ||
   26.33 -                    that.getTag() == JCTree.METHODDEF ||
   26.34 -                    that.getTag() == JCTree.CLASSDEF;
   26.35 +                    that.hasTag(VARDEF) ||
   26.36 +                    that.hasTag(METHODDEF) ||
   26.37 +                    that.hasTag(CLASSDEF);
   26.38          }
   26.39  
   26.40          private final List<String> excludedFields = Arrays.asList("varargsElement");
   26.41 @@ -429,7 +431,7 @@
   26.42      private class Info {
   26.43          Info() {
   26.44              tree = null;
   26.45 -            tag = JCTree.ERRONEOUS;
   26.46 +            tag = ERRONEOUS;
   26.47              start = 0;
   26.48              pos = 0;
   26.49              end = Integer.MAX_VALUE;
   26.50 @@ -449,7 +451,7 @@
   26.51          }
   26.52  
   26.53          final JCTree tree;
   26.54 -        final int tag;
   26.55 +        final JCTree.Tag tag;
   26.56          final int start;
   26.57          final int pos;
   26.58          final int end;
   26.59 @@ -457,27 +459,10 @@
   26.60  
   26.61      /**
   26.62       * Names for tree tags.
   26.63 -     * javac does not provide an API to convert tag values to strings, so this class uses
   26.64 -     * reflection to determine names of public static final int values in JCTree.
   26.65       */
   26.66      private static class TreeUtil {
   26.67 -        String nameFromTag(int tag) {
   26.68 -            if (names == null) {
   26.69 -                names = new HashMap<Integer, String>();
   26.70 -                Class c = JCTree.class;
   26.71 -                for (Field f : c.getDeclaredFields()) {
   26.72 -                    if (f.getType().equals(int.class)) {
   26.73 -                        int mods = f.getModifiers();
   26.74 -                        if (Modifier.isPublic(mods) && Modifier.isStatic(mods) && Modifier.isFinal(mods)) {
   26.75 -                            try {
   26.76 -                                names.put(f.getInt(null), f.getName());
   26.77 -                            } catch (IllegalAccessException e) {
   26.78 -                            }
   26.79 -                        }
   26.80 -                    }
   26.81 -                }
   26.82 -            }
   26.83 -            String name = names.get(tag);
   26.84 +        String nameFromTag(JCTree.Tag tag) {
   26.85 +            String name = tag.name();
   26.86              return (name == null) ? "??" : name;
   26.87          }
   26.88  
   26.89 @@ -496,8 +481,6 @@
   26.90              }
   26.91              return buf;
   26.92          }
   26.93 -
   26.94 -        private Map<Integer, String> names;
   26.95      }
   26.96  
   26.97      /**
    27.1 --- a/test/tools/javac/tree/AbstractTreeScannerTest.java	Sat Nov 05 00:02:33 2011 -0700
    27.2 +++ b/test/tools/javac/tree/AbstractTreeScannerTest.java	Tue Nov 08 11:51:05 2011 -0800
    27.3 @@ -1,5 +1,5 @@
    27.4  /*
    27.5 - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
    27.6 + * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
    27.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    27.8   *
    27.9   * This code is free software; you can redistribute it and/or modify it
   27.10 @@ -274,7 +274,7 @@
   27.11          return fields;
   27.12      }
   27.13      // where
   27.14 -    Map<Integer, Set<Field>> map = new HashMap<Integer,Set<Field>>();
   27.15 +    Map<JCTree.Tag, Set<Field>> map = new HashMap<JCTree.Tag,Set<Field>>();
   27.16  
   27.17      /** Get the line number for the primary position for a tree.
   27.18       * The code is intended to be simple, although not necessarily efficient.
    28.1 --- a/test/tools/javac/tree/TreePosTest.java	Sat Nov 05 00:02:33 2011 -0700
    28.2 +++ b/test/tools/javac/tree/TreePosTest.java	Tue Nov 08 11:51:05 2011 -0800
    28.3 @@ -1,5 +1,5 @@
    28.4  /*
    28.5 - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
    28.6 + * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
    28.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    28.8   *
    28.9   * This code is free software; you can redistribute it and/or modify it
   28.10 @@ -80,6 +80,7 @@
   28.11  import com.sun.tools.javac.tree.TreeInfo;
   28.12  import com.sun.tools.javac.tree.TreeScanner;
   28.13  
   28.14 +import static com.sun.tools.javac.tree.JCTree.Tag.*;
   28.15  import static com.sun.tools.javac.util.Position.NOPOS;
   28.16  
   28.17  /**
   28.18 @@ -291,6 +292,14 @@
   28.19          errors++;
   28.20      }
   28.21  
   28.22 +    /**
   28.23 +     * Names for tree tags.
   28.24 +     */
   28.25 +    private static String getTagName(JCTree.Tag tag) {
   28.26 +        String name = tag.name();
   28.27 +        return (name == null) ? "??" : name;
   28.28 +    }
   28.29 +
   28.30      /** Number of files that have been analyzed. */
   28.31      int fileCount;
   28.32      /** Number of errors reported. */
   28.33 @@ -312,8 +321,6 @@
   28.34      Set<File> excludeFiles = new HashSet<File>();
   28.35      /** Set of tag names to be excluded from analysis. */
   28.36      Set<String> excludeTags = new HashSet<String>();
   28.37 -    /** Table of printable names for tree tag values. */
   28.38 -    TagNames tagNames = new TagNames();
   28.39  
   28.40      /**
   28.41       * Main class for testing assertions concerning tree positions for tree nodes.
   28.42 @@ -337,7 +344,7 @@
   28.43                  // there is no corresponding source text.
   28.44                  // Redundant semicolons in a class definition can cause empty
   28.45                  // initializer blocks with no positions.
   28.46 -                if ((self.tag == JCTree.MODIFIERS || self.tag == JCTree.BLOCK)
   28.47 +                if ((self.tag == MODIFIERS || self.tag == BLOCK)
   28.48                          && self.pos == NOPOS) {
   28.49                      // If pos is NOPOS, so should be the start and end positions
   28.50                      check("start == NOPOS", encl, self, self.start == NOPOS);
   28.51 @@ -359,15 +366,15 @@
   28.52                      //    e.g.    int[][] a = new int[2][];
   28.53                      check("encl.start <= start", encl, self, encl.start <= self.start);
   28.54                      check("start <= pos", encl, self, self.start <= self.pos);
   28.55 -                    if (!(self.tag == JCTree.TYPEARRAY
   28.56 -                            && (encl.tag == JCTree.VARDEF ||
   28.57 -                                encl.tag == JCTree.METHODDEF ||
   28.58 -                                encl.tag == JCTree.TYPEARRAY))) {
   28.59 +                    if (!(self.tag == TYPEARRAY
   28.60 +                            && (encl.tag == VARDEF ||
   28.61 +                                encl.tag == METHODDEF ||
   28.62 +                                encl.tag == TYPEARRAY))) {
   28.63                          check("encl.pos <= start || end <= encl.pos",
   28.64                                  encl, self, encl.pos <= self.start || self.end <= encl.pos);
   28.65                      }
   28.66                      check("pos <= end", encl, self, self.pos <= self.end);
   28.67 -                    if (!(self.tag == JCTree.TYPEARRAY && encl.tag == JCTree.TYPEARRAY)) {
   28.68 +                    if (!(self.tag == TYPEARRAY && encl.tag == TYPEARRAY)) {
   28.69                          check("end <= encl.end", encl, self, self.end <= encl.end);
   28.70                      }
   28.71                  }
   28.72 @@ -388,7 +395,7 @@
   28.73              if ((tree.mods.flags & Flags.ENUM) != 0) {
   28.74                  scan(tree.mods);
   28.75                  if (tree.init != null) {
   28.76 -                    if (tree.init.getTag() == JCTree.NEWCLASS) {
   28.77 +                    if (tree.init.hasTag(NEWCLASS)) {
   28.78                          JCNewClass init = (JCNewClass) tree.init;
   28.79                          if (init.args != null && init.args.nonEmpty()) {
   28.80                              scan(init.args);
   28.81 @@ -404,11 +411,11 @@
   28.82  
   28.83          boolean check(Info encl, Info self) {
   28.84              if (excludeTags.size() > 0) {
   28.85 -                if (encl != null && excludeTags.contains(tagNames.get(encl.tag))
   28.86 -                        || excludeTags.contains(tagNames.get(self.tag)))
   28.87 +                if (encl != null && excludeTags.contains(getTagName(encl.tag))
   28.88 +                        || excludeTags.contains(getTagName(self.tag)))
   28.89                      return false;
   28.90              }
   28.91 -            return tags.size() == 0 || tags.contains(tagNames.get(self.tag));
   28.92 +            return tags.size() == 0 || tags.contains(getTagName(self.tag));
   28.93          }
   28.94  
   28.95          void check(String label, Info encl, Info self, boolean ok) {
   28.96 @@ -439,7 +446,7 @@
   28.97      private class Info {
   28.98          Info() {
   28.99              tree = null;
  28.100 -            tag = JCTree.ERRONEOUS;
  28.101 +            tag = ERRONEOUS;
  28.102              start = 0;
  28.103              pos = 0;
  28.104              end = Integer.MAX_VALUE;
  28.105 @@ -455,46 +462,17 @@
  28.106  
  28.107          @Override
  28.108          public String toString() {
  28.109 -            return tagNames.get(tree.getTag()) + "[start:" + start + ",pos:" + pos + ",end:" + end + "]";
  28.110 +            return getTagName(tree.getTag()) + "[start:" + start + ",pos:" + pos + ",end:" + end + "]";
  28.111          }
  28.112  
  28.113          final JCTree tree;
  28.114 -        final int tag;
  28.115 +        final JCTree.Tag tag;
  28.116          final int start;
  28.117          final int pos;
  28.118          final int end;
  28.119      }
  28.120  
  28.121      /**
  28.122 -     * Names for tree tags.
  28.123 -     * javac does not provide an API to convert tag values to strings, so this class uses
  28.124 -     * reflection to determine names of public static final int values in JCTree.
  28.125 -     */
  28.126 -    private static class TagNames {
  28.127 -        String get(int tag) {
  28.128 -            if (map == null) {
  28.129 -                map = new HashMap<Integer, String>();
  28.130 -                Class c = JCTree.class;
  28.131 -                for (Field f : c.getDeclaredFields()) {
  28.132 -                    if (f.getType().equals(int.class)) {
  28.133 -                        int mods = f.getModifiers();
  28.134 -                        if (Modifier.isPublic(mods) && Modifier.isStatic(mods) && Modifier.isFinal(mods)) {
  28.135 -                            try {
  28.136 -                                map.put(f.getInt(null), f.getName());
  28.137 -                            } catch (IllegalAccessException e) {
  28.138 -                            }
  28.139 -                        }
  28.140 -                    }
  28.141 -                }
  28.142 -            }
  28.143 -            String name = map.get(tag);
  28.144 -            return (name == null) ? "??" : name;
  28.145 -        }
  28.146 -
  28.147 -        private Map<Integer, String> map;
  28.148 -    }
  28.149 -
  28.150 -    /**
  28.151       * Thrown when errors are found parsing a java file.
  28.152       */
  28.153      private static class ParseException extends Exception {
  28.154 @@ -719,7 +697,7 @@
  28.155  
  28.156              void setInfo(Info info) {
  28.157                  this.info = info;
  28.158 -                tagName.setText(tagNames.get(info.tag));
  28.159 +                tagName.setText(getTagName(info.tag));
  28.160                  start.setText(String.valueOf(info.start));
  28.161                  pos.setText(String.valueOf(info.pos));
  28.162                  end.setText(String.valueOf(info.end));

mercurial