Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] getting varargs to work in args and advise

Couldn't you just bind directly in the expression with the following?

pointcut myPointcut(String aString, int[] anIntArray) :
call(* myTestClass.setStrFld(String,int...)) && args(aString,anIntArray);

I mean, you could still use thisJoinPoint.getArgs(), but you could
also just bind the arguments and let AspectJ do the work, right?
After all, int... gets compiled by Java to int[].

-matthew

On Mon, Mar 22, 2010 at 11:11 AM, Ramnivas Laddad
<ramnivas@xxxxxxxxxxxxxxx> wrote:
> call(* myTestClass.setStrFld(String,int...)) will select the following
> method
> class myTestClass {
>     <ANY TYPE> setStrFld(String a, int... b) {
>     }
> }
> You probably want to use thisJoinPoint.getArgs() in the advice to access all
> arguments.
> -Ramnivas
>
> On Mon, Mar 22, 2010 at 3:31 AM, Ashank <k_arvind_shankar@xxxxxxxxx> wrote:
>>
>> Hello,
>>
>> I was trying out the varargs feature in aspectJ but cannot get it to work
>> unfortunately. I read through
>>
>> http://www.eclipse.org/aspectj//doc/next/adk15notebook/varargs-in-pcds.html
>> and a few posts but tried to test the example but cannot get it to work.
>> I'm
>> not getting syntax errors but nothing is getting. I have pasted my simple
>> code here. Please help me identify where I am going wrong.
>>
>> Class I am trying to advise:
>>
>> package arvind.AspectJTest;
>>
>> import java.util.ArrayList;
>>
>> public class myTestClass {
>>        String strFld = "InitVal";
>>
>>        public String getStrFld() {
>>                return strFld;
>>        }
>>
>>        public void setStrFld(String inStr) {
>>                strFld = inStr;
>>        }
>>
>>        public void setStrFld(String inStr, String inStr2) {
>>                strFld = inStr + inStr2;
>>        }
>>
>>        public void setStrFld(String inStr, int myInt) {
>>                strFld = inStr+","+Integer.toString(myInt);
>>        }
>>
>>        public void setStrFld(String someStr, int dividend, int divisor) {
>>                strFld = someStr + "," + ((float)dividend/divisor);
>>        }
>>
>>        public static void main(String[] args) {
>>                myTestClass d = new myTestClass();
>>                System.out.println("Initially, StrFld is  " + d.getStrFld()
>> + ". Calling
>> string,string");
>>                d.setStrFld(args[0],args[1]);
>>                System.out.println("Secondly, StrFld is  " + d.getStrFld()+
>> ". Calling
>> string,int");
>>                d.setStrFld(args[0],Integer.parseInt(args[1]));
>>                System.out.println("Thirdly, StrFld is  " + d.getStrFld()+
>> ". Calling
>> string,int,int");
>>
>>  d.setStrFld(args[0],Integer.parseInt(args[1]),Integer.parseInt(args[2]));
>>                System.out.println("Finally, StrFld is  " + d.getStrFld());
>>        }
>> };
>>
>> Aspects that I am using for advice:
>> 1.) InittAspect.java:
>>
>> package arvind.AspectJTest;
>>
>> abstract aspect InitAspect{
>>        pointcut PCpart1(): !within(arvind.*) &&
>> within(arvind.AspectJTest.*);
>>        pointcut PCpart2(): !within(InitAspect);
>>        pointcut catchClasses(): PCpart1() && PCpart2();}
>> }
>>
>> 2.) testProceed.java:
>>
>> package arvind.AspectJTest;
>>
>> aspect testProceed extends InitAspect{
>>        pointcut catchAllMethods(String myStr, int[] restOfArgs):
>> catchClasses()&&
>>                call(* myTestClass.setStrFld(String,int...)) &&
>>                within(myTestClass) && args(myStr,restOfArgs);
>>
>>        Object around(String myStr, int[]
>> restOfArgs):catchAllMethods(myStr,
>> restOfArgs) {
>>
>>
>> System.out.println("------------------------------------------------------------------");
>>                System.out.println(thisJoinPoint);
>>
>>                System.out.println("around Advice: before proceed: ");
>>                System.out.println("First string argument is " + myStr + ".
>> Executing the
>> method now...");
>>                Object result = proceed(myStr,restOfArgs);
>>                System.out.println("Result is " + result);
>>
>>                System.out.println("around Advice: After proceed: ");
>>
>>
>> System.out.println("------------------------------------------------------------------");
>>                return result;
>>        }
>> }
>>
>> When I try to compile them using ajc as follows, I get no weave info:
>> C:\arvind\AspectJTest>ajc -showWeaveInfo -outjar aspectjar.jar -outxml
>> InitAspect.java testProceed.ja
>> va myTestClass.java
>>
>> C:\arvind\AspectJTest>
>>
>> My classpath and path are correct.
>>
>> Please tell me where I am making mistakes. Also, eventually I would like
>> to
>> able to use args(String, Object+...) in the pointcut but i don't know if
>> its
>> possible. I read through the following code and got the impression that
>> what
>> i am trying to do should work now but I there is no weaving going on.
>> Please
>> help.
>>
>> Thanks.
>> -Arvind
>>
>>
>> http://old.nabble.com/Matching-varargs-with-subtypes%3A-call%28*-*.*%28Object%2B...%29%29-td22076248.html#a22076248
>> --
>> View this message in context:
>> http://old.nabble.com/getting-varargs-to-work-in-args-and-advise-tp27984480p27984480.html
>> Sent from the AspectJ - users mailing list archive at Nabble.com.
>>
>> _______________________________________________
>> 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
>
>



-- 
mailto:matthew@xxxxxxxxxxxxxxx
skype:matthewadams12
yahoo:matthewadams
aol:matthewadams12
google-talk:matthewadams12@xxxxxxxxx
msn:matthew@xxxxxxxxxxxxxxx
http://matthewadams.me
http://www.linkedin.com/in/matthewadams


Back to the top