【问题标题】:IntelliJ DSL plugin provide completion of Java classes and methodsIntelliJ DSL 插件提供 Java 类和方法的补全
【发布时间】:2021-12-04 21:19:39
【问题描述】:

我正在尝试为引用 Java 类和方法的 DSL 编写 IntelliJ 插件。 DSL 在 Java 项目中的 *.conf 文件中公开。典型的 DSL 的 sn-p 如下所示:

TASK taskClass=com.example.Foo taskMethod=someMethod;

我一直在学习 IJ 'Simple' 插件教程来学习插件,并且能够实现我自己的插件。但是,目前,我一直在尝试了解如何为 taskClasstaskMethod 关键字提供自动完成功能。完成简单教程后,我所有的完成显示都是“你好”。现在我希望能够扩展我的 CompletionContributor 以显示项目中存在的 java 类和方法。教程中似乎没有解决这个问题,但也许我只是想念它。

为了做到这一点,我需要什么?我猜想我的贡献者可以利用项目中所有现有 Java 代码的一些缓存信息。

【问题讨论】:

标签: java intellij-idea intellij-plugin


【解决方案1】:

我认为您正在寻找existing stub indices。 例如,要获取项目中的所有类名,可以使用

val classNames = JavaFullClassNameIndex.getInstance().getAllKeys(project)

当使用索引时——你自己的或已经存在的——使用Index Viewer 插件通常很有用,这样你就可以查看哪些东西在哪个索引中。 要将其添加为插件的依赖项(因此您不必每次构建插件时都手动安装它)将以下内容添加到 build.gradle.ktsintellij 块中:

plugins.set(listOf("java", "com.jetbrains.hackathon.indices.viewer:1.19"))

它应该显示为右侧的工具窗口。 完成索引调试后不要忘记将其删除。


我还发现了可能有用的PsiShortNamesCache

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多