Re: NullPointerException in setMaxStack()
"Dave Brosius" <[email protected]> Sat, 19 Apr 2008 22:17:42 -0500
| Newsgroups | gmane.comp.jakarta.bcel.user |
|---|---|
| Message-ID | <001d01c8a295$18fa9000$6501a8c0@MeBigFatGuy> |
Hmm, maybe i misread your code, and the problem is the other way. Aren't you appending statements after the return statement? ----- Original Message ----- From: "Eduardo Guerra" <[email protected]> To: <[email protected]> Sent: Friday, April 18, 2008 12:37 PM Subject: NullPointerException in setMaxStack() > Hi! > > I'm trying to put some code for log each line of code: There is the code: > > ClassParser cp = new ClassParser(new > ByteArrayInputStream(classFileBuffer),className+".java"); > > JavaClass jc = cp.parse(); > ClassGen cg = new ClassGen(jc); > InstructionFactory factory = new InstructionFactory(cg); > ConstantPoolGen cpg = new ConstantPoolGen(jc.getConstantPool()); > > ObjectType pStream = new ObjectType("java.io.PrintStream"); > > for(int i = 0; i < cg.getMethods().length; i++){ > MethodGen mg = new MethodGen(cg.getMethods()[i], jc.getClassName(), cpg); > InstructionList il = mg.getInstructionList(); > > for(LineNumberGen lng : mg.getLineNumbers()){ > InstructionHandle ih = lng.getInstruction(); > ih = il.append(ih,factory.createFieldAccess("java.lang.System", > "out", pStream, Constants.GETSTATIC)); > ih = il.append(ih,new PUSH(cpg,"Classe "+jc.getClassName()+ " > metodo " + cg.getMethods()[i].getName() + " linha " + > lng.getSourceLine())); > ih = il.append(ih,factory.createInvoke("java.io.PrintStream", > "println", Type.VOID, new Type[]{Type.STRING}, > Constants.INVOKEVIRTUAL)); > } > > mg.setInstructionList(il); > mg.setMaxStack(); > mg.setMaxLocals(); > cg.replaceMethod(cg.getMethods()[i], mg.getMethod()); > } > > cg.setConstantPool(cpg); > JavaClass newClass = cg.getJavaClass(); > > return newClass.getBytes(); > > > For some methods, the setMaxStack() throws NullPointerException with > this stacktrace: > > java.lang.NullPointerException > at > org.apache.bcel.generic.FieldOrMethod.getSignature(FieldOrMethod.java:54) > at > org.apache.bcel.generic.FieldInstruction.getFieldType(FieldInstruction.java:71) > at > org.apache.bcel.generic.FieldInstruction.getType(FieldInstruction.java:64) > at > org.apache.bcel.generic.FieldInstruction.getFieldSize(FieldInstruction.java:57) > at org.apache.bcel.generic.GETSTATIC.produceStack(GETSTATIC.java:47) > at org.apache.bcel.generic.MethodGen.getMaxStack(MethodGen.java:928) > at org.apache.bcel.generic.MethodGen.setMaxStack(MethodGen.java:814) > at teste.IntrumentatorAdaptor.transform(IntrumentatorAdaptor.java:54) > at > sun.instrument.TransformerManager.transform(TransformerManager.java:169) > at > sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365) > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(ClassLoader.java:620) > at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) > at java.net.URLClassLoader.access$000(URLClassLoader.java:56) > at java.net.URLClassLoader$1.run(URLClassLoader.java:195) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:188) > at java.lang.ClassLoader.loadClass(ClassLoader.java:306) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) > at java.lang.ClassLoader.loadClass(ClassLoader.java:251) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) > > > Thanks in advance for any help!!! > > Eduardo Guerra > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] >