[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] simple question
|
David,
It's important to note that the target of a constructor call is always null, even after the join point has executed. That's what I was saying parenthetically.
I find this to be inconsistent because the value for "this" on a constructor execution join point is non-null, after the join point has returned. But it's the language design, and is not considered a bug.
Ron
Ron Bodkin
Chief Technology Officer
New Aspects of Security
m: (415) 509-2895
> ------------Original Message-------------
> From: "Costakos,David" <costakod@xxxxxxxx>
> To: "'aspectj-users@xxxxxxxxxxx'" <aspectj-users@xxxxxxxxxxx>
> Date: Tue, Sep-30-2003 6:10 AM
> Subject: RE: [aspectj-users] simple question
>
> I agree that after returning advice should work. I tested your code and it
> works for me.
>
> I think the discrepancy may be centered around "target" pointcuts.
>
> I've modified your example slightly in a way that breaks it using a target
> pointcut to capture the join point context. Your example captured the
> JComponent object just using after returning advice. As I read the
> Production Aspects section of the online documentation, this code should
> work. Have I read it wrong or misunderstood something?
>
> import javax.swing.JTextField;
> import javax.swing.JComponent;
>
> public aspect AddToolTip {
> pointcut newJ(JComponent c):
> call(JComponent+.new(..)) && target(c); // <-- This uses target to
> capture context
>
> after(JComponent c) returning : newJ(c) {
> c.setToolTipText("OK");
> System.out.println("set tool tip");
> }
>
> public static void main(String args[]) {
> JTextField comp = new JTextField();
> System.out.println("text is "+comp.getToolTipText());
>
> }
> }
>
> Thanks in advance Ron (or whoever answers this post).
>
> -----Original Message-----
> From: Ron Bodkin [mailto:rbodkin@xxxxxxxxxxxxxx]
> Sent: Monday, September 29, 2003 7:38 PM
> To: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] simple question
>
>
> David,
>
> After returning advice should work, if you bind the result using after
> returning (JComponent c), rather than trying to use target (which is always
> null for a ctor).
>
> Another possible problem could be if you had some other advice interacting
> with this one, though that seems less likely.
>
> If, in fact, the after returning approach didn't work, it would be a bug and
> it would be helpful to post a standalone example that illustrates it.
>
> Here's an example where after returning does work:
>
> import javax.swing.JTextField;
>
> public aspect AddToolTip {
> pointcut newJ():
> call(javax.swing.JComponent+.new(..));
>
> after() returning (javax.swing.JComponent c) : newJ() {
> c.setToolTipText("OK");
> System.out.println("set tool tip");
> }
>
> public static void main(String args[]) {
> JTextField comp = new JTextField();
> System.out.println("text is "+comp.getToolTipText());
>
> }
> }
>
> Ron Bodkin
> Chief Technology Officer
> New Aspects of Security
> m: (415) 509-2895
>
> > ------------Original Message-------------
> > From: "Costakos,David" <costakod@xxxxxxxx>
> > To: "'aspectj-users@xxxxxxxxxxx'" <aspectj-users@xxxxxxxxxxx>
> > Date: Mon, Sep-29-2003 12:45 PM
> > Subject: RE: [aspectj-users] simple question
> >
> > Having tried this out, I wasn't about to make this happen with before or
> > after or after returning advice.
> >
> > Around advice seemed to work though:
> >
> > pointcut newJ():
> > call(JComponent+.new(..));
> >
> > Object around(): newJ() {
> > Object o = proceed();
> > ((JComponent)o).setToolTipText("My Tip");
> > System.err.println("Set");
> > return o;
> > }
> >
> > If anyone could explain why only around advice seemed to work, I'd
> > appreciate it!
> >
> > Thanks,
> >
> > Dave.
> >
> > -----Original Message-----
> > From: Ron Bodkin [mailto:rbodkin@xxxxxxxxxxxxxx]
> > Sent: Monday, September 29, 2003 1:16 PM
> > To: aspectj-users@xxxxxxxxxxx
> > Subject: Re: [aspectj-users] simple question
> >
> >
> > Hi Dmitry,
> >
> > You surely don't want before advice here; the given object hasn't been
> > initialized at that point (and target is null). For a more complete
> > discussion of the topic of construction join points and how to access
> newly
> > constructed objects, see the FAQ entries 10.6 and 10.7 at
> >
> http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/doc/faq
> > .html#q:initializationjoinpoints
> >
> > Here's a stab at how you might write your aspect. If you need to set the
> > tool tip "during" construction and not after, you probably will want to
> > write a pointcut based on being withincode of your constructors.
> >
> > public aspect AddToolTip {
> > pointcut newJ():
> > call(javax.swing.JComponent+.new(..));
> >
> > after() returning (javax.swing.JComponent c) : newJ(){
> > c.setToolTipText("OK");
> > }
> > }
> >
> > Ron Bodkin
> > Chief Technology Officer
> > New Aspects of Security
> > m: (415) 509-2895
> >
> > > ------------Original Message-------------
> > > From: =?koi8-r?Q?=22=E4=CD=C9=D4=D2=C9=CA=22=20?= <dmrzh@xxxxxxx>
> > > To: aspectj-users@xxxxxxxxxxx
> > > Date: Sun, Sep-28-2003 11:50 PM
> > > Subject: [aspectj-users] simple question
> > >
> > > I want write aspect for set ToolTip text for all comonents, but this
> picks
> > out no join points.
> > > Help me please.
> > >
> > > import javax.swing.JComponent;
> > > public aspect AddToolTip {
> > > pointcut newJ(javax.swing.JComponent c):
> > > call(javax.swing.JComponent+.new(..))&& target(c);
> > > before(javax.swing.JComponent c) : newJ(c){
> > > c.setToolTipText("OK");
> > > }
> > > }
> > >
> > >
> > > import javax.swing.*;
> > > import java.awt.*;
> > > public class MyFrame extends JFrame{
> > > public static void main(String[] args){
> > > MyFrame f=new MyFrame();
> > > f.setSize(300,300);
> > > JPanel cp=new JPanel(new FlowLayout());
> > > JButton b=new JButton("Ok");
> > > cp.add(b);
> > > f.setContentPane(cp);
> > > f.show();
> > > }
> > >
> > > }
> > >
> > > Dmitriy.
> > >
> > > _______________________________________________
> > > aspectj-users mailing list
> > > aspectj-users@xxxxxxxxxxx
> > > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> > >
> > >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> >
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>