首页 > 解决方案 > IntelliJ DSL 插件提供 Java 类和方法的补全

问题描述

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

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

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

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

标签: javaintellij-ideaintellij-plugin

解决方案


我认为您正在寻找现有的 存根索引。例如,要获取项目中的所有类名,可以使用

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

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

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

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


我还发现了可能有用的PsiShortNamesCache 。


推荐阅读