Thu, 14 Jan 2010 17:18:30 -0800
6917122: provide utility method to find the inner most type of a type tree
Reviewed-by: darcy, jjg
Contributed-by: mali@csail.mit.edu, mernst@cs.washington.edu
1.1 --- a/src/share/classes/com/sun/tools/javac/tree/Pretty.java Wed Jan 13 17:39:44 2010 -0800 1.2 +++ b/src/share/classes/com/sun/tools/javac/tree/Pretty.java Thu Jan 14 17:18:30 2010 -0800 1.3 @@ -1152,20 +1152,7 @@ 1.4 1.5 // Prints the inner element type of a nested array 1.6 private void printBaseElementType(JCTree tree) throws IOException { 1.7 - switch (tree.getTag()) { 1.8 - case JCTree.TYPEARRAY: 1.9 - printBaseElementType(((JCArrayTypeTree)tree).elemtype); 1.10 - return; 1.11 - case JCTree.WILDCARD: 1.12 - printBaseElementType(((JCWildcard)tree).inner); 1.13 - return; 1.14 - case JCTree.ANNOTATED_TYPE: 1.15 - printBaseElementType(((JCAnnotatedType)tree).underlyingType); 1.16 - return; 1.17 - default: 1.18 - printExpr(tree); 1.19 - return; 1.20 - } 1.21 + printExpr(TreeInfo.innermostType(tree)); 1.22 } 1.23 1.24 // prints the brackets of a nested array in reverse order
2.1 --- a/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Jan 13 17:39:44 2010 -0800 2.2 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Thu Jan 14 17:18:30 2010 -0800 2.3 @@ -891,4 +891,17 @@ 2.4 throw new AssertionError("Unexpected type tree: " + tree); 2.5 } 2.6 } 2.7 + 2.8 + public static JCTree innermostType(JCTree type) { 2.9 + switch (type.getTag()) { 2.10 + case JCTree.TYPEARRAY: 2.11 + return innermostType(((JCArrayTypeTree)type).elemtype); 2.12 + case JCTree.WILDCARD: 2.13 + return innermostType(((JCWildcard)type).inner); 2.14 + case JCTree.ANNOTATED_TYPE: 2.15 + return innermostType(((JCAnnotatedType)type).underlyingType); 2.16 + default: 2.17 + return type; 2.18 + } 2.19 + } 2.20 }