Java &引用;“查找用法”;作为IntelliJ插件的功能

Java &引用;“查找用法”;作为IntelliJ插件的功能,java,intellij-idea,intellij-plugin,Java,Intellij Idea,Intellij Plugin,我试图在IntelliJ IDEA中找到一种方法,在特定的项目中找到一些库方法调用和类的所有用法 目标是编译一个类列表,这些类引用这些特定的方法或类 我该怎么做呢?我可以看到有一个methodreferencesearch看起来可能会有帮助,但是搜索方法需要一个PsiMethod实例 如何创建与特定lib类中的方法相匹配的PSI方法实例(假设我想在Java的String类中找到concat(…)方法的所有用法) 基本上,我正在尝试构建一个插件,该插件将从项目中生成特定方法调用的图形。例如,通过在

我试图在IntelliJ IDEA中找到一种方法,在特定的项目中找到一些库方法调用和类的所有用法

目标是编译一个类列表,这些类引用这些特定的方法或类

我该怎么做呢?我可以看到有一个
methodreferencesearch
看起来可能会有帮助,但是搜索方法需要一个PsiMethod实例

如何创建与特定lib类中的方法相匹配的PSI方法实例(假设我想在Java的
String
类中找到
concat(…)
方法的所有用法)


基本上,我正在尝试构建一个插件,该插件将从项目中生成特定方法调用的图形。例如,通过在库中查找特定方法调用来绘制一组路由的图形。例如,如果类a使用类型B调用x(T),而类B调用x(T)对于C类的类型,我会有一个类似于a->B->C等的图形。Find usages很好,它不能很好地满足我的需要。

我想你不能保证你可以很容易地使用
concat
(例如,在打开的文档中用户的光标位置)

一种简单的方法是在字符串中创建一个小的、正确的、自包含的java类,如下所示:

class Nothing { String s = "a".concat("b"); }
然后,有一种方法(如果我没记错的话)可以使用IntelliJ来解析这个字符串中包含的类,从而为您提供一个
PsiReference
,指向您想要查找其用法的方法(在本例中为
concat

这种方法对你有用吗


如果是这样的话,我可以找出一个代码示例来说明如何做到这一点。

我认为您不能保证可以轻松使用
concat
(例如,在打开的文档中用户的光标位置)

一种简单的方法是在字符串中创建一个小的、正确的、自包含的java类,如下所示:

class Nothing { String s = "a".concat("b"); }
然后,有一种方法(如果我没记错的话)可以使用IntelliJ来解析这个字符串中包含的类,从而为您提供一个
PsiReference
,指向您想要查找其用法的方法(在本例中为
concat

这种方法对你有用吗


如果是这样的话,我可以找出一个代码示例来说明如何做到这一点。

您可以通过JavaPsiFacade.getInstance(…).findClass(“java.lang.String”、…allScope(…).FindMethodByName(“concat”,false)[0]获得真正的PsiMethod。然后可以将此方法传递给MethodReferenceSearch。

您可以通过JavaPsiFacade.getInstance(…)获得真正的PsiMethod.findClass(“java.lang.String”、…allScope(…).FindMethodByName(“concat”,false)[0]。然后可以将此方法传递给MethodReferenceSearch。

是否“查找用法”(alt+F7)功能已经实现了您所描述的功能?如果没有,可能是它的“分析向后依赖项”功能更符合您的喜好?我正在构建一个插件,该插件将从项目中生成特定方法调用的图形。例如,通过在库中查找特定方法调用来绘制一组路由的图形。例如,如果类a使用类型B调用x(T),类B调用x(T)对于C类的类型,我会有一个类似于a->B->C等的图。查找用法很棒,它不能很好地满足我的需要。“查找用法”(alt+F7)功能不是已经做到了你所描述的吗?如果不是,可能是它的“分析向后依赖项”功能更符合您的喜好?我正在构建一个插件,该插件将从项目中生成特定方法调用的图形。例如,通过在库中查找特定方法调用来绘制一组路由的图形。例如,如果类a使用类型B调用x(T),类B调用x(T)对于C类的类型,我会有一个类似于a->B->C等的图。Find usages很好,它不能很好地满足我的需要。那太好了!有Scala等价物吗?这对重载方法是如何工作的?findClass是语言无关的,它也会找到Scala类。至于重载方法,如果你使用的话,你会得到几个按名称进行搜索,您可以手动找到所需的方法。或者您可以使用findMethodsBySignature,但这有点复杂。要创建模式方法,您可能需要使用JavaPsiFacade.getElementFactory.CreateMethodFromTextThat太好了!是否有与Scala等效的方法?这对于重载方法是如何工作的?findClass与语言无关,它还可以找到Scala类。对于重载方法,如果按名称搜索并手动找到所需的方法,您将得到几个。或者您可以使用FindMethodBySignature,但这有点复杂。要创建模式方法,您可能需要使用JavaPsiFacade.getElementFactory.createMethodFromText