diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt index 286822c8fda..d87aa8f7d08 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/psiUtils.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.psi.psiUtil +import com.intellij.injected.editor.VirtualFileWindow import com.intellij.openapi.util.TextRange import com.intellij.psi.* import com.intellij.psi.search.PsiSearchScopeUtil @@ -329,9 +330,10 @@ fun PsiElement.getElementTextWithContext(): String { val inFileParentOffset = elementContextOffset - startContextOffset + val isInjected = containingFile is VirtualFileWindow return StringBuilder(topLevelElement.text) .insert(inFileParentOffset, "") - .insert(0, "File name: ${containingFile.name} Physical: ${containingFile.isPhysical}\n") + .insert(0, "File name: ${containingFile.name} Physical: ${containingFile.isPhysical} Injected: $isInjected\n") .toString() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt index 99b446f23d0..fda546a2a67 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaModuleInfos.kt @@ -30,11 +30,10 @@ import com.intellij.psi.util.CachedValuesManager import com.intellij.util.SmartList import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.descriptors.ModuleDescriptor +import org.jetbrains.kotlin.idea.util.isInSourceContentWithoutInjected import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.jvm.GlobalSearchScopeWithModuleSources -import org.jetbrains.kotlin.utils.alwaysNull import org.jetbrains.kotlin.utils.emptyOrSingletonList -import java.lang.reflect.Method import java.util.* interface IdeaModuleInfo : ModuleInfo { @@ -155,7 +154,7 @@ private class ModuleProductionSourceScope(module: Module) : ModuleSourceScope(mo // KT-6206 override fun hashCode(): Int = 31 * module.hashCode() - override fun contains(file: VirtualFile) = moduleFileIndex.isInSourceContent(file) && !moduleFileIndex.isInTestSourceContent(file) + override fun contains(file: VirtualFile) = moduleFileIndex.isInSourceContentWithoutInjected(file) && !moduleFileIndex.isInTestSourceContent(file) override fun toString() = "ModuleProductionSourceScope($module)" } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt index 40042048ca9..7dd08424f1f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/getModuleInfo.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.idea.core.script.KotlinScriptConfigurationManager import org.jetbrains.kotlin.idea.util.ProjectRootsUtil +import org.jetbrains.kotlin.idea.util.isInSourceContentWithoutInjected import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.script.getScriptDefinition @@ -95,7 +96,7 @@ private fun getModuleInfoByVirtualFile(project: Project, virtualFile: VirtualFil warnIfDecompiled() return module.testSourceInfo() } - else if (moduleFileIndex.isInSourceContent(virtualFile)) { + else if (moduleFileIndex.isInSourceContentWithoutInjected(virtualFile)) { warnIfDecompiled() return module.productionSourceInfo() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt index 06fdfa818e9..6cc4319330c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ProjectRootsUtil.kt @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.idea.util import com.intellij.ide.highlighter.ArchiveFileType import com.intellij.ide.highlighter.JavaClassFileType +import com.intellij.injected.editor.VirtualFileWindow import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.FileIndex import com.intellij.openapi.roots.ProjectFileIndex import com.intellij.openapi.util.Ref import com.intellij.openapi.vfs.VirtualFile @@ -32,6 +34,10 @@ import org.jetbrains.kotlin.idea.util.application.runReadAction private val classFileLike = listOf(JavaClassFileType.INSTANCE, KotlinBuiltInFileType, KotlinModuleFileType.INSTANCE) +fun FileIndex.isInSourceContentWithoutInjected(file: VirtualFile): Boolean { + return file !is VirtualFileWindow && isInSourceContent(file) +} + object ProjectRootsUtil { @JvmStatic fun isInContent(project: Project, file: VirtualFile, includeProjectSource: Boolean, includeLibrarySource: Boolean, includeLibraryClasses: Boolean, @@ -39,7 +45,7 @@ object ProjectRootsUtil { fileIndex: ProjectFileIndex = ProjectFileIndex.SERVICE.getInstance(project), isJsProjectRef: Ref? = null): Boolean { - if (includeProjectSource && fileIndex.isInSourceContent(file)) return true + if (includeProjectSource && fileIndex.isInSourceContentWithoutInjected(file)) return true if (!includeLibraryClasses && !includeLibrarySource) return false diff --git a/idea/testData/highlighter/KotlinInjection.kt b/idea/testData/highlighter/KotlinInjection.kt new file mode 100644 index 00000000000..2ad0bbb4f30 --- /dev/null +++ b/idea/testData/highlighter/KotlinInjection.kt @@ -0,0 +1,6 @@ +package language_injection + +import org.intellij.lang.annotations.Language + +@Language("kotlin") +val test = "fun test2() {}" \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java index 7f3d496d850..369f415eb36 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/HighlightingTestGenerated.java @@ -78,6 +78,12 @@ public class HighlightingTestGenerated extends AbstractHighlightingTest { doTest(fileName); } + @TestMetadata("KotlinInjection.kt") + public void testKotlinInjection() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/highlighter/KotlinInjection.kt"); + doTest(fileName); + } + @TestMetadata("Labels.kt") public void testLabels() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/highlighter/Labels.kt");