Show 'actual/expect' icons for declarations in addition to visibility

This commit is contained in:
Pavel V. Talanov
2018-03-14 18:40:03 +01:00
parent c86a6cf21d
commit 784936eb00
@@ -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)
}
}