Here's how the line number attribute works:  when the MethodGen is created
from a Method (
http://jakarta.apache.org/bcel/xref/org/apache/bcel/generic/MethodGen.html#230),
the LineNumberTable Attribute (which knows about instruction indexes) get
converted into LineNumberGen objects which know about InstructionHandles and
implement InstructionTargeter.  Then when the MethodGen is turned back into
a method (
http://jakarta.apache.org/bcel/xref/org/apache/bcel/generic/MethodGen.html#627),
the LineNumberGen objects are turned into an updated LineNumberTable
object.  So the offsets  in the attribute are not kept up to date.  They are
only valid right after the MethodGen is created from the Method and right
after the Method is created from the MethodGen.

You'll probably want to mimic that code for your new attribute.  bcel is
open-source, so feel free to download the source and modify it for your
purposes.  you could even modify bcel to make Attributes pluggable.  then
you could submit that patch to bcel-dev, get it included, and probably not
have to maintain any bcel patches yourself.

if you don't want to modify bcel source, you could use aspectj to write some
"after returning" advice on MethodGen(Method m) and MethodGen.getMethod()
that updates your Attribute's properties.  failing that, it should even be
possible to manually update your Attribute when either of those methods is
called.

On 12/18/05, [EMAIL PROTECTED] <
[EMAIL PROTECTED]> wrote:
>
> I have done so, but the problem is that when I delete/add some
> instructions this number becomes wrong.
>
>   I thinks that I have to implement the class InstructionTargeter,
> like  in the object LineNumber in the attribute LineNumberTable.
>   In that case there are two class: LineNumber and LineNumberGen.
>   Only the second one implements the class InstructionTargeter.
>
>   My attribute must save the positions of two instruction, an
> integer,  and a structure (both the reading and the writing). With my
> actual  implementation it save the two position like an integer. But when
> I  add/delete some instructions this number becomes wrong.
>   I tried to use the two LineNumber elements to save them, but they are
> not updated like happens in the LineNumberTable attribute.
>
>   Someone knows why this happens?
>
>   Thanks.
>
>
> Andrew Huntwork <[EMAIL PROTECTED]> ha scritto:   The InstructionTargeter
> interface may be what you want.  You may also want
> to make sure that when you serialize your attribute (in dump(), it would
> appear), InstructionHandle.getPosition is up to date.  You can use
> InstructionList.setPositions() for that purpose.
>
> On 12/15/05, Emanuele Debenedetti  wrote:
> >
> > I have created a new attribute using bcel.
> > This attribute should points at two instructions:
> > actually I record two integer, but if I delete one or
> > more instruction this interger become wrong.
> >
> > I think that I should create a pointer to an
> > InstructionHandle like the goto Instruction, but I
> > have non idea how to do this.
> >
> > Could you help me?
> >
> > Thanks.
> >
> >
> >
> >
> >
> >
> > ___________________________________
> > Yahoo! Mail: gratis 1GB per i messaggi e allegati da 10MB
> > http://mail.yahoo.it
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
>
>
> ---------------------------------
> Yahoo! Messenger: chiamate gratuite in tutto il mondo
>

Reply via email to