No, it is runtime - see the "instrument" package.
Andrus
On May 18, 2006, at 8:57 PM, Cris Daniluk wrote:
> I got the impression we were doing this modification at compile time,
> and not runtime... if so, wouldn't BCEL be better? ASM gives up a lot
> of clarity (in my opinion) for sheer runtime performance.
>
> Cris
>
> On 5/18/06, Andrus Adamchik <andru..bjectstyle.org> wrote:
>> Bill,
>>
>> I had an idea of how we can go about it, although I got a little
>> backed up to try it now. Do you have time to play with it?
>>
>> IIRC ASM bytecode reader uses callback mechanism to notify the writer
>> when a certain piece of code (such as method) is parsed. In a non-
>> transforming case the writer simply outputs everything the reader
>> gives it. So how about this - when a callback is invoked for a method
>> that we want to intercept, our transformer writes it into a method
>> with a different name, at the same time generating a method with the
>> original name that invokes the interceptor code and the newly created
>> method. This way we can treat the method body as a black box, and
>> still wrap it with custom code:
>>
>> Original:
>>
>> public void setX(Object x) {
>> ... some code ...
>> }
>>
>>
>> Transformer output:
>>
>> public void setX(Object x) {
>> beforeSetX();
>> ___setX(x);
>> afterSetX();
>> }
>>
>> private void ____setX(Object x) {
>> ... some code ...
>> }
>>
>>
>> Andrus
>>
>>
>> On May 17, 2006, at 10:43 AM, Andrus Adamchik wrote:
>>
>> > Hi Bill,
>> >
>> > I will be working on the B3 release today. Once this is done, I'll
>> > take a look at how we can do it with ASM.
>> >
>> > Andrus
>> >
>> >
>> > On May 16, 2006, at 11:40 PM, Bill Dudney wrote:
>> >
>> >> Hey Andrus,
>> >>
>> >> I spent the bulk of my time investigating ASM route and I don't
>> >> see a straightforward way to do the injection. Creating new
>> >> methods is straightforward but injecting method calls around the
>> >> original method is not so straightforward.
>> >>
>> >> Any ideas how that might work?
>> >>
>> >> Thanks,
>> >>
>> >> -bd-
>> >>
>> >> On May 16, 2006, at 10:22 AM, Andrus Adamchik wrote:
>> >>
>> >>> Bill,
>> >>>
>> >>> This confirms my suspicion that CGlib was not designed for such
>> >>> use. Probably we may need to try using ASM directly. But of
>> >>> course if anyone can get in touch with CGlib folks, it would be
>> >>> nice to doublecheck with them.
>> >>>
>> >>> Andrus
>> >>>
>> >>>
>> >>> On May 16, 2006, at 1:50 AM, Bill Dudney wrote:
>> >>>
>> >>>> Hi Andrus,
>> >>>>
>> >>>> Sorry I'm still not done.
>> >>>>
>> >>>> I've been searching and hacking for way to long now to try to
>> >>>> get this code in. The basic problem is that like you I could not
>> >>>> find a way to wrap the original implementation of the method
>> >>>> using the CGLib implementation path that exists in the rest of
>> >>>> the code. It appears to be easy with the Enhancer API.
>> >>>>
>> >>>> I prefer your approach to the Enhancer but I'm at a loss as to
>> >>>> how to make it work. I'll try to get some more time tomorrow to
>> >>>> look at it but I'm going to be very busy doing J1 stuff.
>> >>>>
>> >>>> Does anyone know if the CGLib folks are on IRC anywhere?
>> >>>>
>> >>>> TTFN,
>> >>>>
>> >>>> -bd-
>> >>>>
>> >>>> On May 4, 2006, at 7:15 PM, Andrus Adamchik wrote:
>> >>>>
>> >>>>> I need some help with CGLib. It is great for proxies, but our
>> >>>>> enhancer changes the actual class instead of making a proxied
>> >>>>> subclass. Such scenario is a pain... Maybe Jeff or someone else
>> >>>>> has an idea how to implement the enhancing code below?
>> >>>>>
>> >>>>> Basically I am trying to inject code calling a static delegate
>> >>>>> method in three places:
>> >>>>>
>> >>>>> 1. Property getter start: DataObjectDelegate.beforeGetProperty
>> >>>>> 2. Property setter start: DataObjectDelegate.beforeSetProperty
>> >>>>> 3. Property setter end: DataObjectDelegate.afterSetProperty
>> >>>>>
>> >>>>> I was able to implement a simpler case of creating synthetic
>> >>>>> properties with getters and setters (InterfaceMethodInjector),
>> >>>>> but got stuck with this one (see TODO's on the
>> >>>>> DataObjectAccessorInjector). I suspect we'll have to use ASM
>> >>>>> for that, but if anyone can figure a CGlib solution, please let
>> >>>>> me know.
>> >>>>>
>> >>>>> Andrus
>> >>>>
>> >>>>
>> >>>
>> >>
>> >>
>> >
>> >
>>
>>
>
This archive was generated by hypermail 2.0.0 : Thu May 18 2006 - 21:04:17 EDT