From c88e65c04fb27c77e1073690ab2aef59e9f05294 Mon Sep 17 00:00:00 2001 From: chiba Date: Fri, 1 Sep 2006 03:04:43 +0000 Subject: [PATCH] updated CtConstructor#isEmpty(). git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@322 30ef5769-5b8d-40dd-aea6-55b5d6557bb3 --- src/main/javassist/CtConstructor.java | 27 +++++++++++++------ .../javassist/util/proxy/ProxyFactory.java | 14 +++++++++- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/main/javassist/CtConstructor.java b/src/main/javassist/CtConstructor.java index c60c1124..03f390ad 100644 --- a/src/main/javassist/CtConstructor.java +++ b/src/main/javassist/CtConstructor.java @@ -129,7 +129,11 @@ public final class CtConstructor extends CtBehavior { } /** - * Returns true if the constructor is the default one. + * Returns true if the constructor (or static initializer) + * is the default one. This method returns true if the constructor + * takes some arguments but it does not perform anything except + * calling super() (the no-argument constructor of + * the super class). */ public boolean isEmpty() { CodeAttribute ca = getMethodInfo2().getCodeAttribute(); @@ -141,18 +145,25 @@ public final class CtConstructor extends CtBehavior { CodeIterator it = ca.iterator(); try { int pos, desc; - return it.byteAt(it.next()) == Opcode.ALOAD_0 - && it.byteAt(pos = it.next()) == Opcode.INVOKESPECIAL - && (desc = cp.isConstructor(CtClass.javaLangObject, - it.u16bitAt(pos + 1))) != 0 - && cp.getUtf8Info(desc).equals("()V") - && it.byteAt(it.next()) == Opcode.RETURN - && !it.hasNext(); + int op0 = it.byteAt(it.next()); + return op0 == Opcode.RETURN // empty static initializer + || (op0 == Opcode.ALOAD_0 + && it.byteAt(pos = it.next()) == Opcode.INVOKESPECIAL + && (desc = cp.isConstructor(getSuperclassName(), + it.u16bitAt(pos + 1))) != 0 + && "()V".equals(cp.getUtf8Info(desc)) + && it.byteAt(it.next()) == Opcode.RETURN + && !it.hasNext()); } catch (BadBytecode e) {} return false; } + private String getSuperclassName() { + ClassFile cf = declaringClass.getClassFile2(); + return cf.getSuperclass(); + } + /** * Returns true if this constructor calls a constructor * of the super class. This method returns false if it diff --git a/src/main/javassist/util/proxy/ProxyFactory.java b/src/main/javassist/util/proxy/ProxyFactory.java index 7fe72c77..e3d6b65e 100644 --- a/src/main/javassist/util/proxy/ProxyFactory.java +++ b/src/main/javassist/util/proxy/ProxyFactory.java @@ -192,7 +192,10 @@ public class ProxyFactory { } /** - * A provider of class loaders. + * A provider of class loaders. + * + * @see #classLoaderProvider + * @since 3.4 */ public static interface ClassLoaderProvider { /** @@ -212,6 +215,15 @@ public class ProxyFactory { *

The value of this field can be updated for changing the default * implementation. * + *

Example: + *

+ * * @since 3.4 */ public static ClassLoaderProvider classLoaderProvider -- 2.39.5