massive refactoring of method-body-printing; see Type.Class.Method.Body
[org.ibex.classgen.git] / src / org / ibex / classgen / Type.java
index 7445f9c..492986d 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
 
@@ -141,6 +141,8 @@ public class Type {
                     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 {
@@ -148,6 +150,7 @@ public class Type {
             private Field(String name, Type t) { super(name); this.type = t; }
             public String getDescriptor() { return name; }
             public Type getType() { return type; }
+            public String debugToString() { return getDeclaringClass()+"."+name+"["+type+"]"; }
         }
 
         public class Method extends Member {
@@ -184,6 +187,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(";");
+                    }
+                }
+            }
         }
     }