Search for source of platform binary also in common sources

So #KT-20971 Fixed
This commit is contained in:
Mikhail Glukhikh
2018-02-06 16:23:04 +03:00
parent 76976f7e52
commit dcbb29e947
@@ -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<BinaryModuleInfo>().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()