From dcbb29e9476223431b3c704e9f69041248170ad2 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 6 Feb 2018 16:23:04 +0300 Subject: [PATCH] Search for source of platform binary also in common sources So #KT-20971 Fixed --- .../navigation/SourceNavigationHelper.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt index 774faee8d8a..9cb880a284f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt @@ -19,6 +19,7 @@ import com.intellij.util.containers.ContainerUtil import gnu.trove.THashSet import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.BinaryModuleInfo import org.jetbrains.kotlin.idea.caches.resolve.getBinaryLibrariesModuleInfos import org.jetbrains.kotlin.idea.caches.resolve.getLibrarySourcesModuleInfos import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny @@ -32,6 +33,7 @@ import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.debugText.getDebugText +import org.jetbrains.kotlin.resolve.TargetPlatform object SourceNavigationHelper { private val LOG = Logger.getInstance(SourceNavigationHelper::class.java) @@ -53,8 +55,19 @@ object SourceNavigationHelper { val vFile = containingFile.virtualFile ?: return null return when (navigationKind) { - NavigationKind.CLASS_FILES_TO_SOURCES -> getBinaryLibrariesModuleInfos(declaration.project, vFile) - .mapNotNull { it.sourcesModuleInfo?.sourceScope() }.union() + NavigationKind.CLASS_FILES_TO_SOURCES -> { + val binaryModuleInfos = getBinaryLibrariesModuleInfos(declaration.project, vFile) + binaryModuleInfos.map { binaryModuleInfo -> + val platform = binaryModuleInfo.platform + if (platform == null || platform == TargetPlatform.Common) { + listOf(binaryModuleInfo) + } else { + binaryModuleInfo.dependencies().filterIsInstance().filter { + it.platform == TargetPlatform.Common + } + binaryModuleInfo + } + }.flatten().mapNotNull { it.sourcesModuleInfo?.sourceScope() }.union() + } NavigationKind.SOURCES_TO_CLASS_FILES -> getLibrarySourcesModuleInfos(declaration.project, vFile) .map { it.binariesModuleInfo.binariesScope() }.union()