Has actual marker: distinguish Android and JVM modules #KT-25055 Fixed

This commit is contained in:
Mikhail Glukhikh
2018-09-25 16:10:16 +03:00
parent fd57a43665
commit 1f4d91da1c
@@ -19,6 +19,10 @@ package org.jetbrains.kotlin.idea.highlighter.markers
import com.intellij.codeInsight.daemon.impl.PsiElementListNavigator
import com.intellij.ide.util.DefaultPsiElementCellRenderer
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.analyzer.ModuleInfo
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
import org.jetbrains.kotlin.idea.core.isAndroidModule
import org.jetbrains.kotlin.idea.core.toDescriptor
import org.jetbrains.kotlin.idea.util.actualsForExpected
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -27,25 +31,36 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.getMultiTargetPlatform
import java.awt.event.MouseEvent
private fun ModuleDescriptor?.getMultiTargetPlatformName(): String? {
if (this == null) return null
val moduleInfo = getCapability(ModuleInfo.Capability) as? ModuleSourceInfo
if (moduleInfo != null && moduleInfo.module.isAndroidModule()) {
return "Android"
}
val platform = getMultiTargetPlatform() ?: return null
return when (platform) {
is MultiTargetPlatform.Specific ->
platform.platform
MultiTargetPlatform.Common ->
"common"
}
}
fun getPlatformActualTooltip(declaration: KtDeclaration): String? {
val actualDeclarations = declaration.actualsForExpected()
if (actualDeclarations.isEmpty()) return null
return actualDeclarations.asSequence()
.mapNotNull { it.toDescriptor()?.module }
.groupBy { it.getMultiTargetPlatform() }
.groupBy { it.getMultiTargetPlatformName() }
.filter { (platform, _) -> platform != null }
.entries
.joinToString(prefix = "Has actuals in ") { (platform, modules) ->
val modulesSuffix = if (modules.size <= 1) "" else " (${modules.size} modules)"
when (platform) {
is MultiTargetPlatform.Specific ->
"${platform.platform}$modulesSuffix"
MultiTargetPlatform.Common ->
"common$modulesSuffix"
null ->
throw AssertionError("Platform should not be null")
if (platform == null) {
throw AssertionError("Platform should not be null")
}
platform + modulesSuffix
}
}