mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-189563 LSP: Introduce LSP support for Code Lens and navigation popup
Merge-request: IJ-MR-188241 Merged-by: Vladimir Goncharov <vladimir.goncharov@jetbrains.com> GitOrigin-RevId: 42b42d128688295cb3189e222472d77ae3b55821
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e1e73d85dd
commit
b438c21410
-116
@@ -1,116 +0,0 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.codeInsight.codeVision
|
||||
|
||||
import com.intellij.codeInsight.codeVision.CodeVisionHost
|
||||
import com.intellij.codeInsight.codeVision.CodeVisionInitializer
|
||||
import com.intellij.codeInsight.codeVision.settings.CodeVisionSettings
|
||||
import com.intellij.codeInsight.codeVision.ui.model.CodeVisionListData
|
||||
import com.intellij.codeInsight.codeVision.ui.renderers.CodeVisionInlayRenderer
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo
|
||||
import com.intellij.codeInsight.hints.InlayDumpUtil
|
||||
import com.intellij.codeInsight.multiverse.CodeInsightContext
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.application.writeIntentReadAction
|
||||
import com.intellij.openapi.command.WriteCommandAction
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.project.waitForSmartMode
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.psi.PsiFile
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.testFramework.TestModeFlags
|
||||
import com.intellij.testFramework.fixtures.BasePlatformTestCase.assertEquals
|
||||
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl
|
||||
import com.intellij.testFramework.junit5.fixture.TestFixture
|
||||
import com.intellij.testFramework.junit5.fixture.testFixture
|
||||
import com.intellij.util.ArrayUtilRt
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
class CodeVisionTestFixture(
|
||||
private val editor: Editor,
|
||||
private val virtualFile: VirtualFile,
|
||||
private val project: Project,
|
||||
private val disposable: Disposable,
|
||||
private val onlyCodeVisionHintsAllowed: Boolean = false,
|
||||
) {
|
||||
|
||||
fun doHighlighting(file: PsiFile): List<HighlightInfo> =
|
||||
CodeInsightTestFixtureImpl.instantiateAndRun(file, editor, ArrayUtilRt.EMPTY_INT_ARRAY, false, false)
|
||||
|
||||
suspend fun testProviders(context: CodeInsightContext, expectedText: String, vararg enabledProviderGroupIds: String) {
|
||||
val sourceText = InlayDumpUtil.removeInlays(expectedText)
|
||||
project.waitForSmartMode()
|
||||
val codeVisionHost = readAction { CodeVisionInitializer.getInstance(project).getCodeVisionHost() }
|
||||
|
||||
withContext(Dispatchers.EDT) {
|
||||
writeIntentReadAction {
|
||||
val settings = CodeVisionSettings.getInstance()
|
||||
val file = requireNotNull(PsiManager.getInstance(project).findFile(virtualFile, context))
|
||||
codeVisionHost.providers.map { it.groupId }.toSet().forEach {
|
||||
settings.setProviderEnabled(it, enabledProviderGroupIds.contains(it))
|
||||
}
|
||||
TestModeFlags.set(CodeVisionHost.isCodeVisionTestKey, true, disposable)
|
||||
codeVisionHost.providers.forEach {
|
||||
if (it.id == "vcs.code.vision" && enabledProviderGroupIds.contains(it.groupId)) {
|
||||
it.preparePreview(editor, file)
|
||||
}
|
||||
}
|
||||
val document =
|
||||
requireNotNull(FileDocumentManager.getInstance().getDocument(virtualFile))
|
||||
WriteCommandAction.runWriteCommandAction(project) {
|
||||
document.setText(sourceText)
|
||||
PsiDocumentManager.getInstance(project).commitDocument(editor.document)
|
||||
}
|
||||
val newFile = requireNotNull(PsiDocumentManager.getInstance(project).getPsiFile(document, context))
|
||||
doHighlighting(newFile)
|
||||
codeVisionHost.calculateCodeVisionSync(editor, disposable)
|
||||
}
|
||||
}
|
||||
assertText(expectedText)
|
||||
}
|
||||
|
||||
private suspend fun assertText(expectedText: String) {
|
||||
val sourceText = InlayDumpUtil.removeInlays(expectedText)
|
||||
val actualText = withContext(Dispatchers.EDT) {
|
||||
writeIntentReadAction {
|
||||
dumpCodeVisionHints(sourceText)
|
||||
}
|
||||
}
|
||||
assertEquals(expectedText, actualText)
|
||||
}
|
||||
|
||||
|
||||
private fun dumpCodeVisionHints(sourceText: String): String {
|
||||
return InlayDumpUtil.dumpInlays(
|
||||
sourceText, editor,
|
||||
filter = {
|
||||
val rendererSupported = it.renderer is CodeVisionInlayRenderer
|
||||
if (onlyCodeVisionHintsAllowed && !rendererSupported) error("renderer not supported")
|
||||
rendererSupported
|
||||
},
|
||||
renderer = { _, inlay ->
|
||||
inlay.getUserData(CodeVisionListData.KEY)!!.visibleLens.joinToString(prefix = "[", postfix = "]", separator = " ") { it.longPresentation }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fun codeVisionFixture(editorFixture: TestFixture<Editor>, fileFixture: TestFixture<PsiFile>): TestFixture<CodeVisionTestFixture> =
|
||||
testFixture("code-vision-fixture") {
|
||||
val disposable = Disposer.newDisposable()
|
||||
val editor = editorFixture.init()
|
||||
val file = fileFixture.init()
|
||||
|
||||
val codeVisionFixture = CodeVisionTestFixture(editor, file.virtualFile, file.project, disposable)
|
||||
|
||||
initialized(codeVisionFixture) {
|
||||
// cleanup
|
||||
Disposer.dispose(disposable)
|
||||
}
|
||||
|
||||
}
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight.hints
|
||||
|
||||
import com.intellij.codeInsight.codeVision.CodeVisionProvider
|
||||
@@ -19,7 +19,7 @@ import com.intellij.openapi.project.Project
|
||||
private val LOG = logger<InlayProviderUsageCollector>()
|
||||
|
||||
internal class InlayProviderUsageCollector : ProjectUsagesCollector() {
|
||||
private val INLAY_CONFIGURATION_GROUP = EventLogGroup("inlay.configuration", 61)
|
||||
private val INLAY_CONFIGURATION_GROUP = EventLogGroup("inlay.configuration", 62)
|
||||
|
||||
private val GLOBAL_SETTINGS_EVENT = INLAY_CONFIGURATION_GROUP.registerEvent(
|
||||
"global.inlays.settings",
|
||||
|
||||
Reference in New Issue
Block a user