You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-dev@jakarta.apache.org by ssme <sa...@yahoo.com> on 2006/10/18 15:06:55 UTC
Change super class of a class
I am trying to change super class of an existing class. I have 2 classes . I
want to extend one from other and write back the class file. I do it by
following way.
out.println("Extension updating class file: InputFile "+inputFile+"
extending from "+ExtendFile);
JavaClass oldClass = Repository.lookupClass(inputFile);
JavaClass newSuper = Repository.lookupClass(ExtendFile);
JavaClass[] interfaces = oldClass.getAllInterfaces();
boolean alreadyExtended = false;
for (int i=0; i<interfaces.length; i++)
{
JavaClass itf = interfaces[i];
String itfName = itf.getClassName();
if (itfName.equals(ExtendFile))
alreadyExtended = true;
}
if (!alreadyExtended)
{
ClassGen cg = new ClassGen( oldClass );
if(!oldClass.isInterface())
cg.setSuperclassName(newSuper.getClassName());
else
cg.addInterface(newSuper.getClassName());
cg.update();
String className = oldClass.getClassName();
String path = Repository.lookupClassFile(className).getPath();
File f = new File(path);
cg.getJavaClass().dump(f);
out.println("Extension update: successful");
} else
{
out.println("Extension update: ignore, already extended from this
class/interface");
}
But i get error when i load the class.
Call to wrong initialization method
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
Both of my class has constructor which takes one parameter and call super
constructor. Looks like it changes the super class name , but the doesn't
change the reference of the super. For example if B extends A and C extends
A, i want to make C extends B. But after applying BCEL, C constructor which
has a super call still refer to A , not B.
Please help. I don't know if i miss something.
Thanks.
--
View this message in context: http://www.nabble.com/Change-super-class-of-a-class-tf2466469.html#a6875790
Sent from the BCEL - Dev mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org