Re: BCEL newbie question

Andrew Huntwork <[email protected]> Thu, 27 Oct 2005 22:15:35 -0700
Newsgroups gmane.comp.jakarta.bcel.user
Message-ID <[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]