diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index 2b717ab6389..551f64dbca7 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -489,9 +489,10 @@ fun KtTypeParameterListOwner.addTypeParameter(typeParameter: KtTypeParameter): K val list = KtPsiFactory(this).createTypeParameterList("") list.parameters[0].replace(typeParameter) val leftAnchor = when (this) { - is KtClass -> nameIdentifier ?: getClassOrInterfaceKeyword() + is KtClass -> nameIdentifier is KtNamedFunction -> funKeyword is KtProperty -> valOrVarKeyword + is KtTypeAlias -> nameIdentifier else -> null } ?: return null return (addAfter(list, leftAnchor) as KtTypeParameterList).parameters.first() diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt index ab9a22e18f4..cbada724057 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterFromUsageFix.kt @@ -97,7 +97,8 @@ class CreateTypeParameterFromUsageFix( } else null val upperBound = upperBoundText?.let { psiFactory.createType(it) } val newTypeParameterText = if (upperBound != null) "${typeParameter.name} : ${upperBound.text}" else typeParameter.name - val newTypeParameter = declaration.addTypeParameter(psiFactory.createTypeParameter(newTypeParameterText))!! + val newTypeParameter = declaration.addTypeParameter(psiFactory.createTypeParameter(newTypeParameterText)) + ?: error("Couldn't create type parameter from '$newTypeParameterText' for '$declaration'") elementsToShorten += newTypeParameter val anonymizedTypeParameter = createFakeTypeParameterDescriptor(typeParameter.fakeTypeParameter.containingDeclaration, "_") diff --git a/idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt b/idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt new file mode 100644 index 00000000000..7e995afbe64 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt @@ -0,0 +1,6 @@ +// "Create type parameter in type alias 'G'" "true" + +class C +typealias G = C + +fun a(g: G>) = Unit \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt.after b/idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt.after new file mode 100644 index 00000000000..05b2a775e72 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt.after @@ -0,0 +1,6 @@ +// "Create type parameter in type alias 'G'" "true" + +class C +typealias G = C + +fun a(g: G) = Unit \ 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 af37ae9587a..0e66ab2f5a2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -4780,6 +4780,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { public void testNotOnTypeArgumentList() throws Exception { runTest("idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/notOnTypeArgumentList.kt"); } + + @TestMetadata("typealias.kt") + public void testTypealias() throws Exception { + runTest("idea/testData/quickfix/createFromUsage/createTypeParameter/inReferencedDeclaration/typealias.kt"); + } } }