From 2a10d8e83760610bb1fbf4a6d396212f76e90a01 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 11 Jan 2018 20:12:58 +0900 Subject: [PATCH] KT-15176 Remove "Create type alias" intention when called on java class --- ...TypeAliasFromTypeReferenceActionFactory.kt | 3 +++ .../typeReference/javaUserTypeReceiver.test | 19 +++++++++++++++++++ .../QuickFixMultiFileTestGenerated.java | 15 +++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference/javaUserTypeReceiver.test diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeAlias/CreateTypeAliasFromTypeReferenceActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeAlias/CreateTypeAliasFromTypeReferenceActionFactory.kt index beb2fd6fac8..9dabade4b4a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeAlias/CreateTypeAliasFromTypeReferenceActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeAlias/CreateTypeAliasFromTypeReferenceActionFactory.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createTypeAlias +import com.intellij.lang.java.JavaLanguage +import com.intellij.psi.PsiClass import com.intellij.psi.PsiPackage import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.diagnostics.Diagnostic @@ -41,6 +43,7 @@ object CreateTypeAliasFromTypeReferenceActionFactory : KotlinSingleIntentionActi val classInfo = CreateClassFromTypeReferenceActionFactory.extractFixData(element, diagnostic) ?: return null val targetParent = classInfo.applicableParents.singleOrNull { it !is KtDeclaration && it !is PsiPackage } ?: return null + if ((targetParent as? PsiClass)?.language == JavaLanguage.INSTANCE) return null val expectedType = getTypeConstraintInfo(element)?.upperBound if (expectedType != null && expectedType.containsError()) return null diff --git a/idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference/javaUserTypeReceiver.test b/idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference/javaUserTypeReceiver.test new file mode 100644 index 00000000000..96836dd6102 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference/javaUserTypeReceiver.test @@ -0,0 +1,19 @@ +// FILE: foo/test.before.kt +// "Create type alias 'A'" "false" +// ACTION: Convert to block body +// ACTION: Create annotation 'A' +// ACTION: Create class 'A' +// ACTION: Create enum 'A' +// ACTION: Create interface 'A' +// ACTION: Remove explicit type specification +// ERROR: Unresolved reference: A +package foo + +fun foo(): JavaClass.A = throw Throwable("") + + +// FILE: foo/JavaClass.java +package foo; + +public class JavaClass { +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index d3d0f43c4f3..cba7901a644 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -1408,6 +1408,21 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes public void testAllFilesPresentInCreateTypeAlias() throws Exception { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createTypeAlias"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); } + + @TestMetadata("idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class TypeReference extends AbstractQuickFixMultiFileTest { + public void testAllFilesPresentInTypeReference() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference"), Pattern.compile("^(\\w+)\\.((before\\.Main\\.\\w+)|(test))$"), TargetBackend.ANY, true); + } + + @TestMetadata("javaUserTypeReceiver.test") + public void testJavaUserTypeReceiver() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createTypeAlias/typeReference/javaUserTypeReceiver.test"); + doTestWithExtraFile(fileName); + } + } } @TestMetadata("idea/testData/quickfix/createFromUsage/createTypeParameter")