[jboss-jira] [JBoss JIRA] Created: (JASSIST-25) RuntimeException: cannot set to static - when calling CtClassType.setModifiers(int mod)
Martin Burger (JIRA)
jira-events at jboss.com
Fri Aug 4 13:16:12 EDT 2006
RuntimeException: cannot set to static - when calling CtClassType.setModifiers(int mod)
---------------------------------------------------------------------------------------
Key: JASSIST-25
URL: http://jira.jboss.com/jira/browse/JASSIST-25
Project: Javassist
Issue Type: Bug
Environment: Windows XP SP2, Mac OS 10.4
Reporter: Martin Burger
Assigned To: Shigeru Chiba
Hello!
I wrote a class that removes final modifier from given classes, here's the most relevant method:
Code:
public void instrument(CtClass clazz) {
int modifiers = clazz.getModifiers();
if (Modifier.isFinal(modifiers)) {
logger.info("Will remove final modifier from class: " + clazz.getName());
logger.debug("Old modifiers: " + Modifier.toString(modifiers));
int newModifiers = Modifier.clear(modifiers, Modifier.FINAL);
logger.debug("New modifiers: " + Modifier.toString(newModifiers));
clazz.setModifiers(newModifiers);
} else {
logger.debug("Class is not final, nothing do change: " + clazz.getName());
}
}
Running my util on the JDK classes results in an exception:
Code:
Exception in thread "main" java.lang.RuntimeException: cannot set to static
at javassist.CtClassType.setModifiers(CtClassType.java:374)
The last lines of my log are:
Code:
307 [ main] TRACE mon.javassist.FileInstrumenter - Current jar entry: com/sun/corba/se
/impl/corba/AnyImpl$AnyInputStream.class
307 [ main] INFO y.framework.utils.FinalRemover - Will remove final modifier from cla
ss: com.sun.corba.se.impl.corba.AnyImpl$AnyInputStream
308 [ main] DEBUG y.framework.utils.FinalRemover - Old modifiers: static final
308 [ main] DEBUG y.framework.utils.FinalRemover - New modifiers: static
The class CtClassType contains the following lines:
Code:
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);
}
So, why is it not possible to change the modifier from "static final" to "static"? AFAIK, static inner classes are allowed, aren't they?
Regards, Martin
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list