[jboss-user] [Javassist user questions] - NewExpr Error!!!!
Panzer_Kavalier
do-not-reply at jboss.com
Sat Aug 19 14:58:47 EDT 2006
public class Test implements Runnable{
public Test(){
Thread t = new Thread(this);
t.start();
}
public void run(){
System.out.println("run");
}
/**
* @param args
*/
public static void main(String[] args) {
Test test = new Test();
}
}
-----------------------------------------------------------------------------
public class EmulatorThread implements Runnable{
public Runnable _target;
public EmulatorThread(Runnable target) {
_target = target;
}
protected void start(){
(new Thread(this)).start();
}
public void run()
{
if(_target != null)
_target.run();
}
}
---------------------------------------
public class MethodSetEditor extends ExprEditor {
public void edit(NewExpr m) throws CannotCompileException{
try{
if (m.getConstructor().getDeclaringClass().getName()
.equals("java.lang.Thread")) {
if (m.getConstructor().getSignature().equals(
"(Ljava/lang/Runnable;)V")) {
m.replace("{$_ = new EmulatorThread($1);}");
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
-----------------------------------------
when I use the folowing codes to modify the above code:
ClassPool pool = ClassPool.getDefault();
try{
pool.appendClassPath("D:\\eclipse\\workspace\\Javassist\\");
CtClass cc = pool.makeClass(new FileInputStream("D:\\eclipse\\workspace\\Javassist\\Test.class"));
CtField [] cts = cc.getFields();
for(int i = 0; i < cts.length; i++){
if(cts.getSignature().equals("Ljava/lang/Thread;"))
cts.setType(pool.makeClass("EmulatorThread"));
}
cc.instrument(new MethodSetEditor());
cc.writeFile("E:\\");
}
catch(Exception e){
e.printStackTrace();
}
when I run the Test. the following error occured:
Exception in thread "main" java.lang.VerifyError: (class: Test, method: s
ignature: ()V) Incompatible object argument for function call
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3966260#3966260
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3966260
More information about the jboss-user
mailing list