在IntelliJ Platform SDK中手动触发完成弹出窗口

时间:2018-07-17 18:59:35

标签: intellij-idea intellij-plugin

我正在为IntelliJ平台开发一个插件。我已经创建了CompletionContributor的实现,并且已经成功地提出了建议。我目前正在覆盖invokeAutoPopup方法以触发完成弹出窗口。我正在使用InsertHandler的实现,在完成选择的插入后立即向文档中添加其他文本。

但是,我想这样做,以便当用户成功插入建议时,立即出现另一个完成弹出提示。例如,在此InsertHandler(用Kotlin写)中,选择了一种方法后,应立即为他们提供有关该方法的参数的建议:

val handler = InsertHandler<LookupElement> { context: InsertionContext, element: LookupElement ->
  val offset = context.tailOffset
  context.document.insertString(offset, "()")
  context.editor.caretModel.moveToOffset(offset + 1)
  TODO("trigger popup")
}

或者在选择一个字段之后,可以立即为他们提供可以在该字段上调用的方法:

val handler = InsertHandler<LookupElement> { context: InsertionContext, element: LookupElement ->
  val offset = context.tailOffset
  context.document.insertString(offset, ".")
  context.editor.caretModel.moveToOffset(offset + 1)
  TODO("trigger popup")
}

换句话说,我想这样做,以便在插入建议的文本之后,就好像用户按下了Ctrl+Space。这可能吗?我是否以正确的方式解决问题?上面的代码中有什么遗漏了重点吗? (欢迎使用Java或Kotlin解决方案。)

1 个答案:

答案 0 :(得分:1)

如果自动弹出功能足以满足您的需求,则可以尝试调用com.intellij.codeInsight.AutoPopupController.getInstance(context.project).scheduleAutoPopup(context.editor)