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 }