Intellij Idea 方法调用的Intellij结构化搜索,其中包含方法的类用特定注解标记

isr3a4wc  于 2023-04-29  发布在  其他
关注(0)|答案(2)|浏览(134)

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();**作为结果。

u91tlkcl

u91tlkcl1#

在您的示例中,“a”方法不接受任何参数,因此它将不匹配

$Instance$.$MethodCall$($Parameter$)

尝试使用

$Instance$.$MethodCall$()

而不是

ssm49v7z

ssm49v7z2#

当我在$parameter$上添加[0,∞]计数修饰符时,您的模式对我有效。

相关问题