Skip to main content



      Home
Home » Language IDEs » AspectJ » how to do static crosscutting (adding of member-variables) across multiple classes?
how to do static crosscutting (adding of member-variables) across multiple classes? [message #35854] Wed, 19 May 2004 05:28 Go to next message
Eclipse UserFriend
Hi all,
first: sorry for the cross-posting, but since nobody responded in the
AspectJ-NG (which doesn't seem too lively, anyway) I thought I try my
luck here.

I am trying to get rid of some clutter in our code that only hinders
readability and is never correctly updated anyway, which should sound
familiar to many of you:

For legal reasons we need to have a line
--------------------
public final static String COPYRIGHT = "bla bla...";
--------------------
in each class. The idea is, that this string constant makes it into
the final class-file and thus - when the file is displayed/dumped -
the origin of the file becomes visible.

This - I thought - should be a perfect case for an aspect: define a
pointcut that matches ALL classes within and below a certain package
and add said variable to each matching class as a static variable.

But how do I specify such a pointcut? It's clearly a static, not a
dynamic pointcut, but which pointcut type matches a class? And how do
I reference that class in the advice???

I tried e.g. this:
public aspect AddCopyRightString {
public pointcut allActClasses(Class x):
staticinitialization(com.mycompany..*) && this(x);
/**
* add a static copyright String member to each class:
*/
public final static String x.COPYRIGHT = "bla bla...";
}

.... but this only yields an error saying "x can not be resolved". How
do I get a reference to the matching class?

Another approach I tried:

public aspect AddCopyRightString {
/**
* add a static copyright String member to each class:
*/
public final static String com.mycompany..*.COPYRIGHT = "bla
bla...";
}

yielded: "Syntax error on tokens, JavaIdentifier expected instead".

Any help in better understanding how to apply AspectJ to such cases
would be highly appreciated!

Michael
Re: how to do static crosscutting (adding of member-variables) across multiple classes? [message #35889 is a reply to message #35854] Wed, 19 May 2004 09:26 Go to previous messageGo to next message
Eclipse UserFriend
This is a multi-part message in MIME format.

------=_NextPart_000_0025_01C43DB5.AC935C50
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

The following variant works during runtime, i.e. can request the =
copyright-string's value from each and every class, but - alas, in this =
case - the string's value is not actually copied into each classfile and =
thus this does not fulfil my requirement. :-(

------------------
public aspect AddCopyRightString=20
{
public interface HasCopyRightString {
// add a static copyright String member to each class:=20
public final static String COPYRIGHT =3D "bla bla...";
}

declare parents: (com.mycompany..* && // all classes in and under =
com.tivoli.act
!com.mycompany.AddCopyRightString) // except this =
aspect (to prevent recursion)...
implements HasCopyRightString; // ...will =
implement the above interface
}
------------------

I also experimented with static aspects, i.e.:

------------------
public aspect AddCopyRightString=20
{
public interface HasCopyRightString {
static aspect Impl {
// add a static copyright String member to each class:=20
public final static String COPYRIGHT =3D "bla bla...";
// ^^^^^^ not allowed...
}
}
declare parents: (com.mycompany..* && // all classes in and under =
com.tivoli.act
!com.mycompany.AddCopyRightString) && // except =
this aspect=20
!com.mycompany.AddCopyRightString.Impl) // and =
this aspect (to prevent recursion)...
implements HasCopyRightString; // ...will =
implement the above interface
}
------------------
but alas, static fields are not supported in static aspects. And I am =
not sure either, whether this would mean that the string's value would =
actually be "woven" into each class file.

Still seeking an "aspectized" solution for this. Any ideas?
Michael


"Michael Moser" <mmo@zurich.ibm.com> wrote in message =
news:c8f8ta$rjl$1@eclipse.org...
> ...

"Michael Moser" <mmo@zurich.ibm.com> wrote in message =
news:c8daa0$l6s$1@eclipse.org...
> ...
------=_NextPart_000_0025_01C43DB5.AC935C50
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff background=3D"">
<DIV><FONT face=3DArial size=3D2>The following variant works during =
runtime, i.e.=20
can request the copyright-string's value from each and every class, but =
- alas,=20
in this case - the string's value is not actually copied into each =
classfile and=20
thus this does not fulfil my requirement. :-(</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV><FONT face=3DArial =
size=3D2>
<DIV>------------------<BR><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp; public interface HasCopyRightString=20
{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; // add a static =
copyright String=20
member to each class: <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; =
public=20
final static String COPYRIGHT =3D "bla bla...";<BR>&nbsp;&nbsp;&nbsp;=20
}<BR><BR>&nbsp;&nbsp;&nbsp; declare parents: (com.mycompany..* =
&amp;&amp; // all=20
classes in and under=20
com.tivoli.act<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
!com.mycompany.AddCopyRightString) // except this aspect (to prevent=20
recursion)...<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
implements HasCopyRightString; // ...will implement the above=20
interface<BR>}<BR></FONT>------------------</DIV>
<DIV><BR>I also experimented with static aspects, i.e.:</DIV>
<DIV><BR><FONT face=3DCourier><FONT=20
face=3DArial>------------------</FONT></FONT></DIV>
<DIV><FONT face=3DCourier>public aspect AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp; public interface HasCopyRightString=20
{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; static aspect Impl=20
{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; // =
add a=20
static copyright String member to each class: <BR>&nbsp;&nbsp;&nbsp;=20
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; public final static String =
COPYRIGHT=20
=3D "bla bla...";</FONT></DIV>
<DIV><FONT=20
face=3DCourier> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n b=
sp;=20
^^^^^^ not allowed...</FONT></DIV>
<DIV><FONT face=3DCourier>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;=20
}<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV><FONT face=3DCourier>&nbsp;&nbsp;&nbsp; declare parents: =
(com.mycompany..*=20
&amp;&amp; // all classes in and under=20
com.tivoli.act<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
!com.mycompany.AddCopyRightString) &amp;&amp; // except this=20
aspect&nbsp;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
!com.mycompany.AddCopyRightString.Impl) // and this aspect (to prevent=20
recursion)...<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
implements HasCopyRightString; // ...will implement the above=20
interface<BR>}</FONT></DIV>
<DIV><FONT face=3DCourier><FONT =
face=3DArial>------------------</FONT></FONT></DIV>
<DIV><FONT face=3DCourier><FONT face=3DArial>but alas, static fields are =
not=20
supported in static aspects. And I am not sure either, whether this =
would mean=20
that the string's value would actually be "woven" into each class=20
file.</FONT></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>Still seeking an "aspectized" solution for this. Any=20
ideas?<BR>Michael</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>"Michael Moser" &lt;mmo@zurich.ibm.com&gt; wrote in message <A=20
href=3D"news:c8f8ta$rjl$1@eclipse.org">news:c8f8ta$rjl$1@eclipse.org</A>.=
...</DIV>
<DIV>&gt; ...<BR><BR>"Michael Moser" &lt;mmo@zurich.ibm.com&gt; wrote in =
message=20
<A=20
href=3D"news:c8daa0$l6s$1@eclipse.org">news:c8daa0$l6s$1@eclipse.org</A>.=
...</DIV>
<DIV>&gt; ...</FONT></DIV></BODY></HTML>

