【问题标题】:How to use Code Completion on IntelliJ Plugin?如何在 IntelliJ 插件上使用代码完成?
【发布时间】:2016-01-19 13:37:27
【问题描述】:

我正在开发 IntelliJ 上的插件。 我有这样的问题:

我们知道,如果我们输入一个关键字,IntelliJ 将使用它的代码完成功能来给我们提供如图所示的提示。

现在我在 IntelliJ 上的插件中有一个 JTextField,它需要这样的功能:当我在 JTextField 中填写一些单词时,它会提供如图所示的代码完成提示。 IntelliJ 是否有一些开放的 API 可以做到这一点?我做了很多工作来调查如何做到这一点。但一无所获。

【问题讨论】:

    标签: java intellij-idea code-completion intellij-plugin


    【解决方案1】:

    对于 JTextField,IntelliJ IDEA 没有这样的 API。 IDEA 的完成需要 IDEA 的 Editor 才能工作。您可以使用 EditorFactory 创建一个(不要忘记在不需要后从同一个 EditorFactory 释放它)。如果您的编辑器是单行的,您可能会考虑使用 EditorTextField 来代替,这会使事情变得更容易。两者都有 getComponent() 方法,这些方法返回可以嵌入到 GUI 中的常用 Swing 组件。

    然后您可以使用 LookupManager 方法手动显示/隐藏/处理弹出窗口,或者依靠通用 IDE 完成机制自动完成许多事情。但后者要求您将编辑器的文档与 PsiFile(可能是纯文本文件,请参阅 PsiFileFactory.createFileFromText)相关联,并创建一个 CompletionContributor,根据文件中的位置提供建议变体。

    【讨论】:

    • 感谢您的回答。这似乎是我需要的。顺便说一句,我如何使用LookupManagerEditorTextField 中启用代码完成功能?我正在尝试使用LookupManager.getInstance(project).showLookup(...),但注意到当我在EditorTextField 中填写一些单词时发生了问题,它有什么问题吗?
    • 您很可能需要做其他事情。但我不能马上告诉你它是什么。请确保调用 showLookup 时编辑器已显示在屏幕上。 showLookup 应返回非空查找。如果是这样的话,我可以建议在源代码中,在 showLookup 方法和 LookupImpl.doHide 周围放置断点。也许这将有助于解决问题。
    • @PeterGromov 感谢您的解释。一个问题,Java完成弹出窗口“异步”添加项目;使用 LookupManager 会产生相同的效果还是阻塞组件?
    • @LppEdd LookupManager 只是一个用于管理弹出窗口 (Lookup) 本身的 API。查找反过来支持通过LookupImpl#addItem添加项目。
    猜你喜欢
    • 2015-02-01
    • 2020-06-22
    • 2021-11-16
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多