If then to elvis: handle nullability even with implicit receiver
So #KT-22741 Fixed
This commit is contained in:
+13
-8
@@ -46,14 +46,19 @@ class IfThenToElvisIntention : SelfTargetingOffsetIndependentIntention<KtIfExpre
|
|||||||
"Replace 'if' expression with elvis expression"
|
"Replace 'if' expression with elvis expression"
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private fun IfThenToSelectData.clausesReplaceableByElvis(): Boolean {
|
private fun IfThenToSelectData.clausesReplaceableByElvis(): Boolean =
|
||||||
if (baseClause == null || negatedClause == null || negatedClause.isNullOrBlockExpression()) return false
|
when {
|
||||||
if (negatedClause is KtThrowExpression && negatedClause.throwsNullPointerExceptionWithNoArguments()) return false
|
baseClause == null || negatedClause == null || negatedClause.isNullOrBlockExpression() ->
|
||||||
|
false
|
||||||
return receiverExpression is KtThisExpression && hasImplicitReceiver() ||
|
negatedClause is KtThrowExpression && negatedClause.throwsNullPointerExceptionWithNoArguments() ->
|
||||||
baseClause.evaluatesTo(receiverExpression) ||
|
false
|
||||||
baseClause.hasFirstReceiverOf(receiverExpression) && !baseClause.hasNullableType(context)
|
baseClause.evaluatesTo(receiverExpression) ->
|
||||||
}
|
true
|
||||||
|
receiverExpression is KtThisExpression && hasImplicitReceiver() || baseClause.hasFirstReceiverOf(receiverExpression) ->
|
||||||
|
!baseClause.hasNullableType(context)
|
||||||
|
else ->
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
override fun isApplicableTo(element: KtIfExpression): Boolean {
|
override fun isApplicableTo(element: KtIfExpression): Boolean {
|
||||||
val ifThenToSelectData = element.buildSelectTransformationData() ?: return false
|
val ifThenToSelectData = element.buildSelectTransformationData() ?: return false
|
||||||
|
|||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
// IS_APPLICABLE: false
|
||||||
|
|
||||||
|
class Something {
|
||||||
|
fun nullable(): Int? = null
|
||||||
|
}
|
||||||
|
fun Something?.nullable(value: Int): Int? =
|
||||||
|
<caret>if (this == null) value else nullable()
|
||||||
@@ -2358,6 +2358,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
|
|||||||
runTest("idea/testData/intentions/branched/ifThenToElvis/nullCheckWithSelectorCallChain.kt");
|
runTest("idea/testData/intentions/branched/ifThenToElvis/nullCheckWithSelectorCallChain.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableResultWithImplicitReceiver.kt")
|
||||||
|
public void testNullableResultWithImplicitReceiver() throws Exception {
|
||||||
|
runTest("idea/testData/intentions/branched/ifThenToElvis/nullableResultWithImplicitReceiver.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("nullableThen.kt")
|
@TestMetadata("nullableThen.kt")
|
||||||
public void testNullableThen() throws Exception {
|
public void testNullableThen() throws Exception {
|
||||||
runTest("idea/testData/intentions/branched/ifThenToElvis/nullableThen.kt");
|
runTest("idea/testData/intentions/branched/ifThenToElvis/nullableThen.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user