------=_NextPart_000_0025_01C43DB5.AC935C50--
Re: how to do static crosscutting (adding of member-variables) across multiple classes? [message #37053 is a reply to message #35889] Tue, 01 June 2004 13:38 Go to previous message
Eclipse UserFriend
This is a multi-part message in MIME format.

------=_NextPart_000_0019_01C44810.099DA720
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Coming back to this issue: defining an intertype for a specific class =
works:

public aspect AddCopyRightString=20
{
// add a static copyright String member to a specific class:=20
public final static String package.someClass.COPYRIGHT =3D "bla =
bla...";
}

while defining the same for all classes in a package does not:

public aspect AddCopyRightString=20
{
// add a static copyright String member to each class in a package:=20
public final static String package.*.COPYRIGHT =3D "bla bla...";
}

nor does it for a subset of classes:

public aspect AddCopyRightString=20
{
// add a static copyright String member to a subset of classes:=20
public final static String package.SomePrefix*.COPYRIGHT =3D "bla =
bla...";
}


IMHO this is a bug or at least a severe inconsistency in AspectJ!

Since for pointcuts one can specify wildcards (see "AspectJ in Action", =
page 69) like e.g.:

javax..* to specify any type in or below the java package=20
or e.g.
javax..*Model+ to specify each class in package java or subpackages =
of it whose names end in "Model" and all it derived classes.

so one should be able to use the same technique to define inter-type =
declarations, i.e. e.g.

public int javax..*.someMember =3D 0;
or=20
public int javax..*Model+.someMember =3D 10;


Any hope on the horizon that this will be possible anytime soon? Or is =
there any "deeper" reason for this inconsistency?=20

Michael

------=_NextPart_000_0019_01C44810.099DA720
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff background=3D"">
<DIV><FONT face=3DArial size=3D2>Coming back to this issue: </FONT><FONT =
face=3DArial=20
size=3D2>defining an intertype for a specific class works:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DCourier></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// add a static copyright String member =
to a=20
specific class:&nbsp;<BR>&nbsp;&nbsp;&nbsp; public final static String=20
package.someClass.COPYRIGHT =3D "bla bla...";<BR>}</FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DCourier></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DCourier size=3D2>
<DIV><FONT face=3DArial size=3D2>while defining the same for all classes =
in a=20
package does not:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DArial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// add a static copyright String member =
to each=20
class in a package:&nbsp;<BR>&nbsp;&nbsp;&nbsp; public final static =
String=20
package.*.COPYRIGHT =3D "bla =
bla...";<BR>}</FONT></FONT></DIV></FONT></DIV>
<DIV><FONT face=3DCourier size=3D2>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DArial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial>nor=20
does&nbsp;it for a subset of classes:</FONT></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DArial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// add a static copyright String member =
to a=20
subset of&nbsp;classes:&nbsp;<BR>&nbsp;&nbsp;&nbsp; public final static =
String=20
package.SomePrefix*.COPYRIGHT =3D "bla=20
bla...";<BR>}</FONT></FONT></DIV></FONT></DIV>
<DIV><FONT face=3DCourier size=3D2></FONT>&nbsp;</DIV>
<DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>IMHO this&nbsp;is a bug or at least a =
severe=20
inconsistency in AspectJ!<BR></DIV></FONT><FONT face=3DArial =
size=3D2></FONT>
<DIV><FONT face=3DArial size=3D2>Since for pointcuts one can specify=20
wildcards&nbsp;(see "AspectJ in Action", page 69) like =
e.g.:</FONT></DIV>
<DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT=20
face=3DCourier>javax..*</FONT>&nbsp;&nbsp;&nbsp; to specify any type in =
or below=20
the java package </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>or e.g.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT=20
face=3DCourier>javax..*Model+</FONT>&nbsp;&nbsp;&nbsp; to specify each =
class in=20
package java or subpackages of it&nbsp;whose names&nbsp;end in "Model" =
and all=20
it derived classes.</FONT><FONT face=3DArial =
size=3D2></DIV></DIV></FONT>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial>so=20
one&nbsp;should be able to use the same technique to define inter-type=20
declarations, i.e.&nbsp;</FONT></FONT></FONT><FONT face=3DArial=20
size=3D2>e.g.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DCourier size=3D2>public int javax..*.someMember =3D =
0;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>or </FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial><FONT=20
face=3DCourier size=3D2><FONT face=3DCourier size=3D2>public </FONT>int=20
javax..*Model+.someMember =3D 10;</DIV>
<DIV>
<DIV>
<DIV><FONT=20
face=3DArial></FONT>&nbsp;</DIV></FONT></DIV></FONT ></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT=20
face=3DArial></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial>Any hope on the=20
horizon that this will be possible anytime soon? =
</FONT></FONT></FONT><FONT=20
face=3DArial size=3D2><FONT face=3DCourier><FONT face=3DArial>Or is =
there any "deeper"=20
reason for this inconsistency? </FONT></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DCourier><BR></FONT>Michael</DIV></DIV>
<DIV></FONT>&nbsp;</DIV></BODY></HTML>

