From: chiba Date: Mon, 1 Sep 2003 09:45:37 +0000 (+0000) Subject: implemented toString(). X-Git-Tag: rel_3_17_1_ga~568 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1592597bc675e159a13b289e3a62a91fdfd76bdc;p=javassist.git implemented toString(). git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@40 30ef5769-5b8d-40dd-aea6-55b5d6557bb3 --- diff --git a/src/main/javassist/CtArray.java b/src/main/javassist/CtArray.java index bf4c3b50..8d600e6c 100644 --- a/src/main/javassist/CtArray.java +++ b/src/main/javassist/CtArray.java @@ -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; } diff --git a/src/main/javassist/CtBehavior.java b/src/main/javassist/CtBehavior.java index e37c81dd..54338a0a 100644 --- a/src/main/javassist/CtBehavior.java +++ b/src/main/javassist/CtBehavior.java @@ -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. diff --git a/src/main/javassist/CtClass.java b/src/main/javassist/CtClass.java index d98391ef..a0c3b17e 100644 --- a/src/main/javassist/CtClass.java +++ b/src/main/javassist/CtClass.java @@ -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 ClassPool for this class. */ diff --git a/src/main/javassist/CtClassType.java b/src/main/javassist/CtClassType.java index a9aa9c15..1e73f5d0 100644 --- a/src/main/javassist/CtClassType.java +++ b/src/main/javassist/CtClassType.java @@ -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; diff --git a/src/main/javassist/CtField.java b/src/main/javassist/CtField.java index 5d279d20..5adc76c7 100644 --- a/src/main/javassist/CtField.java +++ b/src/main/javassist/CtField.java @@ -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; } diff --git a/src/main/javassist/CtMember.java b/src/main/javassist/CtMember.java index 94094e79..013437d7 100644 --- a/src/main/javassist/CtMember.java +++ b/src/main/javassist/CtMember.java @@ -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. */ diff --git a/src/main/javassist/CtNewClass.java b/src/main/javassist/CtNewClass.java index 2c8613c2..30cacf0d 100644 --- a/src/main/javassist/CtNewClass.java +++ b/src/main/javassist/CtNewClass.java @@ -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 { diff --git a/src/main/javassist/CtPrimitiveType.java b/src/main/javassist/CtPrimitiveType.java index 7bd82821..62ed5e13 100644 --- a/src/main/javassist/CtPrimitiveType.java +++ b/src/main/javassist/CtPrimitiveType.java @@ -41,6 +41,8 @@ public final class CtPrimitiveType extends CtClass { dataSize = size; } + protected void extendToString(StringBuffer buffer) {} + /** * Returns true if this object represents a primitive * Java type: boolean, byte, char, short, int, long, float, double,