Intellij结构化搜索脚本用于查找方法源类标记有@Internal注解的所有方法调用。例如,下面的脚本应该返回a。a();
package com.interestingpackage.internal
import com.common.Internal;
@Internal
public class A {
public void a() {}
}
package com.common
public @interface Internal {}
package com.my.service
public class B {
private A a;
void d() {
a.a();
}
};
模板
$Instance$.$MethodCall$($Parameter$)
变量
$MethodCall$
[script] =
import com.intellij.psi.*
__context__ instanceof PsiMethodCallExpression &&
__context__.resolveMethod() != null &&
java.util.regex.Pattern.matches("com\\.interestingpackage\\.(?!notfrompackage).+", __context__.resolveMethod().getContainingClass().getQualifiedName()) &&
com.intellij.codeInsight.AnnotationUtil.isAnnotated(__context__.resolveMethod().getContainingClass(),"com.common.Internal", true)
结果搜索不返回方法调用**a。a();**作为结果。
2条答案
按热度按时间u91tlkcl1#
在您的示例中,“a”方法不接受任何参数,因此它将不匹配
尝试使用
而不是
ssm49v7z2#
当我在
$parameter$
上添加[0,∞]
计数修饰符时,您的模式对我有效。