Browse Source

fixed a bug in getModifiers() in CtClass.


git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@236 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/rel_3_17_1_ga
chiba 18 years ago
parent
commit
ad7d5a9214

+ 2
- 0
Readme.html View 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.

+ 3
- 0
src/main/javassist/CtClass.java View 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() {

+ 9
- 1
src/main/javassist/CtClassType.java View 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);

+ 2
- 0
src/main/javassist/Modifier.java View 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>

+ 23
- 0
src/main/javassist/bytecode/ClassFile.java View 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.
*/

+ 6
- 0
src/main/javassist/util/proxy/ProxyFactory.java View 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>

Loading…
Cancel
Save