]> source.dussan.org Git - javassist.git/commitdiff
for fixing JASSIST-68
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Sat, 4 Apr 2009 15:41:55 +0000 (15:41 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Sat, 4 Apr 2009 15:41:55 +0000 (15:41 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@474 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

Readme.html
src/main/javassist/ClassPool.java
src/main/javassist/CtNewClass.java

index e7d90560885ef4ff0262244955e739bee1c24855..4435e7c25d0aa6cb2b84a57dea76cc8fad1167fc 100644 (file)
@@ -283,7 +283,7 @@ see javassist.Dump.
 
 <p>-version 3.11
 <ul>
-       <li>JIRA JASSIST-74, 75, 76 were fixed.
+       <li>JIRA JASSIST-68, 74, 75, 76 were fixed.
 </ul>
 
 <p>-version 3.10 on March 5, 2009
@@ -678,7 +678,7 @@ see javassist.Dump.
   <li>Jar/zip files are supported.
 </ul>
 
-<p>-version 0.1 in April, 1999.
+<p>-version 0.1 on April 16, 1999.
 <ul>
   <li>The first release.
 </ul>
index f802ed6ebbfba277ca7da1bd1168065430426ed0..fd099794679369b4aab11a1cd76c13a837a08396 100644 (file)
@@ -724,6 +724,14 @@ public class ClassPool {
      * If there already exists a class with the same name, the new class
      * overwrites that previous class.
      *
+     * <p>If no constructor is explicitly added to the created new
+     * class, Javassist generates constructors and adds it when
+     * the class file is generated.  It generates a new constructor
+     * for each constructor of the super class.  The new constructor
+     * takes the same set of parameters and invokes the
+     * corresponding constructor of the super class.  All the received
+     * parameters are passed to it.
+     *
      * @param classname                 a fully-qualified class name.
      * @throws RuntimeException         if the existing class is frozen.
      */
@@ -736,6 +744,14 @@ public class ClassPool {
      * If there already exists a class/interface with the same name,
      * the new class overwrites that previous class.
      *
+     * <p>If no constructor is explicitly added to the created new
+     * class, Javassist generates constructors and adds it when
+     * the class file is generated.  It generates a new constructor
+     * for each constructor of the super class.  The new constructor
+     * takes the same set of parameters and invokes the
+     * corresponding constructor of the super class.  All the received
+     * parameters are passed to it.
+     *
      * @param classname  a fully-qualified class name.
      * @param superclass the super class.
      * @throws RuntimeException if the existing class is frozen.
index a95414afb5942ada8422a1ed48039304f5d76242..2229d4171bfd94e0b80acf3fdce419cfda9b4327 100644 (file)
@@ -90,10 +90,12 @@ class CtNewClass extends CtClassType {
         int n = 0;
         for (int i = 0; i < cs.length; ++i) {
             CtConstructor c = cs[i];
-            if (Modifier.isPublic(c.getModifiers())) {
+            int mod = c.getModifiers();
+            if (isInheritable(mod, superclazz)) {
                 CtConstructor cons
                     = CtNewConstructor.make(c.getParameterTypes(),
                                             c.getExceptionTypes(), this);
+                cons.setModifiers(mod & (Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE));
                 addConstructor(cons);
                 ++n;
             }
@@ -104,4 +106,20 @@ class CtNewClass extends CtClassType {
                         "no public constructor in " + superclazz.getName());
 
     }
+
+    private boolean isInheritable(int mod, CtClass superclazz) {
+        if (Modifier.isPrivate(mod))
+            return false;
+
+        if (Modifier.isPackage(mod)) {
+            String pname = getPackageName();
+            String pname2 = superclazz.getPackageName();
+            if (pname == null)
+                return pname2 == null;
+            else
+                pname.equals(pname2);
+        }
+
+        return true;
+    }
 }