]> source.dussan.org Git - javassist.git/commitdiff
implemented toString().
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Mon, 1 Sep 2003 09:45:37 +0000 (09:45 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Mon, 1 Sep 2003 09:45:37 +0000 (09:45 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@40 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/CtArray.java
src/main/javassist/CtBehavior.java
src/main/javassist/CtClass.java
src/main/javassist/CtClassType.java
src/main/javassist/CtField.java
src/main/javassist/CtMember.java
src/main/javassist/CtNewClass.java
src/main/javassist/CtPrimitiveType.java

index bf4c3b5025154c061eb9f5bfa12de9978f0f3f39..8d600e6c949b903fd927e81739ca70353a6178d5 100644 (file)
@@ -27,6 +27,11 @@ final class CtArray extends CtClass {
         pool = cp;
     }
 
+    protected void extendToString(StringBuffer buffer) {
+        buffer.append(" pool=");
+        buffer.append(pool);
+    }
+
     public ClassPool getClassPool() {
         return pool;
     }
index e37c81dd406ca4ff6711688b7ea13c5016ff2b3e..54338a0a5fed75994129b766081ca5fb4da63441 100644 (file)
@@ -32,6 +32,13 @@ public abstract class CtBehavior extends CtMember {
         methodInfo = minfo;
     }
 
+    protected void extendToString(StringBuffer buffer) {
+        buffer.append(' ');
+        buffer.append(getName());
+        buffer.append(' ');
+        buffer.append(methodInfo.getDescriptor());
+    }
+
     /**
      * Returns the MethodInfo representing this member in the
      * class file.
index d98391eff02108b661c43949b427f945df82e3a1..a0c3b17ef9802c7d48d45ef56c72698dde55dbe7 100644 (file)
@@ -147,6 +147,28 @@ public abstract class CtClass {
         qualifiedName = name;
     }
 
+    /**
+     * Converts the object to a string.
+     */
+    public String toString() {
+        StringBuffer buf = new StringBuffer(getClass().getName());
+        buf.append("@");
+        buf.append(Integer.toHexString(hashCode()));
+        buf.append("[");
+        buf.append(Modifier.toString(getModifiers()));
+        buf.append(' ');
+        buf.append(getName());
+        extendToString(buf);
+        buf.append("]");
+        return buf.toString();
+    }    
+
+    /**
+     * Implemented in subclasses to add to the {@link #toString()} result.
+     * Subclasses should put a space before each token added to the buffer.
+     */
+    abstract protected void extendToString(StringBuffer buffer);
+
     /**
      * Returns a <code>ClassPool</code> for this class.
      */
index a9aa9c15abc79fba44c74bb7ccecb91083e74f43..1e73f5d08bc9bf6ea9f1cfce272e457c0846f147 100644 (file)
@@ -65,6 +65,38 @@ class CtClassType extends CtClass {
         qualifiedName = classfile.getName();
     }
 
+    protected void extendToString(StringBuffer buffer) {
+        if (wasChanged)
+            buffer.append(" changed");
+
+        if (wasFrozen)
+            buffer.append(" frozen");          
+
+        CtField field = getFieldsCache();
+        buffer.append(" fields=");
+        while (field != null) {
+            buffer.append(field);
+            buffer.append(", ");
+            field = field.next;
+        }
+
+        CtConstructor c = getConstructorsCache();
+        buffer.append(" constructors=");
+        while (c != null) {
+            buffer.append(c);
+            buffer.append(", ");
+            c = c.next;
+        }
+
+        CtMethod m = getMethodsCache();
+        buffer.append(" methods=");
+        while (m != null) {
+            buffer.append(m);
+            buffer.append(", ");
+            m = m.next;
+        }
+    }
+
     protected void eraseCache() {
         fieldsCache = null;
         constructorsCache = null;
index 5d279d20a3a897bc5850e658be7583ec6c6bf0a9..5adc76c7c08ab4c67889e2d2c72e6e84c3c215bc 100644 (file)
@@ -98,6 +98,13 @@ public class CtField extends CtMember {
         next = null;
     }
 
+    protected void extendToString(StringBuffer buffer) {
+        buffer.append(' ');
+        buffer.append(getName());
+        buffer.append(' ');
+        buffer.append(fieldInfo.getDescriptor());
+    }
+
     /* Javac.CtFieldWithInit overrides.
      */
     protected ASTree getInitAST() { return null; }
index 94094e796b1d6ef6edd8bfc48f41ef665b53880a..013437d758887664823d610e976490e31af63f4d 100644 (file)
@@ -24,6 +24,26 @@ public abstract class CtMember {
 
     protected CtMember(CtClass clazz) { declaringClass = clazz; }
 
+    public String toString() {
+        StringBuffer buffer = new StringBuffer(getClass().getName());
+        buffer.append("@");
+        buffer.append(Integer.toHexString(hashCode()));
+        buffer.append("[");
+        buffer.append(Modifier.toString(getModifiers()));
+        extendToString(buffer);
+        buffer.append("]");
+        return buffer.toString();
+    }
+
+    /**
+     * Invoked by {@link #toString()} to add to the buffer and provide the
+     * complete value.  Subclasses should invoke this method, adding a
+     * space before each token.  The modifiers for the member are
+     * provided first; subclasses should provide additional data such
+     * as return type, field or method name, etc.
+     */
+    protected abstract void extendToString(StringBuffer buffer);
+
     /**
      * Returns the class that declares this member.
      */
index 2c8613c2923b603c407a857bb473e4b0f8fb9241..30cacf0d428f9ddc7452f56295efcb109224352c 100644 (file)
@@ -41,6 +41,13 @@ class CtNewClass extends CtClassType {
         hasConstructor = isInterface;
     }
 
+    protected void extendToString(StringBuffer buffer) {
+        if (hasConstructor)
+            buffer.append(" hasConstructor");
+
+        super.extendToString(buffer);
+    }
+
     public void addConstructor(CtConstructor c)
         throws CannotCompileException
     {
index 7bd82821ad45ae59cadf1c5fde61f69bd77b2086..62ed5e13569ffa6077c7826b3f149eb64050edfb 100644 (file)
@@ -41,6 +41,8 @@ public final class CtPrimitiveType extends CtClass {
         dataSize = size;
     }
 
+    protected void extendToString(StringBuffer buffer) {}
+
     /**
      * Returns <code>true</code> if this object represents a primitive
      * Java type: boolean, byte, char, short, int, long, float, double,