src/share/classes/com/sun/tools/javac/tree/Pretty.java

changeset 308
03944ee4fac4
parent 117
24a47c3062fe
child 439
b1bb8164a9bd
     1.1 --- a/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Fri Jun 26 12:22:40 2009 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Fri Jun 26 18:51:39 2009 -0700
     1.3 @@ -224,6 +224,15 @@
     1.4          }
     1.5      }
     1.6  
     1.7 +    public void printTypeAnnotations(List<JCTypeAnnotation> trees) throws IOException {
     1.8 +        if (trees.nonEmpty())
     1.9 +            print(" ");
    1.10 +        for (List<JCTypeAnnotation> l = trees; l.nonEmpty(); l = l.tail) {
    1.11 +            printExpr(l.head);
    1.12 +            print(" ");
    1.13 +        }
    1.14 +    }
    1.15 +
    1.16      /** Print documentation comment, if it exists
    1.17       *  @param tree    The tree for which a documentation comment should be printed.
    1.18       */
    1.19 @@ -850,21 +859,33 @@
    1.20          try {
    1.21              if (tree.elemtype != null) {
    1.22                  print("new ");
    1.23 +                printTypeAnnotations(tree.annotations);
    1.24                  JCTree elem = tree.elemtype;
    1.25 -                if (elem instanceof JCArrayTypeTree)
    1.26 -                    printBaseElementType((JCArrayTypeTree) elem);
    1.27 -                else
    1.28 -                    printExpr(elem);
    1.29 +                printBaseElementType(elem);
    1.30 +                boolean isElemAnnoType = elem instanceof JCAnnotatedType;
    1.31 +                int i = 0;
    1.32 +                List<List<JCTypeAnnotation>> da = tree.dimAnnotations;
    1.33                  for (List<JCExpression> l = tree.dims; l.nonEmpty(); l = l.tail) {
    1.34 +                    if (da.size() > i) {
    1.35 +                        printTypeAnnotations(da.get(i));
    1.36 +                    }
    1.37                      print("[");
    1.38 +                    i++;
    1.39                      printExpr(l.head);
    1.40                      print("]");
    1.41                  }
    1.42 +                if (tree.elems != null) {
    1.43 +                    if (isElemAnnoType) {
    1.44 +                        printTypeAnnotations(((JCAnnotatedType)tree.elemtype).annotations);
    1.45 +                    }
    1.46 +                    print("[]");
    1.47 +                }
    1.48 +                if (isElemAnnoType)
    1.49 +                    elem = ((JCAnnotatedType)elem).underlyingType;
    1.50                  if (elem instanceof JCArrayTypeTree)
    1.51                      printBrackets((JCArrayTypeTree) elem);
    1.52              }
    1.53              if (tree.elems != null) {
    1.54 -                if (tree.elemtype != null) print("[]");
    1.55                  print("{");
    1.56                  printExprs(tree.elems);
    1.57                  print("}");
    1.58 @@ -1112,14 +1133,21 @@
    1.59      }
    1.60  
    1.61      // Prints the inner element type of a nested array
    1.62 -    private void printBaseElementType(JCArrayTypeTree tree) throws IOException {
    1.63 -        JCTree elem = tree.elemtype;
    1.64 -        while (elem instanceof JCWildcard)
    1.65 -            elem = ((JCWildcard) elem).inner;
    1.66 -        if (elem instanceof JCArrayTypeTree)
    1.67 -            printBaseElementType((JCArrayTypeTree) elem);
    1.68 -        else
    1.69 -            printExpr(elem);
    1.70 +    private void printBaseElementType(JCTree tree) throws IOException {
    1.71 +        switch (tree.getTag()) {
    1.72 +        case JCTree.TYPEARRAY:
    1.73 +            printBaseElementType(((JCArrayTypeTree)tree).elemtype);
    1.74 +            return;
    1.75 +        case JCTree.WILDCARD:
    1.76 +            printBaseElementType(((JCWildcard)tree).inner);
    1.77 +            return;
    1.78 +        case JCTree.ANNOTATED_TYPE:
    1.79 +            printBaseElementType(((JCAnnotatedType)tree).underlyingType);
    1.80 +            return;
    1.81 +        default:
    1.82 +            printExpr(tree);
    1.83 +            return;
    1.84 +        }
    1.85      }
    1.86  
    1.87      // prints the brackets of a nested array in reverse order
    1.88 @@ -1127,8 +1155,13 @@
    1.89          JCTree elem;
    1.90          while (true) {
    1.91              elem = tree.elemtype;
    1.92 +            if (elem.getTag() == JCTree.ANNOTATED_TYPE) {
    1.93 +                JCAnnotatedType atype = (JCAnnotatedType) elem;
    1.94 +                printTypeAnnotations(atype.annotations);
    1.95 +                elem = atype.underlyingType;
    1.96 +            }
    1.97              print("[]");
    1.98 -            if (!(elem instanceof JCArrayTypeTree)) break;
    1.99 +            if (elem.getTag() != JCTree.TYPEARRAY) break;
   1.100              tree = (JCArrayTypeTree) elem;
   1.101          }
   1.102      }
   1.103 @@ -1213,6 +1246,15 @@
   1.104          }
   1.105      }
   1.106  
   1.107 +    public void visitAnnotatedType(JCAnnotatedType tree) {
   1.108 +        try {
   1.109 +            printTypeAnnotations(tree.annotations);
   1.110 +            printExpr(tree.underlyingType);
   1.111 +        } catch (IOException e) {
   1.112 +            throw new UncheckedIOException(e);
   1.113 +        }
   1.114 +    }
   1.115 +
   1.116      public void visitTree(JCTree tree) {
   1.117          try {
   1.118              print("(UNKNOWN: " + tree + ")");
   1.119 @@ -1221,4 +1263,5 @@
   1.120              throw new UncheckedIOException(e);
   1.121          }
   1.122      }
   1.123 +
   1.124  }

mercurial