]> source.dussan.org Git - javassist.git/commitdiff
fixed a bug in getModifiers() in CtClass.
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 19 Jan 2006 07:21:52 +0000 (07:21 +0000)
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Thu, 19 Jan 2006 07:21:52 +0000 (07:21 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@236 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

Readme.html
src/main/javassist/CtClass.java
src/main/javassist/CtClassType.java
src/main/javassist/Modifier.java
src/main/javassist/bytecode/ClassFile.java
src/main/javassist/util/proxy/ProxyFactory.java

index 3d7f8d925402498cda0ddb30e33e4dd9a7fbd910..a7eaede998b8fd04d18e18c09f6879b63975178e 100644 (file)
@@ -289,6 +289,8 @@ see javassist.Dump.
     public members.
   <li>getEnclosingClass() in javassist.CtClass was renamed
       to getEnclosingMethod().
+  <li>getModifiers() was extended to return Modifier.STATIC if the class
+      is a static inner class.
   <li>The return type of CtClass.stopPruning() was changed from void
     to boolean.
   <li>toMethod() in javassist.CtConstructor has been implemented.
index 7e23352c70b72cb89a7b911484ef0e3b735ad858..31ea035cd405354199f1fb26f8e74ee12c66c950 100644 (file)
@@ -437,6 +437,9 @@ public abstract class CtClass {
      * Returns the modifiers for this class, encoded in an integer.
      * For decoding, use <code>javassist.Modifier</code>.
      *
+     * <p>If the class is a static nested class (a.k.a. static inner class),
+     * the returned modifiers include <code>Modifier.STATIC</code>. 
+     *
      * @see Modifier
      */
     public int getModifiers() {
index 1eb9ba35f03236936a43438d3c9dec150d197245..04500c2d504f66335270d00f622c4dd39a28e9c9 100644 (file)
@@ -358,12 +358,20 @@ class CtClassType extends CtClass {
     }
 
     public int getModifiers() {
-        int acc = getClassFile2().getAccessFlags();
+        ClassFile cf = getClassFile2();
+        int acc = cf.getAccessFlags();
         acc = AccessFlag.clear(acc, AccessFlag.SUPER);
+        int inner = cf.getInnerAccessFlags();
+        if (inner != -1 && (inner & AccessFlag.STATIC) != 0)
+            acc |= AccessFlag.STATIC;
+
         return AccessFlag.toModifier(acc);
     }
 
     public void setModifiers(int mod) {
+        if (Modifier.isStatic(mod))
+            throw new RuntimeException("cannot set to static");
+
         checkModify();
         int acc = AccessFlag.of(mod) | AccessFlag.SUPER;
         getClassFile2().setAccessFlags(acc);
index d56969e8e83153c06fac4cc5684d2c01b0ec38c1..7b3cfc796c941753d9091606345806802ca6d54b 100644 (file)
@@ -40,6 +40,8 @@ public class Modifier {
     public static final int INTERFACE = AccessFlag.INTERFACE;
     public static final int ABSTRACT  = AccessFlag.ABSTRACT;
     public static final int STRICT    = AccessFlag.STRICT;
+    public static final int ANNOTATION = AccessFlag.ANNOTATION;
+    public static final int ENUM      = AccessFlag.ENUM;
 
     /**
      * Returns true if the modifiers include the <tt>public</tt>
index 44f378e219b5dbad743c24c00e4aadfed99f2458..831a9608a18ec765a1be2f699394001aaad2bef0 100644 (file)
@@ -233,6 +233,29 @@ public final class ClassFile {
         accessFlags = acc | AccessFlag.SUPER;
     }
 
+    /**
+     * Returns access and property flags of this nested class.
+     * This method returns -1 if the class is not a nested class. 
+     *
+     * <p>The returned value is obtained from <code>inner_class_access_flags</code>
+     * of the entry representing this nested class itself
+     * in <code>InnerClasses_attribute</code>>. 
+     */
+    public int getInnerAccessFlags() {
+        InnerClassesAttribute ica
+            = (InnerClassesAttribute)getAttribute(InnerClassesAttribute.tag);
+        if (ica == null)
+            return -1;
+
+        String name = getName();
+        int n = ica.tableLength();
+        for (int i = 0; i < n; ++i)
+            if (name.equals(ica.innerClass(i)))
+                return ica.accessFlags(i);
+
+        return -1;
+    }
+
     /**
      * Returns the class name.
      */
index ecdd170f50c799ff372e7b7ebe9ba69813763ea6..55caa07c05b38fefb9f10cde19a7a82a1bfb4d67 100644 (file)
@@ -50,6 +50,12 @@ import javassist.bytecode.*;
  *     }
  * };
  * f.setHandler(mi);
+ * f.setFilter(new MethodFilter() {
+ *     public boolean isHandled(Method m) {
+ *         // ignore finalize()
+ *         return !m.getName().equals("finalize");
+ *     }
+ * });
  * Class c = f.createClass();
  * Foo foo = (Foo)c.newInstance();
  * </pre></ul>