Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] declare @method syntax - is composite signature allowed??

To anwser your question:

>> public * *..I*Dao+.getSql*(..) != public * *..I*Dao+.getSql(..).

> seems odd.  I wonder what set of join points are matched by each variant and how they overlap.


These are the join points for each individual declaration:

1.  declare @method: public * *..I*Dao+.set*(..): @NonCacheable;

        SavingsDao.setSql1(String)
        SavingsDao.setSql2(String)
        SavingsDao.setSql3(String)
        SavingsDao.setSql4(String)
        SavingsDao.setSql5(String)
        SavingsDao.setSql6(String)
        SavingsDao.setSql7(String)
        SavingsBaseDao.setJdbcTemplate(JdbcTemplate)
        SavingsBaseDao.setSql(String)
        IGmaMbrChartDao.setSql(String)
        IGmaFilterDao.setSql(String)
        GmaMbrDao.setSql(String)
        GmaMbrChartDao.setSql(String)
        GmaHeadCountReportDao.setSql(String)
        GmaFilterDao.setSql(String)
        GmaFilterDao.setData(IDataBuffer)
        DetailsSummaryGmaDao.setSql1(String)
        ExpenseDao.setSql1(String)
        ExpenseDao.setSql2(String)
        ExpenseDao.setSql3(String)
        ExpenseDao.setSql4(String)
        ExpenseDao.setSql5(String)
        ExpenseBaseDao.setJdbcTemplate(JdbcTemplate)
        ExpenseBaseDao.setSql(String)

2.  declare @method: public * *..I*Dao+.getSql*(..): @NonCacheable;

        ExpenseDao.getSql1()
        ExpenseDao.getSql2()
        ExpenseDao.getSql3()
        ExpenseDao.getSql4()
        ExpenseDao.getSql5()

3.  declare @method: public * *..I*Dao+.getSql(..): @NonCacheable;

          SavingsBaseDao.getSql()
        IGmaMbrChartDao.getSql()
        GmaMbrDao.getSql()
        GmaMbrChartDao.getSql()
        GmaHeadCountReportDao.getSql()
        GmaFilterDao.getSql()
        ExpenseBaseDao.getSql()

4.  declare @method: public * *..I*Dao+.getJdbc*(..): @NonCacheable;

        SavingsBaseDao.getJdbcTemplate()
        ExpenseBaseDao.getJdbcTemplate()

