目标类是:
class Example{
public void m(){
System.out.println("Hello" + 1);
}
}
我想获取methodinvocation“system.out.println”(“hello”+1)”的完整字符串,以便进行一些正则表达式检查。怎么写?
public class Rule extends BaseTreeVisitor implements JavaFileScanner {
@Override
public void visitMethodInvocation(MethodInvocationTree tree) {
//get the string of MethodInvocation
//some regex check
super.visitMethodInvocation(tree);
}
}
我使用eclipsejdt和idea psi编写了一些代码检查规则,它们的表达式树节点具有这些属性。我想知道为什么声纳只有第一个和最后一个标记。
谢谢!
1条答案
按热度按时间np8igboo1#
一个老问题,但我有一个解决办法。
这适用于任何种类的树。
如果要进一步细化,还可以使用firsttoken().column,或者在regex中使用方法名。
如果您想要更多的行/更大的范围,只需使用该树的父级。parent()
这也将处理表达式/params/etc跨越多行的情况。
也许有更好的办法。。。但我不知道还有别的办法。如果我能想出更好的办法,可能会更新。