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.codeInsight.daemon.impl.PsiElementListNavigator
|
||||||
import com.intellij.ide.util.DefaultPsiElementCellRenderer
|
import com.intellij.ide.util.DefaultPsiElementCellRenderer
|
||||||
import com.intellij.psi.PsiElement
|
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.core.toDescriptor
|
||||||
import org.jetbrains.kotlin.idea.util.actualsForExpected
|
import org.jetbrains.kotlin.idea.util.actualsForExpected
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
@@ -27,25 +31,36 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
|||||||
import org.jetbrains.kotlin.resolve.getMultiTargetPlatform
|
import org.jetbrains.kotlin.resolve.getMultiTargetPlatform
|
||||||
import java.awt.event.MouseEvent
|
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? {
|
fun getPlatformActualTooltip(declaration: KtDeclaration): String? {
|
||||||
val actualDeclarations = declaration.actualsForExpected()
|
val actualDeclarations = declaration.actualsForExpected()
|
||||||
if (actualDeclarations.isEmpty()) return null
|
if (actualDeclarations.isEmpty()) return null
|
||||||
|
|
||||||
return actualDeclarations.asSequence()
|
return actualDeclarations.asSequence()
|
||||||
.mapNotNull { it.toDescriptor()?.module }
|
.mapNotNull { it.toDescriptor()?.module }
|
||||||
.groupBy { it.getMultiTargetPlatform() }
|
.groupBy { it.getMultiTargetPlatformName() }
|
||||||
.filter { (platform, _) -> platform != null }
|
.filter { (platform, _) -> platform != null }
|
||||||
.entries
|
.entries
|
||||||
.joinToString(prefix = "Has actuals in ") { (platform, modules) ->
|
.joinToString(prefix = "Has actuals in ") { (platform, modules) ->
|
||||||
val modulesSuffix = if (modules.size <= 1) "" else " (${modules.size} modules)"
|
val modulesSuffix = if (modules.size <= 1) "" else " (${modules.size} modules)"
|
||||||
when (platform) {
|
if (platform == null) {
|
||||||
is MultiTargetPlatform.Specific ->
|
throw AssertionError("Platform should not be null")
|
||||||
"${platform.platform}$modulesSuffix"
|
|
||||||
MultiTargetPlatform.Common ->
|
|
||||||
"common$modulesSuffix"
|
|
||||||
null ->
|
|
||||||
throw AssertionError("Platform should not be null")
|
|
||||||
}
|
}
|
||||||
|
platform + modulesSuffix
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user