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]
>