From d60e86de7947e6e628b5f90dfe19bee7f7a26bd0 Mon Sep 17 00:00:00 2001 From: adam Date: Fri, 3 Jun 2005 05:41:15 +0000 Subject: [PATCH] cleanup of MethodRef, FieldRef, MemberRef darcs-hash:20050603054115-5007d-9aeb9a21fee4f1c7cc65a2ebd3921fcddc11ef29.gz --- src/org/ibex/classgen/CPGen.java | 2 +- src/org/ibex/classgen/FieldRef.java | 9 ++++----- src/org/ibex/classgen/MemberRef.java | 16 +++++++++------- src/org/ibex/classgen/MethodGen.java | 8 +++++--- src/org/ibex/classgen/MethodRef.java | 27 ++++++++++++--------------- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/org/ibex/classgen/CPGen.java b/src/org/ibex/classgen/CPGen.java index 6b59a28..ec956d6 100644 --- a/src/org/ibex/classgen/CPGen.java +++ b/src/org/ibex/classgen/CPGen.java @@ -220,7 +220,7 @@ class CPGen { if(tag == 0) throw new Error("should never happen"); CPRefEnt ce = new CPRefEnt(tag); ce.e1 = add(key.klass); - ce.e2 = addNameAndType(key.name, key.descriptor); + ce.e2 = addNameAndType(key.name, key.getDescriptor()); ent = ce; } else { throw new IllegalArgumentException("Unknown type passed to add"); diff --git a/src/org/ibex/classgen/FieldRef.java b/src/org/ibex/classgen/FieldRef.java index 331ebe4..b13fd4d 100644 --- a/src/org/ibex/classgen/FieldRef.java +++ b/src/org/ibex/classgen/FieldRef.java @@ -9,9 +9,8 @@ GETFIELD, PUTFIELD, GETSTATIC, and PUTSTATCI bytecodes */ public class FieldRef extends MemberRef { /** Create a reference to field name of class c with the type t */ - public FieldRef(Type.Class c, String name, Type t) { super(c, name, t.getDescriptor()); } - /** Equivalent to FieldRef(new Type.Class(s), ...) - @see #FieldRef(Type.Class, String, Type, ) - */ - public FieldRef(String s, String name, Type t) { this(Type.instance(s).asClass(), name, t); } + public final Type type; + public FieldRef(Type.Class c, String name, Type t) { super(c, name); this.type = t; } + public String getDescriptor() { return name; } } + diff --git a/src/org/ibex/classgen/MemberRef.java b/src/org/ibex/classgen/MemberRef.java index 3c09960..ca39c93 100644 --- a/src/org/ibex/classgen/MemberRef.java +++ b/src/org/ibex/classgen/MemberRef.java @@ -10,17 +10,19 @@ import java.io.*; @see FieldRef */ public abstract class MemberRef { - Type.Class klass; - String name; - String descriptor; + public final Type.Class klass; + public final String name; - MemberRef(Type.Class klass, String name, String descriptor) { this.klass = klass; this.name = name; this.descriptor = descriptor; } - MemberRef(MemberRef o) { this.klass = o.klass; this.name = o.name; this.descriptor = o.descriptor; } + MemberRef(Type.Class klass, String name) { + this.klass = klass; + this.name = name; + } + public abstract String getDescriptor(); public boolean equals(Object o_) { if(!(o_ instanceof MemberRef)) return false; MemberRef o = (MemberRef) o_; - return o.klass.equals(klass) && o.name.equals(name) && o.descriptor.equals(descriptor); + return o.klass.equals(klass) && o.name.equals(name) && o.getDescriptor().equals(getDescriptor()); } - public int hashCode() { return klass.hashCode() ^ name.hashCode() ^ descriptor.hashCode(); } + public int hashCode() { return klass.hashCode() ^ name.hashCode() ^ getDescriptor().hashCode(); } } diff --git a/src/org/ibex/classgen/MethodGen.java b/src/org/ibex/classgen/MethodGen.java index e2d3b68..32fd705 100644 --- a/src/org/ibex/classgen/MethodGen.java +++ b/src/org/ibex/classgen/MethodGen.java @@ -83,7 +83,7 @@ public class MethodGen implements CGConst { } /** Returns the descriptor string for this method */ - public String getDescriptor() { return MethodRef.getDescriptor(ret, args); } + public String getDescriptor() { return new MethodRef(null, name, ret, args).getDescriptor(); } private class ExnTableEnt { public int start; @@ -275,9 +275,11 @@ public class MethodGen implements CGConst { if(arg instanceof Long || arg instanceof Double) op = LDC2_W; break; - case INVOKEINTERFACE: - if(arg instanceof MethodRef) arg = new MethodRef.I((MethodRef)arg); + case INVOKEINTERFACE: { + MethodRef mr = (MethodRef)arg; + if(arg instanceof MethodRef) arg = new MethodRef.I(mr.klass, mr.name, mr.returnType, mr.argTypes); break; + } } int opdata = OP_DATA[op&0xff]; if((opdata&OP_CPENT_FLAG) != 0 && !(arg instanceof CPGen.Ent)) diff --git a/src/org/ibex/classgen/MethodRef.java b/src/org/ibex/classgen/MethodRef.java index 4810bbb..399195c 100644 --- a/src/org/ibex/classgen/MethodRef.java +++ b/src/org/ibex/classgen/MethodRef.java @@ -8,25 +8,24 @@ package org.ibex.classgen; @see CGConst#INVOKEINTERFACE */ public class MethodRef extends MemberRef { + + final Type[] argTypes; + final Type returnType; + /** Create a reference to method name of class c with the return type ret and the arguments args */ - public MethodRef(Type.Class c, String name, Type ret, Type[] args) { - super(c, name, getDescriptor(ret, args)); - } - /** Equivalent to MethodRef(new Type.Class(s), ...) - @see #MethodRef(Type.Class, String, Type, Type[]) - */ - public MethodRef(String s, String name, Type ret, Type[] args) { - this(Type.instance(s).asClass(), name, ret, args); + public MethodRef(Type.Class c, String name, Type returnType, Type[] argTypes) { + super(c, name); + this.argTypes = argTypes; + this.returnType = returnType; } - MethodRef(MethodRef i) { super(i); } - static String getDescriptor(Type ret, Type[] args) { - StringBuffer sb = new StringBuffer(args.length*4); + public String getDescriptor() { + StringBuffer sb = new StringBuffer(argTypes.length*4); sb.append("("); - for(int i=0;i