From 784936eb00efc78bdc074d35c998f59696e4a2f3 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 14 Mar 2018 18:40:03 +0100 Subject: [PATCH] Show 'actual/expect' icons for declarations in addition to visibility --- .../kotlin/idea/KotlinIconProvider.kt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt index 79f74b51449..dce0bee1756 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinIconProvider.kt @@ -25,7 +25,11 @@ import com.intellij.ui.RowIcon import com.intellij.util.PlatformIcons import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade import org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclaration +import org.jetbrains.kotlin.idea.KotlinIcons.ACTUAL +import org.jetbrains.kotlin.idea.KotlinIcons.EXPECT import org.jetbrains.kotlin.idea.caches.lightClasses.KtLightClassForDecompiledDeclaration +import org.jetbrains.kotlin.idea.util.isActualDeclaration +import org.jetbrains.kotlin.idea.util.isExpectDeclaration import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType @@ -42,7 +46,7 @@ class KotlinIconProvider : IconProvider(), DumbAware { val result = psiElement.getBaseIcon() if (flags and Iconable.ICON_FLAG_VISIBILITY > 0 && result != null && (psiElement is KtModifierListOwner && psiElement !is KtClassInitializer)) { val list = psiElement.modifierList - return createRowIcon(result, getVisibilityIcon(list)) + return createRowIcon(result.addExpectActualMarker(psiElement), getVisibilityIcon(list)) } return result } @@ -128,3 +132,16 @@ class KotlinIconProvider : IconProvider(), DumbAware { } } } + +private fun Icon.addExpectActualMarker(element: PsiElement): Icon { + val declaration = (element as? KtNamedDeclaration) ?: return this + val additionalIcon = when { + declaration.isExpectDeclaration() -> EXPECT + declaration.isActualDeclaration() -> ACTUAL + else -> return this + } + return RowIcon(2).apply { + setIcon(this@addExpectActualMarker, 0) + setIcon(additionalIcon, 1) + } +}