IntelliJ插件中具有标准PsiElement自动完成功能的文本字段

问题描述 投票:3回答:1

我正在尝试为IntelliJ插件创建一个具有自动完成功能的简单文本字段。我认为这应该很简单,但到目前为止,我已经陷入困境...

例如据我了解,这应该工作:

EditorTextField format = new TextFieldWithCompletion(currentEditor.getProject(),
                provider,
                "",
                true,
                true,
                true);

问题是提供者。我希望看到的不是列表提供者。我只想在编辑器光标中显示与当前行匹配的补全,所以我想要完整的补全对话框,而不仅是一小部分选项。

我也看过TextFieldWithAutoCompletion,但它似乎是为硬编码字符串值而不是自由格式完成而设计的。

我只想要标准的Java / Kotlin补全。不是自定义列表或类似的东西。我看到了一些有关替换文本字段文档的讨论,但是我也无法正常工作。我有一个PsiExpressionCodeFragment,并希望会有一个完成程序提供者接受该请求,但我找不到它。

作为参考,我想做的事情与断点对话框中的条件语句非常相似。

here所示的另一种方法是:

JavaCodeFragmentFactory jcff = JavaCodeFragmentFactory.getInstance(currentEditor.getProject());
PsiFile pf = PsiDocumentManager.getInstance(currentEditor.getProject()).getPsiFile(currentEditor.getDocument());
PsiElement psiElement = pf.findElementAt(currentEditor.getCaretModel().getOffset());
PsiExpressionCodeFragment fragment = jcff.createExpressionCodeFragment("", psiElement,null, false);
EditorTextField f = new EditorTextField(PsiDocumentManager.getInstance(currentEditor.getProject()).getDocument(fragment),
        currentEditor.getProject(),
        FileTypes.PLAIN_TEXT, false, true);

这将加载UI,但是无论我键入什么都不会弹出代码完成。

intellij-plugin
1个回答
0
投票

诀窍是创建一个包含Document实例的编辑器。该文档涉及一种语言和psi元素上下文:

JPanel panel = new JPanel();

// Just detect an element under caret for context
PsiFile psiFile = PsiDocumentManager.getInstance(editor.getProject()).getPsiFile(editor.getDocument());
PsiElement element = psiFile.findElementAt(editor.getCaretModel().getOffset());

PsiExpressionCodeFragment code = JavaCodeFragmentFactory.getInstance(editor.getProject()).createExpressionCodeFragment("", element, null, true);
Document document = PsiDocumentManager.getInstance(editor.getProject()).getDocument(code);

EditorTextField myInput = new EditorTextField(document, editor.getProject(), JavaFileType.INSTANCE);
myInput.setPreferredWidth(300);

panel.add(myInput);

return panel;

这里是插入符号,以前位于dsa5上,因此对于完成而言,dsa5变量尚不可见。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.