Show expect / actual gutter even for incomplete compatibility
So #KT-18445 Fixed So #KT-21115 Fixed
This commit is contained in:
@@ -35,7 +35,7 @@ import java.awt.event.MouseEvent
|
|||||||
fun ModuleDescriptor.hasActualsFor(descriptor: MemberDescriptor) =
|
fun ModuleDescriptor.hasActualsFor(descriptor: MemberDescriptor) =
|
||||||
actualsFor(descriptor).isNotEmpty()
|
actualsFor(descriptor).isNotEmpty()
|
||||||
|
|
||||||
fun ModuleDescriptor.actualsFor(descriptor: MemberDescriptor, checkCompatible: Boolean = true): List<DeclarationDescriptor> =
|
fun ModuleDescriptor.actualsFor(descriptor: MemberDescriptor, checkCompatible: Boolean = false): List<DeclarationDescriptor> =
|
||||||
with(ExpectedActualResolver) {
|
with(ExpectedActualResolver) {
|
||||||
if (checkCompatible) {
|
if (checkCompatible) {
|
||||||
descriptor.findCompatibleActualForExpected(this@actualsFor)
|
descriptor.findCompatibleActualForExpected(this@actualsFor)
|
||||||
|
|||||||
@@ -29,14 +29,16 @@ import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver
|
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver
|
||||||
|
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver.Compatibility.*
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null
|
fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null
|
||||||
|
|
||||||
private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? =
|
private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? =
|
||||||
with(ExpectedActualResolver) {
|
with(ExpectedActualResolver) {
|
||||||
descriptor.findCompatibleExpectedForActual(this@declarationOf).firstOrNull()
|
val expectedCompatibilityMap = findExpectedForActual(descriptor, this@declarationOf)
|
||||||
}
|
expectedCompatibilityMap?.get(Compatible)?.firstOrNull() ?: expectedCompatibilityMap?.values?.flatten()?.firstOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
fun getExpectedDeclarationTooltip(declaration: KtDeclaration?): String? {
|
fun getExpectedDeclarationTooltip(declaration: KtDeclaration?): String? {
|
||||||
val descriptor = declaration?.toDescriptor() as? MemberDescriptor ?: return null
|
val descriptor = declaration?.toDescriptor() as? MemberDescriptor ?: return null
|
||||||
@@ -67,8 +69,7 @@ internal fun KtDeclaration.isExpectedOrExpectedClassMember(): Boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun KtClassOrObject.isExpected(): Boolean {
|
internal fun KtClassOrObject.isExpected(): Boolean {
|
||||||
return this.hasExpectModifier() ||
|
return this.hasExpectModifier() || this.descriptor.safeAs<ClassDescriptor>()?.isExpect == true
|
||||||
this.descriptor.safeAs<ClassDescriptor>()?.isExpect == true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DeclarationDescriptor.liftToExpected(): DeclarationDescriptor? {
|
internal fun DeclarationDescriptor.liftToExpected(): DeclarationDescriptor? {
|
||||||
|
|||||||
@@ -2,6 +2,10 @@ expect class <lineMarker>Header</lineMarker> {
|
|||||||
fun <lineMarker>foo</lineMarker>(): Int
|
fun <lineMarker>foo</lineMarker>(): Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expect class <lineMarker>Incomplete</lineMarker> {
|
||||||
|
fun foo(): Int
|
||||||
|
}
|
||||||
|
|
||||||
expect fun <lineMarker>foo</lineMarker>(arg: Int): String
|
expect fun <lineMarker>foo</lineMarker>(arg: Int): String
|
||||||
|
|
||||||
expect val <lineMarker>flag</lineMarker>: Boolean
|
expect val <lineMarker>flag</lineMarker>: Boolean
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ actual class Header {
|
|||||||
actual fun foo() = 42
|
actual fun foo() = 42
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actual class Incomplete
|
||||||
|
|
||||||
actual fun foo(arg: Int) = arg.toString()
|
actual fun foo(arg: Int) = arg.toString()
|
||||||
|
|
||||||
actual val flag = true
|
actual val flag = true
|
||||||
|
|||||||
@@ -4,6 +4,10 @@ expect class Header {
|
|||||||
fun foo(): Int
|
fun foo(): Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expect class Incomplete {
|
||||||
|
fun foo(): Int
|
||||||
|
}
|
||||||
|
|
||||||
expect fun foo(arg: Int): String
|
expect fun foo(arg: Int): String
|
||||||
|
|
||||||
expect val flag: Boolean
|
expect val flag: Boolean
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ actual class <lineMarker>Header</lineMarker> {
|
|||||||
actual fun <lineMarker>foo</lineMarker>() = 42
|
actual fun <lineMarker>foo</lineMarker>() = 42
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actual class <lineMarker>Incomplete</lineMarker>
|
||||||
|
|
||||||
actual fun <lineMarker>foo</lineMarker>(arg: Int) = arg.toString()
|
actual fun <lineMarker>foo</lineMarker>(arg: Int) = arg.toString()
|
||||||
|
|
||||||
actual val <lineMarker>flag</lineMarker> = true
|
actual val <lineMarker>flag</lineMarker> = true
|
||||||
|
|||||||
Reference in New Issue
Block a user