[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[aspectj-users] Re: [NEWSDELIVER] Help: how to get calling class for static methods?
|
SunnyDay,
Use thisJoinPoint.getSignature().getDeclaringType()
for the target class and thisEnclosingJoinPointStaticpart... for the caller.
Matthew Webster
AOSD Project
Java Technology Centre, MP146
IBM Hursley Park, Winchester, SO21 2JN, England
Telephone: +44 196 2816139 (external) 246139 (internal)
Email: Matthew Webster/UK/IBM @ IBMGB, matthew_webster@xxxxxxxxxx
http://w3.hursley.ibm.com/~websterm/
To:
undisclosed-recipients:;
cc:
Subject:
[NEWSDELIVER]
Help: how to get calling class for static methods?
Hello,
I am having trouble in obtaining the caller and callee's classes if a
method call is made within the caller's static method. For example:
public class A
{
public static void call1()
{
B.changeField();
}
}
public class B {
public static void changeField()
{
System.out.println("from
B");
}
}
How can I know the caller is class A and the callee is class B? I tried
the following pointcut:
pointcut staticMethodCall() : call(static * *.*(..));
after() : staticMethodCall()
{
Class calleeClass = thisJoinPoint.getSignature().getDeclaringType();
Object caller = thisJoinPoint.getThis();
if (caller == null)
caller
= thisJoinPoint.getSourceLocation().getWithinType();
}
Here I used thisJoinPoint.getSignature().getDeclaringType() to obtain the
callee's class. But I am not sure what's the exact meaning of "Signature"
in the context of a method call. Does it always give me the type of the
callee?
For the caller, I used thisJoinPoint.getSourceLocation().getWithinType();
But what if I test a program where no source code is available? Can I
still call thisJoinPoint.getSourceLocation()?
All these seem to work for now but I am really wondering if this is a good
solution. I appreciate any advice and code snippet!
Thank you,
SunnyDay