From 0365d3a3d6b71496c5a6ac5a541331661b99a779 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 6 Jul 2017 16:25:38 +0300 Subject: [PATCH] Create from Usage: Do not create type parameter by constuctor reference #KT-17353 Fixed --- ...reateTypeParameterByUnresolvedRefActionFactory.kt | 1 + .../inContainingDeclaration/inAnnotation.kt | 12 ++++++++++++ .../inContainingDeclaration/inSuperTypeEntry.kt | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 12 ++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inAnnotation.kt create mode 100644 idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inSuperTypeEntry.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt index 986e1766293..e74e477d8fd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt @@ -51,6 +51,7 @@ data class CreateTypeParameterData( object CreateTypeParameterByUnresolvedRefActionFactory : KotlinIntentionActionFactoryWithDelegate() { override fun getElementOfInterest(diagnostic: Diagnostic): KtUserType? { val ktUserType = diagnostic.psiElement.getParentOfTypeAndBranch { referenceExpression } ?: return null + if (ktUserType.getParentOfTypeAndBranch { typeReference } != null) return null if (ktUserType.qualifier != null) return null if (ktUserType.getParentOfTypeAndBranch(true) { qualifier } != null) return null if (ktUserType.typeArgumentList != null) return null diff --git a/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inAnnotation.kt b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inAnnotation.kt new file mode 100644 index 00000000000..11ba0f18a31 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inAnnotation.kt @@ -0,0 +1,12 @@ +// "Create type parameter 'Test' in class 'C'" "false" +// ACTION: Add 'testng' to classpath +// ACTION: Create annotation 'Test' +// ACTION: Make internal +// ACTION: Make private +// ACTION: Make protected +// ERROR: Unresolved reference: Test +class C { + @Test fun foo() { + + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inSuperTypeEntry.kt b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inSuperTypeEntry.kt new file mode 100644 index 00000000000..e45d673161c --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inSuperTypeEntry.kt @@ -0,0 +1,8 @@ +// "Create type parameter 'Test' in class 'C'" "false" +// ACTION: Add 'testng' to classpath +// ACTION: Create class 'Test' +// ACTION: Create test +// ERROR: Unresolved reference: Test +class C : Test() { + +} \ 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 b8f802d986c..7d24031e2a3 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3537,6 +3537,18 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("inAnnotation.kt") + public void testInAnnotation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inAnnotation.kt"); + doTest(fileName); + } + + @TestMetadata("inSuperTypeEntry.kt") + public void testInSuperTypeEntry() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/inSuperTypeEntry.kt"); + doTest(fileName); + } + @TestMetadata("qualifiedType.kt") public void testQualifiedType() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createTypeParameter/inContainingDeclaration/qualifiedType.kt");