remove no-longer-necessary equals() and hashCode() methods
[org.ibex.classgen.git] / src / org / ibex / classgen / Type.java
index 7445f9c..264bf59 100644 (file)
@@ -3,7 +3,7 @@ package org.ibex.classgen;
 import java.util.StringTokenizer;
 import java.util.Hashtable;
 
-public class Type {
+public class Type implements CGConst {
 
     private static Hashtable instances = new Hashtable();  // this has to appear at the top of the file
 
@@ -40,8 +40,6 @@ public class Type {
     public       String  toString() { return toString; }
     public       String  debugToString() { return toString; }
     public final String  getDescriptor() { return descriptor; }
-    public       int     hashCode() { return descriptor.hashCode(); }
-    public       boolean equals(java.lang.Object o) { return this==o; }
 
     public Type.Array  makeArray() { return (Type.Array)instance("["+descriptor); }
     public Type.Array  makeArray(int i) { return i==0 ? (Type.Array)this : makeArray().makeArray(i-1); }
@@ -133,21 +131,16 @@ public class Type {
             private Member(String name) { this.name = name; }
             public Type.Class getDeclaringClass() { return Type.Class.this; }
             public abstract String getDescriptor();
-            public boolean equals(Object o_) {
-                if(!(o_ instanceof Member)) return false;
-                Member o = (Member) o_;
-                return o.getDeclaringClass().equals(getDeclaringClass()) &&
-                    o.name.equals(name) &&
-                    o.getDescriptor().equals(getDescriptor());
-            }
-            public int hashCode() { return getDeclaringClass().hashCode() ^ name.hashCode() ^ getDescriptor().hashCode(); }
+            public String toString() { return debugToString(); }
+            public abstract String debugToString();
         }
     
         public class Field extends Member {
             public final Type type;
             private Field(String name, Type t) { super(name); this.type = t; }
-            public String getDescriptor() { return name; }
+            public String getDescriptor() { return type.getDescriptor(); }
             public Type getType() { return type; }
+            public String debugToString() { return getDeclaringClass()+"."+name+"["+type+"]"; }
         }
 
         public class Method extends Member {
@@ -184,6 +177,30 @@ public class Type {
                 sb.append(returnType.getDescriptor());
                 return sb.toString();
             }
+            public abstract class Body implements HasFlags {
+                public abstract java.util.Hashtable getThrownExceptions();
+                public abstract void debugBodyToString(StringBuffer sb);
+                public void debugToString(StringBuffer sb, String constructorName) {
+                    int flags = getFlags();
+                    sb.append("  ").append(ClassFile.flagsToString(flags,false));
+                    sb.append(Method.this.debugToString());
+                    java.util.Hashtable thrownExceptions = getThrownExceptions();
+                    if (thrownExceptions.size() > 0) {
+                        sb.append("throws");
+                        for(java.util.Enumeration e = thrownExceptions.keys();e.hasMoreElements();)
+                            sb.append(" ").append(((Type.Class)e.nextElement()).debugToString()).append(",");
+                        sb.setLength(sb.length()-1);
+                        sb.append(" ");
+                    }
+                    if ((flags & (NATIVE|ABSTRACT))==0) {
+                        sb.append("{\n");
+                        debugBodyToString(sb);
+                        sb.append("  }\n");
+                    } else {
+                        sb.append(";");
+                    }
+                }
+            }
         }
     }