Re: BCEL newbie question
Jacob Kjome <[email protected]> Fri, 28 Oct 2005 10:12:59 -0500
| Newsgroups | gmane.comp.jakarta.bcel.user |
|---|---|
| Message-ID | <[email protected]> |
Thanks for the reply. That's the direction I needed. Jake Quoting Andrew Huntwork <[email protected]>: > the problem is that the code you're generating is in fact really screwed > up in many ways. class names are wrong, there aren't even enough > methods, and maybe some other things. probably a good way to go would be > for you to disassemble (using javap or some other tool) a class with the > code you want and the class generated by bcel and compare them. then > you can try to make them match by screwing around with the bcel code. > if you can't figure out how to generate a particular segment, ask back here. > > Jacob Kjome wrote: > > Trying yet again. Is my question too newbie or something? I'm hoping > > for a little direction here. > > > > thanks, > > > > Jake > > > > At 09:46 PM 9/19/2005 -0500, you wrote: > > > > > >Trying again. Any takers? Here's a link to the beginning of the thread > > >for better readability.... > > > > > >http://www.mail-archive.com/[email protected]/msg00780.html > > > > > > > > >Jake > > > > > >At 12:24 AM 9/3/2005 -0500, you wrote: > > > > > > > >Is there someone that can comment on this? I'm sure I'm just missing > > > >something small. But even though it is small, I'm still dead in the > > water > > > >until I get it figured out. > > > > > > > >thanks, > > > > > > > >Jake > > > > > > > >At 09:59 AM 8/27/2005 -0500, you wrote: > > > > > > > > > >How do I get this... > > > > > > > > > >private void createMethod_11() { > > > > > InstructionList il = new InstructionList(); > > > > > MethodGen method = new MethodGen(ACC_STATIC | ACC_FINAL, > > > > >Type.VOID, Type.NO_ARGS, new String[] {}, "<clinit>", > > > > > className, il, _cp); > > > > > il.append(_factory.createFieldAccess(className, "class$L" + > > > > >className.replace('.', '$'), new ObjectType( > > > > > "java.lang.Class"), Constants.GETSTATIC)); > > > > > il.append(_factory.createFieldAccess(className, > > > > >"XMLC_GENERATED_CLASS", > > > > > new ObjectType("java.lang.Class"), > > Constants.PUTSTATIC)); > > > > > il.append(_factory.createFieldAccess(className, > > > > > > > > > >"class$Lorg$enhydra$xml$xmlc$dom$xerces$XercesHTMLDomFactory", > > > > > > > > > >new ObjectType("java.lang.Class"), > > > > > Constants.GETSTATIC)); > > > > > > > > > > > >il.append(_factory.createInvoke("org.enhydra.xml.xmlc.dom.XMLCDomFacto > > ryCa > > > >che", > > > > > "getFactory", new > > > > >ObjectType("org.enhydra.xml.xmlc.dom.XMLCDomFactory"), new Type[] > > { new > > > > >ObjectType( > > > > > "java.lang.Class") }, > > Constants.INVOKESTATIC)); > > > > > il.append(_factory.createFieldAccess(className, > > "fDOMFactory", new > > > > >ObjectType( > > > > > "org.enhydra.xml.xmlc.dom.XMLCDomFactory"), > > > > >Constants.PUTSTATIC)); > > > > > il.append(InstructionFactory.createReturn(Type.VOID)); > > > > > method.setMaxStack(); > > > > > method.setMaxLocals(); > > > > > _cg.addMethod(method.getMethod()); > > > > > il.dispose(); > > > > > } > > > > > > > > > >to generate this... > > > > > > > > > > static { > > > > > XMLC_GENERATED_CLASS = > > $$XMLC_GENERATED$$.dyna.dyna01.html.class; > > > > > fDOMFactory = > > > > > > >XMLCDomFactoryCache.getFactory(org.enhydra.xml.xmlc.dom.xerces.XercesHTM > > >LDom > > > > >Factory.class); > > > > > } > > > > > > > > > >currently, it is generating this... > > > > > > > > > > static final { > > > > > XMLC_GENERATED_CLASS = > > class$L$$XMLC_GENERATED$$$dyna$dyna01$html; > > > > > fDOMFactory = > > > > > > >XMLCDomFactoryCache.getFactory(class$Lorg$enhydra$xml$xmlc$dom$xerces$Xe > > >rces > > > > >HTMLDomFactory); > > > > > } > > > > > > > > > > > > > > >The class was originally generated by the BCELifier (by someone > > else on our > > > > >team) based on an example generated XMLC ( > > http://xmlc.objectweb.org/ ) > > > > >class. We tweaked it for our purposes, but the code in the block > > above > > > > >never really worked so we had it commented out (I also removed > > bits to > > > > >avoid generating code that didn't need to be generated and got it > > slimmed > > > > >down to the code you see above). However, that means that some > > > > >functionality isn't available where it works just fine for the > > ASM2 version > > > > >(built with the ASMifier). I would like the two to generate nearly > > > > >identical code and this is the last little bit that I need to get > > > > >working. Can someone please point out the syntax needed to > > generate the > > > > >proper code (like the former, which is spit out by the ASM2 > > version) rather > > > > >than the improper code (like the latter, generated by the BCEL > > code above, > > > > >which is clearly incorrect, but I'm just not familiar enough with > > these > > > > >bytecode tools to know what the proper syntax is). > > > > > > > > > >thanks, > > > > > > > > > > > > > > >Jake > > > > > > > > > > > > > > > > > > > > > > > > >--------------------------------------------------------------------- > > > > >To unsubscribe, e-mail: [email protected] > > > > >For additional commands, e-mail: [email protected] > > > > > > > > > > > > > > > > > > > > > > > > > > >--------------------------------------------------------------------- > > > >To unsubscribe, e-mail: [email protected] > > > >For additional commands, e-mail: [email protected] > > > > > > > > > > > > > > > > > > > > >--------------------------------------------------------------------- > > >To unsubscribe, e-mail: [email protected] > > >For additional commands, e-mail: [email protected] > > > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] >