From 97b45569fcae6e3418d2f1987236fd8d85bab32b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 24 Oct 2016 18:50:28 +0300 Subject: [PATCH] Lambda to reference: not-null types are now preferred for platform type receivers #KT-14394 Fixed --- .../idea/intentions/ConvertLambdaToReferenceIntention.kt | 6 +----- .../intentions/convertLambdaToReference/platformType.kt | 4 ++++ .../convertLambdaToReference/platformType.kt.after | 4 ++++ .../convertLambdaToReference/typeFromJava.kt.after | 2 +- .../typeFromJavaFlexibleRecursive.kt.after | 2 +- .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 6 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 idea/testData/intentions/convertLambdaToReference/platformType.kt create mode 100644 idea/testData/intentions/convertLambdaToReference/platformType.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index 2f7aa6eb20b..56d132af062 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor -import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType import org.jetbrains.kotlin.builtins.isExtensionFunctionType import org.jetbrains.kotlin.builtins.isFunctionType @@ -30,9 +29,6 @@ import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.approximateFlexibleTypes import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.psi.psiUtil.getStartOffsetIn -import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET import org.jetbrains.kotlin.resolve.descriptorUtil.hasDefaultValue import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor @@ -227,7 +223,7 @@ class ConvertLambdaToReferenceIntention : SelfTargetingOffsetIndependentIntentio val context = receiver.analyze() val receiverDescriptor = context[REFERENCE_TARGET, receiver] as? ParameterDescriptor ?: return null val originalReceiverType = receiverDescriptor.type - val receiverType = originalReceiverType.approximateFlexibleTypes() + val receiverType = originalReceiverType.approximateFlexibleTypes(preferNotNull = true) if (shortTypes) { "${IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(receiverType)}::$selectorReferenceName" } diff --git a/idea/testData/intentions/convertLambdaToReference/platformType.kt b/idea/testData/intentions/convertLambdaToReference/platformType.kt new file mode 100644 index 00000000000..470ca59f95b --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/platformType.kt @@ -0,0 +1,4 @@ +// WITH_RUNTIME + +val y = java.lang.String.valueOf(42) +val x = y.let { it.capitalize() } \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/platformType.kt.after b/idea/testData/intentions/convertLambdaToReference/platformType.kt.after new file mode 100644 index 00000000000..568207293e0 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/platformType.kt.after @@ -0,0 +1,4 @@ +// WITH_RUNTIME + +val y = java.lang.String.valueOf(42) +val x = y.let(String::capitalize) \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/typeFromJava.kt.after b/idea/testData/intentions/convertLambdaToReference/typeFromJava.kt.after index 9a7597f313b..a7138f16f56 100644 --- a/idea/testData/intentions/convertLambdaToReference/typeFromJava.kt.after +++ b/idea/testData/intentions/convertLambdaToReference/typeFromJava.kt.after @@ -2,5 +2,5 @@ // See KT-13411 fun use() { - B.text.map(Any?::toString) + B.text.map(Any::toString) } \ No newline at end of file diff --git a/idea/testData/intentions/convertLambdaToReference/typeFromJavaFlexibleRecursive.kt.after b/idea/testData/intentions/convertLambdaToReference/typeFromJavaFlexibleRecursive.kt.after index ba11e9f8d9e..24cfda513d4 100644 --- a/idea/testData/intentions/convertLambdaToReference/typeFromJavaFlexibleRecursive.kt.after +++ b/idea/testData/intentions/convertLambdaToReference/typeFromJavaFlexibleRecursive.kt.after @@ -3,5 +3,5 @@ fun use() { val text = B.text - text.map(MutableList?::toString) + text.map(MutableList::toString) } \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index ebdd738418f..4100a6e48fb 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4135,6 +4135,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("platformType.kt") + public void testPlatformType() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/platformType.kt"); + doTest(fileName); + } + @TestMetadata("receiverParameter.kt") public void testReceiverParameter() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/receiverParameter.kt");