[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] Getting javax.swing to weave
|
> will that work for rt.jar?
Yes, you just need to be a bit careful you don't damage any key
classes (e.g. java.lang.String or something)
Andy
On 27 June 2011 15:40, Steve Cohen <scohen@xxxxxxxxxxxxxxx> wrote:
> Thanks. I missed the weaveJavaxPackages thing, but I do recall seeing
> earlier today some place where I wondered why they were saying
> weaveJavaPackages=true twice, probably misread it.
>
>> For cases like this it can be simpler just to compile time weave the
>> library containing the code you are interested in:
>>
>> ajc -inpath existingLibrary.jar MyDebugAspect.aj -outjar wovenLibrary.jar
>
> will that work for rt.jar?
>
> This is probably too much work for my purposes. I already solved the
> immediate problem that led me down this path. Which widget was processing
> the PageUp/PageDown keys? It wasn't the JScrollPane, it was its
> JScrollBars, which my code didn't even know about. If I could have woven
> javax.swing, I might have saved a little headscratching. I'm an old java
> hand but a Swing newbie.
>
> At any rate, I think this exercise wasn't a total waste of time. We may use
> AOP to do the logging we can do instead of System.out.println sprinkling or
> log4j.
>
> Steve
>
>
>
> Alas, changing that alone was not enough
> On 06/27/2011 03:47 PM, Andy Clement wrote:
>>
>> Hi,
>>
>> A couple of things. In addition to the weaveJavaPackages there is a
>> weaveJavaxPackages option you may need to set:
>>
>> <weaver options="-verbose
>> -Xset:weaveJavaPackages=true,weaveJavaxPackages=true -showWeaveInfo
>> -debug">
>>
>> but that may still not be enough. It depends on who loads the types
>> you are trying to weave. If it is done by certain classloaders,
>> AspectJ doesn't see the loading and so cannot modify the code. You
>> are supplying -debug which means you should be getting the 'weaving
>> XXX' messages out, are you seeing them for the types you are
>> targetting with your aspect?
>>
>> For cases like this it can be simpler just to compile time weave the
>> library containing the code you are interested in:
>>
>> ajc -inpath existingLibrary.jar MyDebugAspect.aj -outjar wovenLibrary.jar
>>
>> and then run with your new library, perhaps putting it earlier on the
>> classpath so that the VM uses it rather than the standard (something
>> like):
>>
>> java -bootclasspath/p:wovenLibrary.jar Main
>>
>> (can't 100% remember the bootcp syntax, something like that).
>>
>> cheers
>> Andy
>>
>> On 27 June 2011 13:11, Steve Cohen<scohen@xxxxxxxxxxxxxxx> wrote:
>>>
>>> [first posted at the AJDT forum where I was urged to try here]
>>>
>>> I am a newbie to AOP, AspectJ, and AJDT.
>>>
>>> I am trying to set up a debug time usage of AOP to help our team debug a
>>> complicated and somewhat odd Swing application that does a lot of strange
>>> keyboard remapping, since it needs to emulate and existing application.
>>>
>>> To determine why some things don't work, I need to know which class is
>>> handling a given keystroke.
>>>
>>> My pattern is to wrap the existing Swing project in an AspectJ project
>>> (putting the Swing project on the AspectJ project's Build Path), and
>>> defining an aspect that pointcuts at the appropriate places. The aspect
>>> is
>>> as follows:
>>>
>>> package com.whatever.gui.aop;
>>>
>>> import java.awt.event.ActionEvent;
>>> import java.awt.event.ActionListener;
>>> import java.awt.event.KeyEvent;
>>>
>>> import javax.swing.Action;
>>> import javax.swing.JComponent;
>>> import javax.swing.KeyStroke;
>>>
>>> import com.whatever.gui.Login;
>>> import com.whatever.gui.kbd.KeyRemapper;
>>>
>>>
>>> aspect CapLogger {
>>>
>>> pointcut logActionSearch(JComponent jc, KeyStroke ks)
>>> : target (jc)
>>> && args(ks)
>>> && execution( protected
>>> JComponent+.processKeyBinding(KeyStroke, KeyEvent,
>>> int, boolean));
>>>
>>> before(JComponent jc, KeyStroke ks) : logActionSearch(jc, ks) {
>>> Class klass = jc.getClass();
>>> System.out.println(String.format("Searching for handler
>>> for
>>> %s in %s",
>>> ks, klass));
>>> }
>>> pointcut logAction(ActionListener a, ActionEvent e)
>>> : target(a)
>>> && args(e)
>>> && execution(* actionPerformed(ActionEvent));
>>>
>>> after(ActionListener a, ActionEvent e) : logAction(a, e) {
>>> Object source = e.getSource();
>>> Class klass = source.getClass();
>>> if (a instanceof Action) {
>>> System.out.println(String.format("action %s
>>> performed
>>> by an object of class %s", ((Action)a).getValue(Action.NAME),
>>> klass.getName()));
>>> } else {
>>> System.out.println(String.format("action performed
>>> by
>>> an object of class %s", klass.getName()));
>>> }
>>> }
>>> ...
>>> public static void main(String[] args) {
>>> Login.main(args);
>>> }
>>> }
>>>
>>> I try to enable runtime weaving with this aop.xml file on the classpath
>>> under META-INF:
>>>
>>> <aspectj>
>>>
>>> <aspects>
>>> <!-- declare two existing aspects to the weaver -->
>>> <aspect name="com.whatever.gui.aop.CapLogger"/>
>>>
>>> </aspects>
>>>
>>> <weaver options="-verbose -Xset:weaveJavaPackages=true
>>> -showWeaveInfo -debug">
>>> <include within="javax.swing.*"/>
>>> <include within="java.awt.*"/>
>>> <include within="com.whatever.*"/>
>>> </weaver>
>>>
>>> </aspectj>
>>>
>>>
>>> I run the application in the AspectJ project with the following JVM
>>> argument
>>> within Eclipse:
>>>
>>>
>>> -javaagent:${eclipse_home}\plugins\org.aspectj.weaver_1.6.11.20110304135300\aspectjweaver.jar
>>>
>>> and I've tried several other variations.
>>>
>>> No matter what I do, I find that my advices fire when the triggering code
>>> is
>>> within my com.whatever.* code but never fire when the triggering code is
>>> within javax.swing.* or java.awt.*.
>>>
>>> What, if anything, am I doing wrong? Can someone help? Is this even
>>> possible?
>>>
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>