Show expect / actual gutter even for incomplete compatibility

So #KT-18445 Fixed
So #KT-21115 Fixed
This commit is contained in:
Mikhail Glukhikh
2018-01-31 19:27:45 +03:00
parent a2a3043607
commit 3ba6b70f73
6 changed files with 19 additions and 6 deletions
@@ -35,7 +35,7 @@ import java.awt.event.MouseEvent
fun ModuleDescriptor.hasActualsFor(descriptor: MemberDescriptor) =
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) {
if (checkCompatible) {
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.descriptorUtil.module
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver
import org.jetbrains.kotlin.resolve.multiplatform.ExpectedActualResolver.Compatibility.*
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null
private fun ModuleDescriptor.declarationOf(descriptor: MemberDescriptor): DeclarationDescriptor? =
with(ExpectedActualResolver) {
descriptor.findCompatibleExpectedForActual(this@declarationOf).firstOrNull()
}
with(ExpectedActualResolver) {
val expectedCompatibilityMap = findExpectedForActual(descriptor, this@declarationOf)
expectedCompatibilityMap?.get(Compatible)?.firstOrNull() ?: expectedCompatibilityMap?.values?.flatten()?.firstOrNull()
}
fun getExpectedDeclarationTooltip(declaration: KtDeclaration?): String? {
val descriptor = declaration?.toDescriptor() as? MemberDescriptor ?: return null
@@ -67,8 +69,7 @@ internal fun KtDeclaration.isExpectedOrExpectedClassMember(): Boolean {
}
internal fun KtClassOrObject.isExpected(): Boolean {
return this.hasExpectModifier() ||
this.descriptor.safeAs<ClassDescriptor>()?.isExpect == true
return this.hasExpectModifier() || this.descriptor.safeAs<ClassDescriptor>()?.isExpect == true
}
internal fun DeclarationDescriptor.liftToExpected(): DeclarationDescriptor? {
@@ -2,6 +2,10 @@ expect class <lineMarker>Header</lineMarker> {
fun <lineMarker>foo</lineMarker>(): Int
}
expect class <lineMarker>Incomplete</lineMarker> {
fun foo(): Int
}
expect fun <lineMarker>foo</lineMarker>(arg: Int): String
expect val <lineMarker>flag</lineMarker>: Boolean
@@ -4,6 +4,8 @@ actual class Header {
actual fun foo() = 42
}
actual class Incomplete
actual fun foo(arg: Int) = arg.toString()
actual val flag = true
@@ -4,6 +4,10 @@ expect class Header {
fun foo(): Int
}
expect class Incomplete {
fun foo(): Int
}
expect fun foo(arg: Int): String
expect val flag: Boolean
@@ -2,6 +2,8 @@ actual class <lineMarker>Header</lineMarker> {
actual fun <lineMarker>foo</lineMarker>() = 42
}
actual class <lineMarker>Incomplete</lineMarker>
actual fun <lineMarker>foo</lineMarker>(arg: Int) = arg.toString()
actual val <lineMarker>flag</lineMarker> = true