------=_NextPart_000_0019_01C44810.099DA720--
Re: how to do static crosscutting (adding of member-variables) across multiple classes? [message #579718 is a reply to message #35854] Wed, 19 May 2004 09:26 Go to previous message
Eclipse UserFriend
This is a multi-part message in MIME format.

------=_NextPart_000_0025_01C43DB5.AC935C50
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

The following variant works during runtime, i.e. can request the =
copyright-string's value from each and every class, but - alas, in this =
case - the string's value is not actually copied into each classfile and =
thus this does not fulfil my requirement. :-(

------------------
public aspect AddCopyRightString=20
{
public interface HasCopyRightString {
// add a static copyright String member to each class:=20
public final static String COPYRIGHT =3D "bla bla...";
}

declare parents: (com.mycompany..* && // all classes in and under =
com.tivoli.act
!com.mycompany.AddCopyRightString) // except this =
aspect (to prevent recursion)...
implements HasCopyRightString; // ...will =
implement the above interface
}
------------------

I also experimented with static aspects, i.e.:

------------------
public aspect AddCopyRightString=20
{
public interface HasCopyRightString {
static aspect Impl {
// add a static copyright String member to each class:=20
public final static String COPYRIGHT =3D "bla bla...";
// ^^^^^^ not allowed...
}
}
declare parents: (com.mycompany..* && // all classes in and under =
com.tivoli.act
!com.mycompany.AddCopyRightString) && // except =
this aspect=20
!com.mycompany.AddCopyRightString.Impl) // and =
this aspect (to prevent recursion)...
implements HasCopyRightString; // ...will =
implement the above interface
}
------------------
but alas, static fields are not supported in static aspects. And I am =
not sure either, whether this would mean that the string's value would =
actually be "woven" into each class file.

Still seeking an "aspectized" solution for this. Any ideas?
Michael


"Michael Moser" <mmo@zurich.ibm.com> wrote in message =
news:c8f8ta$rjl$1@eclipse.org...
> ...

"Michael Moser" <mmo@zurich.ibm.com> wrote in message =
news:c8daa0$l6s$1@eclipse.org...
> ...
------=_NextPart_000_0025_01C43DB5.AC935C50
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff background=3D"">
<DIV><FONT face=3DArial size=3D2>The following variant works during =
runtime, i.e.=20
can request the copyright-string's value from each and every class, but =
- alas,=20
in this case - the string's value is not actually copied into each =
classfile and=20
thus this does not fulfil my requirement. :-(</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV><FONT face=3DArial =
size=3D2>
<DIV>------------------<BR><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp; public interface HasCopyRightString=20
{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; // add a static =
copyright String=20
member to each class: <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; =
public=20
final static String COPYRIGHT =3D "bla bla...";<BR>&nbsp;&nbsp;&nbsp;=20
}<BR><BR>&nbsp;&nbsp;&nbsp; declare parents: (com.mycompany..* =
&amp;&amp; // all=20
classes in and under=20
com.tivoli.act<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
!com.mycompany.AddCopyRightString) // except this aspect (to prevent=20
recursion)...<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
implements HasCopyRightString; // ...will implement the above=20
interface<BR>}<BR></FONT>------------------</DIV>
<DIV><BR>I also experimented with static aspects, i.e.:</DIV>
<DIV><BR><FONT face=3DCourier><FONT=20
face=3DArial>------------------</FONT></FONT></DIV>
<DIV><FONT face=3DCourier>public aspect AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp; public interface HasCopyRightString=20
{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; static aspect Impl=20
{<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; // =
add a=20
static copyright String member to each class: <BR>&nbsp;&nbsp;&nbsp;=20
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; public final static String =
COPYRIGHT=20
=3D "bla bla...";</FONT></DIV>
<DIV><FONT=20
face=3DCourier> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n b=
sp;=20
^^^^^^ not allowed...</FONT></DIV>
<DIV><FONT face=3DCourier>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;=20
}<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV><FONT face=3DCourier>&nbsp;&nbsp;&nbsp; declare parents: =
(com.mycompany..*=20
&amp;&amp; // all classes in and under=20
com.tivoli.act<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
!com.mycompany.AddCopyRightString) &amp;&amp; // except this=20
aspect&nbsp;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
!com.mycompany.AddCopyRightString.Impl) // and this aspect (to prevent=20
recursion)...<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
implements HasCopyRightString; // ...will implement the above=20
interface<BR>}</FONT></DIV>
<DIV><FONT face=3DCourier><FONT =
face=3DArial>------------------</FONT></FONT></DIV>
<DIV><FONT face=3DCourier><FONT face=3DArial>but alas, static fields are =
not=20
supported in static aspects. And I am not sure either, whether this =
would mean=20
that the string's value would actually be "woven" into each class=20
file.</FONT></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV>Still seeking an "aspectized" solution for this. Any=20
ideas?<BR>Michael</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>"Michael Moser" &lt;mmo@zurich.ibm.com&gt; wrote in message <A=20
href=3D"news:c8f8ta$rjl$1@eclipse.org">news:c8f8ta$rjl$1@eclipse.org</A>.=
...</DIV>
<DIV>&gt; ...<BR><BR>"Michael Moser" &lt;mmo@zurich.ibm.com&gt; wrote in =
message=20
<A=20
href=3D"news:c8daa0$l6s$1@eclipse.org">news:c8daa0$l6s$1@eclipse.org</A>.=
...</DIV>
<DIV>&gt; ...</FONT></DIV></BODY></HTML>

