From c33c6d89343c1146fb14f4ba01a35b5baf11417a Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Mon, 3 Mar 2025 18:09:56 +0100 Subject: [PATCH] KTIJ-34800 IJPL-339 add kotlin support Install the proper code insight context into kotlin class files. Otherwise, these files don't satisfy the scopes of the modules and are ignored GitOrigin-RevId: e48c0b3d12f93099525a2132947d3e47a2a78983 --- .../IdeaDecompiledClassCustomization.kt | 35 +++++++++++++++++++ .../resources/META-INF/light-classes.xml | 4 +++ 2 files changed, 39 insertions(+) create mode 100644 plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/IdeaDecompiledClassCustomization.kt diff --git a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/IdeaDecompiledClassCustomization.kt b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/IdeaDecompiledClassCustomization.kt new file mode 100644 index 000000000000..86b6f60dbaf6 --- /dev/null +++ b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/IdeaDecompiledClassCustomization.kt @@ -0,0 +1,35 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.base.analysis + +import com.intellij.codeInsight.multiverse.CodeInsightContextManagerImpl +import com.intellij.codeInsight.multiverse.codeInsightContext +import com.intellij.codeInsight.multiverse.isSharedSourceSupportEnabled +import com.intellij.psi.PsiFile +import com.intellij.psi.impl.compiled.ClsFileImpl +import org.jetbrains.kotlin.analysis.decompiled.light.classes.DecompiledClassCustomization +import org.jetbrains.kotlin.psi.KtFile + +internal class IdeaDecompiledClassCustomization : DecompiledClassCustomization { + override fun customizeFakeClsFile( + fakeFile: ClsFileImpl, + originalKtFile: KtFile + ) { + fakeFile.installCodeInsightContextFrom(originalKtFile) + } + + /** + * we need to install code insight context from the original [context] file so that [this] file has the same context. + * todo ijpl-339 ensure all light files are covered + */ + private fun PsiFile.installCodeInsightContextFrom( + contextFile: KtFile + ) { + if (!isSharedSourceSupportEnabled(project)) { + return + } + + val viewProvider = this.viewProvider + val codeInsightContextManager = CodeInsightContextManagerImpl.getInstanceImpl(project) + codeInsightContextManager.setCodeInsightContext(viewProvider, contextFile.codeInsightContext) + } +} diff --git a/plugins/kotlin/plugin/common/resources/META-INF/light-classes.xml b/plugins/kotlin/plugin/common/resources/META-INF/light-classes.xml index 748c77b2c6ed..c842a4c730d2 100644 --- a/plugins/kotlin/plugin/common/resources/META-INF/light-classes.xml +++ b/plugins/kotlin/plugin/common/resources/META-INF/light-classes.xml @@ -4,5 +4,9 @@ serviceInterface="org.jetbrains.kotlin.asJava.classes.LightClassInheritanceHelper" serviceImplementation="org.jetbrains.kotlin.idea.caches.lightClasses.IdeLightClassInheritanceHelper" /> + \ No newline at end of file