【问题标题】:Manually trigger completion popup in IntelliJ Platform SDK在 IntelliJ 平台 SDK 中手动触发完成弹出窗口
【发布时间】:2018-07-17 18:59:35
【问题描述】:

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

【问题讨论】:

    标签: intellij-idea intellij-plugin


    【解决方案1】:

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

    【讨论】:

    • 这很好,但如果我也想显示文档怎么办?正如this answer 所说,这可以通过“显式代码完成”来完成,但是插件是否可以自动触发呢?
    • 在 IDEA 2018.2 中,您也可以打开设置以显示自动弹出完成的文档。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2022-01-19
    • 2011-12-03
    • 2013-07-14
    • 2013-01-02
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多