]> source.dussan.org Git - javassist.git/commitdiff
changed the behavior of CtClassType.setSuperclass().
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Tue, 14 Oct 2003 14:12:47 +0000 (14:12 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Tue, 14 Oct 2003 14:12:47 +0000 (14:12 +0000)
See javadoc comments.

git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@54 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

src/main/javassist/CtClass.java
src/main/javassist/CtClassType.java
src/main/javassist/bytecode/ClassFileWriter.java

index 6304a7da9682bcab7db4f2ae1670ce5489414ad3..b51fcd8701eae74005df25820b19e06a83685b02 100644 (file)
@@ -35,7 +35,7 @@ public abstract class CtClass {
     /**
      * The version number of this release.
      */
-    public static final String version = "2.7 beta 2";
+    public static final String version = "2.7 beta 3";
 
     /**
      * Prints the version number and the copyright notice.
@@ -415,14 +415,24 @@ public abstract class CtClass {
      * It returns null if this object represents the
      * <code>java.lang.Object</code> class and thus it does not have
      * the super class.
+     *
+     * <p>If this object represents an interface, this method
+     * always returns the <code>java.lang.Object</code> class.
+     * To obtain the super interfaces
+     * extended by that interface, call <code>getInterfaces()</code>.
      */
     public CtClass getSuperclass() throws NotFoundException {
         return null;
     }
 
     /**
-     * Changes a super class.  The new super class must be compatible
-     * with the old one.
+     * Changes a super class unless this object represents an interface.
+     * The new super class must be compatible with the old one.
+     *
+     * <p>If this object represents an interface, this method is equivalent
+     * to <code>addInterface()</code>; it appends <code>clazz</code> to
+     * the list of the super interfaces extended by that interface.
+     * Note that an interface can extend multiple super interfaces.
      */
     public void setSuperclass(CtClass clazz) throws CannotCompileException {
         checkModify();
@@ -430,14 +440,16 @@ public abstract class CtClass {
 
     /**
      * Obtains the class objects representing the interfaces implemented
-     * by the class.
+     * by the class or, if this object represents an interface, the interfaces
+     * extended by that interface.
      */
     public CtClass[] getInterfaces() throws NotFoundException {
         return new CtClass[0];
     }
 
     /**
-     * Sets interfaces.
+     * Sets implemented interfaces.  If this object represents an interface,
+     * this method sets the interfaces extended by that interface.
      *
      * @param list              a list of the <code>CtClass</code> objects
      *                          representing interfaces, or
index 33d286c07af974c8d421c0f7eb18fffb98ea0166..de1b2f19ee85a7b955c589c1c8f0679b03cfe3a8 100644 (file)
@@ -260,7 +260,10 @@ class CtClassType extends CtClass {
 
     public void setSuperclass(CtClass clazz) throws CannotCompileException {
         checkModify();
-        getClassFile2().setSuperclass(clazz.getName());
+        if (isInterface())
+            addInterface(clazz);
+        else
+            getClassFile2().setSuperclass(clazz.getName());
     }
 
     public CtClass[] getInterfaces() throws NotFoundException {
index 05d49ec80af6125b58bfaae7c54b5b26eb67d434..83ced02a982a65b82346e3a843365bece7921bd0 100644 (file)
@@ -47,8 +47,18 @@ public class ClassFileWriter {
                                     & ~AccessFlag.SYNCHRONIZED);
         out.println(Modifier.toString(mod) + " class "
                     + cf.getName() + " extends " + cf.getSuperclass());
-        out.println();
 
+        String[] infs = cf.getInterfaces();
+        if (infs != null && infs.length > 0) {
+            out.print("    implements ");
+            out.print(infs[0]);
+            for (int i = 1; i < infs.length; ++i)
+                out.print(", " + infs[i]);
+
+            out.println();
+        }
+
+        out.println();
         ConstPool cp = cf.getConstPool();
         list = cf.getFields();
         n = list.size();