From b438c214102716c6bc27d11673b4f4780ce98597 Mon Sep 17 00:00:00 2001 From: Vladimir Goncharov Date: Mon, 16 Feb 2026 19:16:57 +0000 Subject: [PATCH] IJPL-189563 LSP: Introduce LSP support for Code Lens and navigation popup Merge-request: IJ-MR-188241 Merged-by: Vladimir Goncharov GitOrigin-RevId: 42b42d128688295cb3189e222472d77ae3b55821 --- .../codeVision/CodeVisionTestFixture.kt | 116 ------------------ .../hints/InlayProviderUsageCollector.kt | 4 +- 2 files changed, 2 insertions(+), 118 deletions(-) delete mode 100644 java/java-tests/testSrc/com/intellij/java/codeInsight/codeVision/CodeVisionTestFixture.kt diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/codeVision/CodeVisionTestFixture.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/codeVision/CodeVisionTestFixture.kt deleted file mode 100644 index c332648c2578..000000000000 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/codeVision/CodeVisionTestFixture.kt +++ /dev/null @@ -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 = - 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, fileFixture: TestFixture): TestFixture = - 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) - } - - } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/InlayProviderUsageCollector.kt b/platform/lang-impl/src/com/intellij/codeInsight/hints/InlayProviderUsageCollector.kt index 616b03b16f6a..35b19f858e7c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/InlayProviderUsageCollector.kt +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/InlayProviderUsageCollector.kt @@ -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() 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",