When it is simple case o.foo()
, it’s easy() to get it by methodSelect().firstToken().parent().symbolType().fullyQualifiedName()
,
but when it is a call chain like new A().b().foo()
how can I get the caller’s type of foo.
It seems difficult to do it in recursive way which I should deal with many kind of caller.
Hello @yeoleobun ,
What you call “easy” is already quite complicated to get the owner of the method.
The semantic layer of the API is supposed to help you get there in a much simpler way.
From a MethodInvocationTree
, what about doing something like this:
private void doSomething(MethodInvocationTree mit) {
Symbol methodSymbol = mit.symbol();
if (methodSymbol.isUnknown()) {
// method not resolved in the bytecode
return;
}
Symbol owner = methodSymbol.owner();
if (owner.isUnknown()) {
// unlikely since the method has been resolved
return;
}
// the type in which the method is defined
Type ownerType = owner.type();
// its fully qualified name
String fullyQualifiedName = ownerType.fullyQualifiedName();
doSomethingElse(fullyQualifiedName);
}
Hope this helps,
Michael
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.