5.  declare @method: !@NonCacheable public * *..I*Dao+.*(..):
                 @Cacheable(modelId="fooModel");

        SavingsDao.getSavingsChartDataBuffer(String,String,String,String,String,String,String)
        SavingsDao.getDAPGridDataBuffer(String,String,String,String,String,String,String)
        ISavingsDao.getSavingsChartDataBuffer(String,String,String,String,String,String,String)
        ISavingsDao.getDAPGridDataBuffer(String,String,String,String,String,String,String)
        SummaryGmaDao.getSummaryDatagridsDaoBuffer(String,String,String,String,String,String,String,String)
        ISummaryGmaDao.getSummaryDatagridsDaoBuffer(String,String,String,String,String,String,String,String)
        IGmaMbrReportDao.getMBRReportDataBuffer(MBRReportObject)
        IGmaMbrReportDao.isMBRReportExist(MBRReportObject)
        IGmaMbrReportDao.deleteMBRReport(MBRReportObject)
        IGmaMbrReportDao.insertMBRReport(MBRReportObject)
        IGmaMbrDao.getGmaExpenseMbrDataBuffer(String,String,String,String,String,String,String,String)
        IGmaMbrChartDao.getGmaExpenseMbrDataBuffer(String,String,String,String,String,String,String,String,String,String,String,String)
        IGmaMbrChartDao.getGmaExpenseMbrMetaDataBuffer(String,String,String,String,String,String,String,String,String,String,String,String)
        IGmaHeadCountReportDao.getHeadCountReportDataBuffer(HeadCountReportObject)
        IGmaHeadCountReportDao.isHeadCountReportExist(HeadCountReportObject)
        IGmaHeadCountReportDao.deleteHeadCountReport(HeadCountReportObject)
        IGmaHeadCountReportDao.insertHeadCountReport(HeadCountReportObject)
        IGmaFilterDao.getGmaFilterDataBuffer(String,String,String,String,String,String)
        IGmaChartFilterDao.getGmaChartFilterDataBuffer(String,String,String)
        IGmaChartFilterDao.getHCChartsDaoBuffer(String,String,String,String,String,String,String,String)
        IGmaChartFilterDao.getHCLineChartsDaoBuffer(String,String,String,String,String,String,String,String)
        IGmaChartFilterDao.getRegionDrillChartsDaoBuffer(String,String,String,String,String,String,String,String)
        IGmaChartFilterDao.getRegionTrendDrillChartsDaoBuffer(String,String,String,String,String,String,String,String)
        IExecutiveSummaryGmaDao.getExecutiveSummaryDatagridsDaoBuffer(String,String,String,String,String,String,String,String)
        IDetailsSummaryGmaDao.getDetailsSummaryGridDaoBuffer(String,String,String,int,int,String,String,String,String,String,String,String)
        GmaMbrReportDao.getMBRReportDataBuffer(MBRReportObject)
        GmaMbrReportDao.isMBRReportExist(MBRReportObject)
        GmaMbrReportDao.deleteMBRReport(MBRReportObject)
        GmaMbrReportDao.insertMBRReport(MBRReportObject)
        GmaMbrDao.getGmaExpenseMbrDataBuffer(String,String,String,String,String,String,String,String)
        GmaMbrChartDao.getGmaExpenseMbrDataBuffer(String,String,String,String,String,String,String,String,String,String,String,String)
        GmaMbrChartDao.getGmaExpenseMbrMetaDataBuffer(String,String,String,String,String,String,String,String,String,String,String,String)
        GmaHeadCountReportDao.deleteHeadCountReport(HeadCountReportObject)
        GmaHeadCountReportDao.getHeadCountReportDataBuffer(HeadCountReportObject)
        GmaHeadCountReportDao.insertHeadCountReport(HeadCountReportObject)
        GmaHeadCountReportDao.isHeadCountReportExist(HeadCountReportObject)
        GmaFilterDao.getGmaFilterDataBuffer(String,String,String,String,String,String)
        GmaChartFilterDao.getGmaChartFilterDataBuffer(String,String,String)
        GmaChartFilterDao.getHCChartsDaoBuffer(String,String,String,String,String,String,String,String)
        GmaChartFilterDao.getHCLineChartsDaoBuffer(String,String,String,String,String,String,String,String)
        GmaChartFilterDao.getRegionDrillChartsDaoBuffer(String,String,String,String,String,String,String,String)
        GmaChartFilterDao.getRegionTrendDrillChartsDaoBuffer(String,String,String,String,String,String,String,String)
        FooGmaDao.getExecutiveSummaryDatagridsDaoBuffer(String,String,String,String,String,String,String,String)
        ExecutiveSummaryGmaDao.getExecutiveSummaryDatagridsDaoBuffer(String,String,String,String,String,String,String,String)
        DetailsSummaryGmaDao.getDetailsSummaryGridDaoBuffer(String,String,String,int,int,String,String,String,String,String,String,String)
        IExpenseDao.getExpenseChartDataBuffer(String,String,String,String,String,String)
        IExpenseDao.getExpenseTreeGridDataBuffer(String,String,String,String,String,String,int)
        IExpenseDao.getExpensePopUpGridDataBuffer(String,String,String,String,String,int,int,String,String)
        IExpenseDao.getExpenseDetailGridDataBuffer(String,String,String,String,String,int,int)
        IExpenseDao.getExpenseFilterDataBuffer(String)
        ExpenseDao.getExpenseFilterDataBuffer(String)
        ExpenseDao.getExpenseChartDataBuffer(String,String,String,String,String,String)
        ExpenseDao.getExpenseTreeGridDataBuffer(String,String,String,String,String,String,int)
        ExpenseDao.getExpensePopUpGridDataBuffer(String,String,String,String,String,int,int,String,String)
        ExpenseDao.getExpenseDetailGridDataBuffer(String,String,String,String,String,int,int)

Simeon


