在 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)
。
我正在为 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)
。