Has actual marker: distinguish Android and JVM modules #KT-25055 Fixed
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user