[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[List Home]
|
Re: [aspectj-users] declare @method syntax - is composite signature allowed??
|
- From: Andy Clement <andrew.clement@xxxxxxxxx>
- Date: Tue, 27 Oct 2009 08:29:03 -0700
- Delivered-to: aspectj-users@eclipse.org
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=Sp6DJvgpWNhwAEBKXFVSrzmzBL860W5xQNccFPkW0eI=; b=AfJaVLNk1OWYs9IRi+YFAtLTKRumw4bM4hrm8+BdIHePM5SJb2vq5FzU0XJVvfzwbm 6KWsZr5L/S/0LnVJymgihT+fnRzHVR0ldI/PkNMSXHR27WxBmoEwpbhCbIyxI4nOiKMc antBC2oFW/MgDkttCw0nOzfi3cYQtUnTFX10w=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=OlFb2S9fx0nkHM8nYIpbklx364xA+MsMagZxf/cTiuoxBrI/8RuzcK5+MQqv6bS3Mm XctlHHDlnx3OnUMGOHu+SJUXEfIaL2Lo0+EeIJw5w6FZEW4cf80Ekj576Szn1Vg1v0ea eUej6N/SWbIZyAeYXFsm9df9xl4ya3wOxE9qo=
Hey,
Any NPE from the compiler is a bug. I presume you have defined the
Setter annotation? (ie. it must exist as a definition in order to
succeed)
I raised this problem as https://bugs.eclipse.org/bugs/show_bug.cgi?id=293457
Due to it failing in the hierarchy building code, it may behave better
on the command line where the model does not get constructed.
cheers,
Andy
2009/10/27 Leyzerzon, Simeon <simeon.leyzerzon@xxxxxxxx>:
> Hi Andy,
>
> Thanks for responding. I tried the approach you are suggesting, unfortunately I'm getting the following:
>
> java.lang.NullPointerException
> at org.aspectj.ajdt.internal.core.builder.AsmHierarchyBuilder.visit(AsmHierarchyBuilder.java:548)
> at org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.traverse(MethodDeclaration.java:214)
> at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.traverse(TypeDeclaration.java:1246)
> at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.traverse(Compilatio ... oBuildJob.run(AutoBuildJob.java:238)
> at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
>
> Compile error: NullPointerException thrown: null
>
>
> Here's the aspect I'm using:
>
> package com.citi.gdos.smart.applib.service.cache;
>
> import org.springmodules.cache.annotations.Cacheable;
>
> public aspect CachingIntroduction {
>
> declare @method: public * *..I*Dao+.set*(..): @Setter; declare @method: !@Setter public * *..I*Dao+.*(..):
> @Cacheable(modelId="fooModel");
>
> }
>
>
> Am I doing something wrong? Do I need a nightly build perhaps for this to work?
>
> Thanks,
> Simeon
>
> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
> Sent: Tuesday, October 27, 2009 9:58 AM
> To: aspectj-users@xxxxxxxxxxx
> Subject: Re: [aspectj-users] declare @method syntax - is composite signature allowed??
>
> Hi Simeon,
>
> This restriction you've uncovered was actually only recently raised as this enhancement:
>
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=287613
>
> To support it I need to change the serialized form of the attributes - I try not to do this often but for other reasons (optimization) I may be changing the format in 1.6.7 so I will be looking at it in that timeframe.
>
>> declare @method :
>> public * *..I*Dao+.*(..) && !public * *..I*Dao+.set*(..):
>> @Cacheable(modelId="fooModel");
>
> a clunky approach might be:
>
> declare @method: public * *..I*Dao+.set*(..): @Setter; declare @method: !@Setter public * *..I*Dao+.*(..):
> @Cacheable(modelId="fooModel");
>
> but I know that's not great...
>
> Andy
>
> 2009/10/26 Leyzerzon, Simeon <simeon.leyzerzon@xxxxxxxx>:
>> I have a hierarchy of DAO classes into which I'm introducing an @Cacheable annotation via something like this:
>>
>> declare @method :
>> public * *..I*Dao+.*(..) :
>> @Cacheable(modelId="fooModel");
>>
>> The problem is, we need to filter out more than is specified by this one signature pattern, and I'm not sure that a composite pattern is allowed in this type of expression. When I tried something like this:
>>
>> declare @method :
>> public * *..I*Dao+.*(..) && !public * *..I*Dao+.set*(..):
>> @Cacheable(modelId="fooModel");
>>
>> I'm getting compile errors saying:
>>
>> Syntax error on token "&&", ";" expected
>>
>> I also tried to define composite pointcuts representing the joint points I'm interested in (basically I want to exclude 'jdbcTemplate' and 'slq' Spring specific setters from the places where annotation is introduced) but declaration syntax doesn't seem to like it either.
>>
>> What would be a good approach in the use case I described?
>>
>> I'm using compile time weaving via Ant. AspectJ version is 1.6
>>
>> Thank you in advance,
>> Simeon
>>
>> _______________________________________________
>> 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
>