--- a/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java Fri Oct 05 14:21:09 2012 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java Sat Oct 06 10:35:38 2012 +0100
@@ -1810,11 +1810,46 @@
*/
public static class JCMemberReference extends JCExpression implements MemberReferenceTree {
public ReferenceMode mode;
+ public ReferenceKind kind;
public Name name;
public JCExpression expr;
public List<JCExpression> typeargs;
public Type targetType;
public Symbol sym;
+ public Type varargsElement;
+
+ /**
+ * Javac-dependent classification for member references, based
+ * on relevant properties w.r.t. code-generation
+ */
+ public enum ReferenceKind {
+ /** super # instMethod */
+ SUPER(ReferenceMode.INVOKE, false),
+ /** Type # instMethod */
+ UNBOUND(ReferenceMode.INVOKE, true),
+ /** Type # staticMethod */
+ STATIC(ReferenceMode.INVOKE, false),
+ /** Expr # instMethod */
+ BOUND(ReferenceMode.INVOKE, false),
+ /** Expr # staticMethod */
+ STATIC_EVAL(ReferenceMode.INVOKE, false),
+ /** Inner # new */
+ IMPLICIT_INNER(ReferenceMode.NEW, false),
+ /** Toplevel # new */
+ TOPLEVEL(ReferenceMode.NEW, false);
+
+ ReferenceMode mode;
+ boolean unbound;
+
+ private ReferenceKind(ReferenceMode mode, boolean unbound) {
+ this.mode = mode;
+ this.unbound = unbound;
+ }
+
+ public boolean isUnbound() {
+ return unbound;
+ }
+ }
protected JCMemberReference(ReferenceMode mode, Name name, JCExpression expr, List<JCExpression> typeargs) {
this.mode = mode;
@@ -1843,6 +1878,9 @@
public Tag getTag() {
return REFERENCE;
}
+ public boolean hasKind(ReferenceKind kind) {
+ return this.kind == kind;
+ }
}
/**