From 10935ba9dbd7d4bd61cc3bc702fc192f4b7c4cb9 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 13 Jun 2016 15:42:04 +0300 Subject: [PATCH] Wrap with safe let call : minor refactoring --- .../src/org/jetbrains/kotlin/types/TypeUtils.kt | 3 +++ .../kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt | 7 ++----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt index c11dc8fed3e..96ea85fe2ca 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt @@ -71,6 +71,9 @@ fun KotlinType?.isArrayOfNothing(): Boolean { fun KotlinType.isSubtypeOf(superType: KotlinType): Boolean = KotlinTypeChecker.DEFAULT.isSubtypeOf(this, superType) +fun isNullabilityMismatch(expected: KotlinType, actual: KotlinType) = + !expected.isMarkedNullable && actual.isMarkedNullable && actual.isSubtypeOf(TypeUtils.makeNullable(expected)) + fun KotlinType.cannotBeReified(): Boolean = KotlinBuiltIns.isNothingOrNullableNothing(this) || this.isDynamic() || this.isCaptured() diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt index 0554cb23c11..6f1b6ff4cb5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.types.TypeUtils +import org.jetbrains.kotlin.types.typeUtil.isNullabilityMismatch import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf class WrapWithSafeLetCallFix( @@ -68,11 +69,7 @@ class WrapWithSafeLetCallFix( val argument = typeMismatch.psiElement.parent as? KtValueArgument ?: return null val call = argument.getParentOfType(true) ?: return null - val expected = typeMismatch.a - val actual = typeMismatch.b - if (expected.isMarkedNullable || !actual.isMarkedNullable) return null - val expectedNullable = TypeUtils.makeNullable(expected) - if (!actual.isSubtypeOf(expectedNullable)) return null + if (!isNullabilityMismatch(expected = typeMismatch.a, actual = typeMismatch.b)) return null return WrapWithSafeLetCallFix(call, typeMismatch.psiElement) }