--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Fri Jun 26 12:22:40 2009 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Fri Jun 26 18:51:39 2009 -0700
@@ -298,6 +298,8 @@
case(JCTree.POSTINC):
case(JCTree.POSTDEC):
return getStartPos(((JCUnary) tree).arg);
+ case(JCTree.ANNOTATED_TYPE):
+ return getStartPos(((JCAnnotatedType) tree).underlyingType);
case(JCTree.VARDEF): {
JCVariableDecl node = (JCVariableDecl)tree;
if (node.mods.pos != Position.NOPOS) {
@@ -859,4 +861,25 @@
return null;
}
}
+
+ /**
+ * Returns the underlying type of the tree if it is annotated type,
+ * or the tree itself otherwise
+ */
+ public static JCExpression typeIn(JCExpression tree) {
+ switch (tree.getTag()) {
+ case JCTree.ANNOTATED_TYPE:
+ return ((JCAnnotatedType)tree).underlyingType;
+ case JCTree.IDENT: /* simple names */
+ case JCTree.TYPEIDENT: /* primitive name */
+ case JCTree.SELECT: /* qualified name */
+ case JCTree.TYPEARRAY: /* array types */
+ case JCTree.WILDCARD: /* wild cards */
+ case JCTree.TYPEPARAMETER: /* type parameters */
+ case JCTree.TYPEAPPLY: /* parameterized types */
+ return tree;
+ default:
+ throw new AssertionError("Unexpected type tree: " + tree);
+ }
+ }
}