Fix line markers for actual enum entries
#KT-22632 Fixed
This commit is contained in:
@@ -28,7 +28,7 @@ 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.hasMatchingExpected
|
||||
import org.jetbrains.kotlin.idea.util.isExpectDeclaration
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -137,7 +137,7 @@ private fun Icon.addExpectActualMarker(element: PsiElement): Icon {
|
||||
val declaration = (element as? KtNamedDeclaration) ?: return this
|
||||
val additionalIcon = when {
|
||||
declaration.isExpectDeclaration() -> EXPECT
|
||||
declaration.isActualDeclaration() -> ACTUAL
|
||||
declaration.hasMatchingExpected() -> ACTUAL
|
||||
else -> return this
|
||||
}
|
||||
return RowIcon(2).apply {
|
||||
|
||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||
import org.jetbrains.kotlin.psi.psiUtil.hasActualModifier
|
||||
import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver
|
||||
@@ -114,8 +115,14 @@ private fun KtClassOrObject.isExpected(): Boolean {
|
||||
return this.hasExpectModifier() || this.descriptor.safeAs<ClassDescriptor>()?.isExpect == true
|
||||
}
|
||||
|
||||
fun KtDeclaration.isActualDeclaration(): Boolean {
|
||||
fun KtDeclaration.hasMatchingExpected() = (toDescriptor() as? MemberDescriptor)?.expectedDescriptor() != null
|
||||
|
||||
fun KtDeclaration.isEffectivelyActual(): Boolean {
|
||||
if (hasActualModifier()) return true
|
||||
|
||||
return (toDescriptor() as? MemberDescriptor)?.isActual == true
|
||||
val descriptor = toDescriptor() as? MemberDescriptor ?: return false
|
||||
return descriptor.isActual || descriptor.isEnumEntryInActual()
|
||||
}
|
||||
|
||||
private fun MemberDescriptor.isEnumEntryInActual() =
|
||||
(DescriptorUtils.isEnumEntry(this) && (containingDeclaration as? MemberDescriptor)?.isActual == true)
|
||||
|
||||
Reference in New Issue
Block a user