diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java b/idea/ide-common/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java index 19d8aed34d1..706cc08ee7a 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/core/quickfix/QuickFixUtil.java @@ -24,6 +24,7 @@ import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.CallableDescriptor; +import org.jetbrains.kotlin.descriptors.ClassifierDescriptor; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.diagnostics.Diagnostic; import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; @@ -162,8 +163,9 @@ public class QuickFixUtil { } public static String renderTypeWithFqNameOnClash(KotlinType type, String nameToCheckAgainst) { - FqName typeFqName = DescriptorUtils.getFqNameSafe(DescriptorUtils.getClassDescriptorForType(type)); FqName fqNameToCheckAgainst = new FqName(nameToCheckAgainst); + ClassifierDescriptor typeClassifierDescriptor = type.getConstructor().getDeclarationDescriptor(); + FqName typeFqName = typeClassifierDescriptor != null ? DescriptorUtils.getFqNameSafe(typeClassifierDescriptor) : fqNameToCheckAgainst; DescriptorRenderer renderer = typeFqName.shortName().equals(fqNameToCheckAgainst.shortName()) ? IdeDescriptorRenderers.SOURCE_CODE : IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES; diff --git a/idea/testData/quickfix/typeMismatch/kt17404.kt b/idea/testData/quickfix/typeMismatch/kt17404.kt new file mode 100644 index 00000000000..36d8d1370a8 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/kt17404.kt @@ -0,0 +1,4 @@ +// "Change type from 'Int' to 'X'" "true" +// ERROR: Cannot use 'X' as reified type parameter. Use a class instead. +inline fun inlineReified0(f: (T) -> T) = {} +fun callInlineReified3() = inlineReified0({ x: Int -> x }) \ No newline at end of file diff --git a/idea/testData/quickfix/typeMismatch/kt17404.kt.after b/idea/testData/quickfix/typeMismatch/kt17404.kt.after new file mode 100644 index 00000000000..a4d7d8fda38 --- /dev/null +++ b/idea/testData/quickfix/typeMismatch/kt17404.kt.after @@ -0,0 +1,4 @@ +// "Change type from 'Int' to 'X'" "true" +// ERROR: Cannot use 'X' as reified type parameter. Use a class instead. +inline fun inlineReified0(f: (T) -> T) = {} +fun callInlineReified3() = inlineReified0({ x: X -> x }) \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 6e0df9d9bc9..9bfcd6d6428 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -9707,6 +9707,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("kt17404.kt") + public void testKt17404() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/kt17404.kt"); + doTest(fileName); + } + @TestMetadata("letClassImplementAdditionalInterface.kt") public void testLetClassImplementAdditionalInterface() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/typeMismatch/letClassImplementAdditionalInterface.kt");