-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Leyzerzon, Simeon [ICG-IT]
Sent: Tuesday, October 27, 2009 5:17 PM
To: 'aspectj-users@xxxxxxxxxxx'
Subject: RE: [aspectj-users] declare @method syntax - is composite signature allowed??

It would be easier to investigate if each of the declaration allowed for some identifier, otherwise they look the same in Eclipse AJDT.  Apologies in advance if this already exists and I'm just anaware of it, this is really my first stab in the new territory.  I could create a sample project and perhaps post it if that'd help looking into what's going on.  What'd you suggest?

Once again, appreciate your help!!
Simeon

-----Original Message-----
From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
Sent: Tuesday, October 27, 2009 3:44 PM
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] declare @method syntax - is composite signature allowed??

The algorithm used in situations like this is a kind of iterate to a fixed point - starting with what you specify.  However I doubt we make guarantees if the declare @methods interact with each other and are specified in different source aspects.

> public * *..I*Dao+.getSql*(..) != public * *..I*Dao+.getSql(..).

seems odd.  I wonder what set of join points are matched by each variant and how they overlap.

Andy

2009/10/27 Leyzerzon, Simeon <simeon.leyzerzon@xxxxxxxx>:
> Ah, looks like the following properly excludes the getSql() calls:
>
> public aspect CachingIntroduction {
>
>        declare @method: public * *..I*Dao+.set*(..): @NonCacheable;
>        declare @method: public * *..I*Dao+.getSql*(..): @NonCacheable;
>        declare @method: public * *..I*Dao+.getSql(..): @NonCacheable;
>        declare @method: !@NonCacheable public * *..I*Dao+.*(..):
>                 @Cacheable(modelId="fooModel");
>
> }
>
> so apparently in this case  public * *..I*Dao+.getSql*(..) != public * *..I*Dao+.getSql(..).
>
> I'm not sure it's by design on not ;)
>
> Thanks,
> Simeon
>
> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx
> [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Leyzerzon,
> Simeon [ICG-IT]
> Sent: Tuesday, October 27, 2009 2:55 PM
> To: 'aspectj-users@xxxxxxxxxxx'
> Subject: RE: [aspectj-users] declare @method syntax - is composite signature allowed??
>
> Andy,
>
> No, I haven't defined another marker interface as you correctly spotted so that's what was breaking it.  So NPE is gone, my bad.
>
> But now, after the following aspect:
>
> public aspect CachingIntroduction {
>
>        declare @method: public * *..I*Dao+.set*(..): @NonCacheable;
>        declare @method: public * *..I*Dao+.getSql*(..): @NonCacheable;
>        declare @method: !@NonCacheable public * *..I*Dao+.*(..):
>                 @Cacheable(modelId="fooModel");
>
> }
>
> is applied to something like this class:
>
>
> public class ExpenseBaseDao implements IGmaBaseDao {
>
> ...
>
>        public String getSql() {
>                return sql;
>        }
> ...
> }
>
> in the CrossRef view I'm seeing
>
>
>
> both for getSql:
>
>            CachingIntroduction.declare @method:
> !@com.citi.gdos.smart.applib.service.cache.NonCacheable public *
> *..I*Dao+.*(..) : @Cacheable(modelId = "fooModel")
>            CachingIntroduction.declare @method: public *
> *..I*Dao+.getSql*(..) : @NonCacheable
>
> Does it mean getSql() is annotated as both @Cacheable and @NonCacheable, could I apply some precedence here?
>
> Thanks,
> Simeon
>
> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx
> [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Andy Clement
> Sent: Tuesday, October 27, 2009 11:29 AM
> To: aspectj-users@xxxxxxxxxxx
> Subject: Re: [aspectj-users] declare @method syntax - is composite signature allowed??
>
> 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(AsmH
>> i
>> erarchyBuilder.java:548) at
>> org.aspectj.org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.t
>> r
>> averse(MethodDeclaration.java:214)
>> at
>> org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.tra
>> v
>> erse(TypeDeclaration.java:1246) at
>> org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDecl
>> a ration.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
>>
> _______________________________________________
> 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
>
_______________________________________________
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


Back to the top