【问题标题】:"Find usages" functionality as an IntelliJ plugin作为 IntelliJ 插件的“查找用法”功能
【发布时间】:2013-10-17 11:17:15
【问题描述】:

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

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

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

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

基本上,我正在尝试构建一个插件,该插件将生成项目中某些方法调用的图表。例如,通过在库中查找某些方法调用来绘制一组路线图。 IE。如果 A 类以 B 类的类型调用 x(T),B 类以 C 类的类型调用 x(T),我将有一个看起来像 A -> B -> C 等的图表。查找用法很棒,它只是不能很好地满足我的需求。

【问题讨论】:

  • “查找用法”(alt + F7)功能不是已经按照您的描述进行了吗?
  • 如果不是,也许它的“分析反向依赖”功能更符合您的喜好?
  • 我正在构建一个插件,该插件将生成项目中某些方法调用的图表。例如,通过在库中查找某些方法调用来绘制一组路线图。 IE。如果 A 类以 B 类的类型调用 x(T),B 类以 C 类的类型调用 x(T),我将有一个看起来像 A -> B -> C 等的图表。查找用法很棒,它只是不能很好地满足我的需求。

标签: java intellij-idea intellij-plugin


【解决方案1】:

你可以通过 JavaPsiFacade.getInstance(...).findClass("java.lang.String", ...allScope(...)).findsMethodByName("concat", false)[0 ]。然后可以将此方法传递给 MethodReferenceSearch。

【讨论】:

  • 非常感谢!有 Scala 等价物吗?这对重载方法有什么作用?
  • findClass 与语言无关,它也会找到 Scala 类。至于重载的方法,如果你按名称搜索,你会得到几个,你可以手动找到需要的。或者您可以使用 findMethodsBySignature,但它有点复杂。要制作模式方法,您可能需要使用 JavaPsiFacade.getElementFactory.createMethodFromText
【解决方案2】:

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

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

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

然后,有一种方法(如果我没记错的话)使用 IntelliJ 来解析包含在这个 String 中的类,从而给你一个 PsiReference 到你想要查找用法的方法(在这种情况下,@987654324 @)。

这种方法对您有用吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多