java - IntelliJ DSL 插件提供 Java 类和方法的补全
问题描述
我正在尝试为引用 Java 类和方法的 DSL 编写 IntelliJ 插件。DSL*.conf
在 Java 项目中的文件中公开。DSL 的一个典型片段如下所示:
TASK taskClass=com.example.Foo taskMethod=someMethod;
我一直在通过 IJ 'Simple' 插件教程来学习插件,并且能够实现我自己的插件。但是,目前,我一直在尝试了解如何为taskClass
andtaskMethod
关键字提供自动完成功能。完成简单教程后,我所有的完成显示都是“你好”。现在我希望能够扩展我CompletionContributor
以显示项目中存在的 java 类和方法。教程中似乎没有解决这个问题,但也许我只是想念它。
为了做到这一点,我需要什么?我猜想我的贡献者可以利用项目中所有现有 Java 代码的一些缓存信息。
解决方案
我认为您正在寻找现有的 存根索引。例如,要获取项目中的所有类名,可以使用
val classNames = JavaFullClassNameIndex.getInstance().getAllKeys(project)
当使用索引时——你自己的或已经存在的——使用索引查看器插件通常很有用,这样你就可以查看哪些东西在哪个索引中。要将其添加为插件的依赖项(因此您不必每次构建插件时都手动安装它)将以下内容添加到intellij
您的块中build.gradle.kts
:
plugins.set(listOf("java", "com.jetbrains.hackathon.indices.viewer:1.19"))
它应该显示为右侧的工具窗口。完成索引调试后不要忘记将其删除。
我还发现了可能有用的PsiShortNamesCache 。
推荐阅读
- javascript - Firebase 函数和外部节点包
- java - 保护 <、> 和 & 是否足以清理 Swing 组件中的 HTML?
- django - Django循环到没有使用orm的循环
- reactjs - Next.js & Passport.js/Express:如何调试“TypeError:无法读取未定义的属性‘0’”响应
- javascript - 获取选择框的选中值
- javascript - Javascript中的无限滚动与来自文件的数据
- python - 如何将任务分配给 dask 纱线集群中的特定工作人员
- arrays - 是否有将分段或()应用于多个逻辑数组的本机函数?
- javascript - 使用 FetchAPI 向数组添加数据
- javascript - JS函数自发执行