diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt index 746719fa990..f4847bd46a7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceTypeAlias/introduceTypeAliasImpl.kt @@ -45,6 +45,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier +import org.jetbrains.kotlin.types.TypeUtils import java.util.* sealed class IntroduceTypeAliasAnalysisResult { @@ -214,6 +215,9 @@ fun findDuplicates(typeAlias: KtTypeAlias): Map Unit> { else continue } if (arguments.size != typeAliasDescriptor.declaredTypeParameters.size) continue + if (TypeUtils.isNullableType(typeAliasDescriptor.underlyingType) + && occurrence is KtUserType + && occurrence.parent !is KtNullableType) continue rangesWithReplacers += occurrence.toRange() to { replaceOccurrence(occurrence, arguments) } } } diff --git a/idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt b/idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt new file mode 100644 index 00000000000..229003289ec --- /dev/null +++ b/idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt @@ -0,0 +1,5 @@ +// NAME: NullableA + +class A + +fun f(p: A): A? = null \ No newline at end of file diff --git a/idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt.after b/idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt.after new file mode 100644 index 00000000000..dec7af8b4b5 --- /dev/null +++ b/idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt.after @@ -0,0 +1,7 @@ +// NAME: NullableA + +class A + +typealias NullableA = A? + +fun f(p: A): NullableA = null \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index 28f67f06c4b..21f6d54f993 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -4268,6 +4268,12 @@ public class ExtractionTestGenerated extends AbstractExtractionTest { doIntroduceTypeAliasTest(fileName); } + @TestMetadata("unmatchedNullability.kt") + public void testUnmatchedNullability() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/introduceTypeAlias/unmatchedNullability.kt"); + doIntroduceTypeAliasTest(fileName); + } + @TestMetadata("userTypeDuplicatesNoTypeParameters.kt") public void testUserTypeDuplicatesNoTypeParameters() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/introduceTypeAlias/userTypeDuplicatesNoTypeParameters.kt");