“查找用法”功能作为IntelliJ插件

时间:2013-10-17 11:17:16

标签: java intellij-idea intellij-plugin

我正在尝试在IntelliJ IDEA中找到一种方法来查找特定项目中几个库方法调用和类的所有用法。

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

我怎么能这样做,我可以看到有一个MethodReferencesSearch看起来可能有用,但搜索方法需要一个PsiMethod实例。

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

基本上我正在尝试构建一个插件,它将从项目中生成某些方法调用的图形。例如,通过查找库中的某些方法调用来绘制一组路由的东西。即如果A类用类型B调用x(T)而类B用类C类调用x(T),我会得到一个看起来像A - >的图形。 B - > C等。发现用法很棒,它不能很好地满足我的需求。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我假设您无法保证您可以轻松使用concat(例如,在用户在打开文档中的光标位置)。

一种hacky方法是在String中创建一个小的,正确的,自包含的java类,如下所示:

class Nothing { String s = "a".concat("b"); }

然后,有一种方法(如果我没记错的话)使用IntelliJ来解析此String中包含的类,从而为您想要查找的方法提供PsiReference(在这种情况下, concat)。

这种方法对你有用吗?

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