[
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
|
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