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

Manually trigger completion popup in IntelliJ Platform SDK

我正在为 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 中的解决方案。)

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