------=_NextPart_000_0025_01C43DB5.AC935C50--
Re: how to do static crosscutting (adding of member-variables) across multiple classes? [message #580432 is a reply to message #35889] Tue, 01 June 2004 13:38 Go to previous message
Eclipse UserFriend
This is a multi-part message in MIME format.

------=_NextPart_000_0019_01C44810.099DA720
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Coming back to this issue: defining an intertype for a specific class =
works:

public aspect AddCopyRightString=20
{
// add a static copyright String member to a specific class:=20
public final static String package.someClass.COPYRIGHT =3D "bla =
bla...";
}

while defining the same for all classes in a package does not:

public aspect AddCopyRightString=20
{
// add a static copyright String member to each class in a package:=20
public final static String package.*.COPYRIGHT =3D "bla bla...";
}

nor does it for a subset of classes:

public aspect AddCopyRightString=20
{
// add a static copyright String member to a subset of classes:=20
public final static String package.SomePrefix*.COPYRIGHT =3D "bla =
bla...";
}


IMHO this is a bug or at least a severe inconsistency in AspectJ!

Since for pointcuts one can specify wildcards (see "AspectJ in Action", =
page 69) like e.g.:

javax..* to specify any type in or below the java package=20
or e.g.
javax..*Model+ to specify each class in package java or subpackages =
of it whose names end in "Model" and all it derived classes.

so one should be able to use the same technique to define inter-type =
declarations, i.e. e.g.

public int javax..*.someMember =3D 0;
or=20
public int javax..*Model+.someMember =3D 10;


Any hope on the horizon that this will be possible anytime soon? Or is =
there any "deeper" reason for this inconsistency?=20

Michael

------=_NextPart_000_0019_01C44810.099DA720
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1400" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff background=3D"">
<DIV><FONT face=3DArial size=3D2>Coming back to this issue: </FONT><FONT =
face=3DArial=20
size=3D2>defining an intertype for a specific class works:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DCourier></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// add a static copyright String member =
to a=20
specific class:&nbsp;<BR>&nbsp;&nbsp;&nbsp; public final static String=20
package.someClass.COPYRIGHT =3D "bla bla...";<BR>}</FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DCourier></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DCourier size=3D2>
<DIV><FONT face=3DArial size=3D2>while defining the same for all classes =
in a=20
package does not:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DArial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// add a static copyright String member =
to each=20
class in a package:&nbsp;<BR>&nbsp;&nbsp;&nbsp; public final static =
String=20
package.*.COPYRIGHT =3D "bla =
bla...";<BR>}</FONT></FONT></DIV></FONT></DIV>
<DIV><FONT face=3DCourier size=3D2>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DArial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial>nor=20
does&nbsp;it for a subset of classes:</FONT></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DArial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier>public aspect =
AddCopyRightString=20
<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// add a static copyright String member =
to a=20
subset of&nbsp;classes:&nbsp;<BR>&nbsp;&nbsp;&nbsp; public final static =
String=20
package.SomePrefix*.COPYRIGHT =3D "bla=20
bla...";<BR>}</FONT></FONT></DIV></FONT></DIV>
<DIV><FONT face=3DCourier size=3D2></FONT>&nbsp;</DIV>
<DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2>IMHO this&nbsp;is a bug or at least a =
severe=20
inconsistency in AspectJ!<BR></DIV></FONT><FONT face=3DArial =
size=3D2></FONT>
<DIV><FONT face=3DArial size=3D2>Since for pointcuts one can specify=20
wildcards&nbsp;(see "AspectJ in Action", page 69) like =
e.g.:</FONT></DIV>
<DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT=20
face=3DCourier>javax..*</FONT>&nbsp;&nbsp;&nbsp; to specify any type in =
or below=20
the java package </FONT></DIV>
<DIV><FONT face=3DArial size=3D2>or e.g.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT=20
face=3DCourier>javax..*Model+</FONT>&nbsp;&nbsp;&nbsp; to specify each =
class in=20
package java or subpackages of it&nbsp;whose names&nbsp;end in "Model" =
and all=20
it derived classes.</FONT><FONT face=3DArial =
size=3D2></DIV></DIV></FONT>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial>so=20
one&nbsp;should be able to use the same technique to define inter-type=20
declarations, i.e.&nbsp;</FONT></FONT></FONT><FONT face=3DArial=20
size=3D2>e.g.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT face=3DCourier size=3D2>public int javax..*.someMember =3D =
0;</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>or </FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial><FONT=20
face=3DCourier size=3D2><FONT face=3DCourier size=3D2>public </FONT>int=20
javax..*Model+.someMember =3D 10;</DIV>
<DIV>
<DIV>
<DIV><FONT=20
face=3DArial></FONT>&nbsp;</DIV></FONT></DIV></FONT ></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT=20
face=3DArial></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=3DArial size=3D2><FONT face=3DCourier><FONT =
face=3DArial>Any hope on the=20
horizon that this will be possible anytime soon? =
</FONT></FONT></FONT><FONT=20
face=3DArial size=3D2><FONT face=3DCourier><FONT face=3DArial>Or is =
there any "deeper"=20
reason for this inconsistency? </FONT></FONT></FONT></DIV>
<DIV><FONT face=3DArial size=3D2><FONT =
face=3DCourier><BR></FONT>Michael</DIV></DIV>
<DIV></FONT>&nbsp;</DIV></BODY></HTML>

------=_NextPart_000_0019_01C44810.099DA720--
Previous Topic:Timeline for Lancaster release?
Next Topic:moved workspace problem
Goto Forum:
  


Current Time: Sat Jun 21 04:53:35 EDT 2025

Powered by FUDForum. Page generated in 0.07248 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top