diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt index 877b9f7b7fb..78a7979a541 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt @@ -625,13 +625,12 @@ internal object ImportForMissingOperatorFactory : ImportFixBase.Factory() { private fun KotlinIndicesHelper.getClassesByName(expressionForPlatform: KtExpression, name: String) = - when (TargetPlatformDetector.getPlatform(expressionForPlatform.containingKtFile)) { - JsPlatform -> getKotlinClasses({ it == name }, - // Enum entries should be contributes with members import fix - psiFilter = { ktDeclaration -> ktDeclaration !is KtEnumEntry }, - kindFilter = { kind -> kind != ClassKind.ENUM_ENTRY }) - JvmPlatform -> getJvmClassesByName(name) - else -> emptyList() - } + when (TargetPlatformDetector.getPlatform(expressionForPlatform.containingKtFile)) { + JvmPlatform -> getJvmClassesByName(name) + else -> getKotlinClasses({ it == name }, + // Enum entries should be contributes with members import fix + psiFilter = { ktDeclaration -> ktDeclaration !is KtEnumEntry }, + kindFilter = { kind -> kind != ClassKind.ENUM_ENTRY }) + } private fun CallTypeAndReceiver<*, *>.toFilter() = { descriptor: DeclarationDescriptor -> this.callType.descriptorKindFilter.accepts(descriptor) } \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInCommon/common/a.kt b/idea/testData/multiModuleQuickFix/importClassInCommon/common/a.kt new file mode 100644 index 00000000000..f4c5585faad --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInCommon/common/a.kt @@ -0,0 +1,3 @@ +package foo + +class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInCommon/common/a.kt.after b/idea/testData/multiModuleQuickFix/importClassInCommon/common/a.kt.after new file mode 100644 index 00000000000..f4c5585faad --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInCommon/common/a.kt.after @@ -0,0 +1,3 @@ +package foo + +class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInCommon/common/b.kt b/idea/testData/multiModuleQuickFix/importClassInCommon/common/b.kt new file mode 100644 index 00000000000..881787c3c66 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInCommon/common/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInCommon/common/b.kt.after b/idea/testData/multiModuleQuickFix/importClassInCommon/common/b.kt.after new file mode 100644 index 00000000000..cc669dc919f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInCommon/common/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +import foo.Foo + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common/a.kt b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common/a.kt new file mode 100644 index 00000000000..f4c5585faad --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common/a.kt @@ -0,0 +1,3 @@ +package foo + +class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common/a.kt.after b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common/a.kt.after new file mode 100644 index 00000000000..f4c5585faad --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common/a.kt.after @@ -0,0 +1,3 @@ +package foo + +class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common_test/b.kt b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common_test/b.kt new file mode 100644 index 00000000000..881787c3c66 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common_test/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common_test/b.kt.after b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common_test/b.kt.after new file mode 100644 index 00000000000..cc669dc919f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/a_common_test/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +import foo.Foo + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonClassInJs/common/a.kt b/idea/testData/multiModuleQuickFix/importCommonClassInJs/common/a.kt new file mode 100644 index 00000000000..f4c5585faad --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonClassInJs/common/a.kt @@ -0,0 +1,3 @@ +package foo + +class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonClassInJs/js/b.kt b/idea/testData/multiModuleQuickFix/importCommonClassInJs/js/b.kt new file mode 100644 index 00000000000..881787c3c66 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonClassInJs/js/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonClassInJs/js/b.kt.after b/idea/testData/multiModuleQuickFix/importCommonClassInJs/js/b.kt.after new file mode 100644 index 00000000000..cc669dc919f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonClassInJs/js/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +import foo.Foo + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonClassInJvm/common/a.kt b/idea/testData/multiModuleQuickFix/importCommonClassInJvm/common/a.kt new file mode 100644 index 00000000000..f4c5585faad --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonClassInJvm/common/a.kt @@ -0,0 +1,3 @@ +package foo + +class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonClassInJvm/jvm/b.kt b/idea/testData/multiModuleQuickFix/importCommonClassInJvm/jvm/b.kt new file mode 100644 index 00000000000..881787c3c66 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonClassInJvm/jvm/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonClassInJvm/jvm/b.kt.after b/idea/testData/multiModuleQuickFix/importCommonClassInJvm/jvm/b.kt.after new file mode 100644 index 00000000000..cc669dc919f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonClassInJvm/jvm/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +import foo.Foo + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonFunInJvm/common/a.kt b/idea/testData/multiModuleQuickFix/importCommonFunInJvm/common/a.kt new file mode 100644 index 00000000000..5d6275f6b5d --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonFunInJvm/common/a.kt @@ -0,0 +1,6 @@ + +package foo + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonFunInJvm/jvm/b.kt b/idea/testData/multiModuleQuickFix/importCommonFunInJvm/jvm/b.kt new file mode 100644 index 00000000000..8ec495671c8 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonFunInJvm/jvm/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: foo +package bar + +fun use() { + foo() +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importCommonFunInJvm/jvm/b.kt.after b/idea/testData/multiModuleQuickFix/importCommonFunInJvm/jvm/b.kt.after new file mode 100644 index 00000000000..b05e9d8fa05 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importCommonFunInJvm/jvm/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: foo +package bar + +import foo.foo + +fun use() { + foo() +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/common/a.kt b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/common/a.kt new file mode 100644 index 00000000000..221d39d09fd --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/common/a.kt @@ -0,0 +1,3 @@ +package foo + +expect class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/a_jvm.kt b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/a_jvm.kt new file mode 100644 index 00000000000..e575ce58ccb --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/a_jvm.kt @@ -0,0 +1,3 @@ +package foo + +actual class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/b.kt b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/b.kt new file mode 100644 index 00000000000..881787c3c66 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/b.kt.after b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/b.kt.after new file mode 100644 index 00000000000..cc669dc919f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/jvm/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: Foo +package bar + +import foo.Foo + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/common/a.kt b/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/common/a.kt new file mode 100644 index 00000000000..221d39d09fd --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/common/a.kt @@ -0,0 +1,3 @@ +package foo + +expect class Foo \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/jvm/b.kt b/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/jvm/b.kt new file mode 100644 index 00000000000..79522e0538f --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/jvm/b.kt @@ -0,0 +1,13 @@ +// "Import" "false" +// ACTION: Create annotation 'Foo' +// ACTION: Create class 'Foo' +// ACTION: Create enum 'Foo' +// ACTION: Create interface 'Foo' +// ACTION: Create type alias 'Foo' +// ACTION: Create type parameter 'Foo' in function 'use' +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/jvm/b.kt.after b/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/jvm/b.kt.after new file mode 100644 index 00000000000..1f53cb5b763 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/jvm/b.kt.after @@ -0,0 +1,13 @@ +// "Import" "false" +// ACTION: Create annotation 'Foo' +// ACTION: Create class 'Foo' +// ACTION: Create enum 'Foo' +// ACTION: Create interface 'Foo' +// ACTION: Create type alias 'Foo' +// ACTION: Create type parameter 'Foo' in function 'use' +// ERROR: Unresolved reference: Foo +package bar + +fun use(f: Foo) { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importFunInCommon/common/a.kt b/idea/testData/multiModuleQuickFix/importFunInCommon/common/a.kt new file mode 100644 index 00000000000..5d6275f6b5d --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importFunInCommon/common/a.kt @@ -0,0 +1,6 @@ + +package foo + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importFunInCommon/common/b.kt b/idea/testData/multiModuleQuickFix/importFunInCommon/common/b.kt new file mode 100644 index 00000000000..8ec495671c8 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importFunInCommon/common/b.kt @@ -0,0 +1,7 @@ +// "Import" "true" +// ERROR: Unresolved reference: foo +package bar + +fun use() { + foo() +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/importFunInCommon/common/b.kt.after b/idea/testData/multiModuleQuickFix/importFunInCommon/common/b.kt.after new file mode 100644 index 00000000000..b05e9d8fa05 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/importFunInCommon/common/b.kt.after @@ -0,0 +1,9 @@ +// "Import" "true" +// ERROR: Unresolved reference: foo +package bar + +import foo.foo + +fun use() { + foo() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index 0c75b29a978..65056bfd104 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -184,6 +184,46 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul runTest("idea/testData/multiModuleQuickFix/implementMembersInImplClassNonImplInheritor/"); } + @TestMetadata("importClassInCommon") + public void testImportClassInCommon() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importClassInCommon/"); + } + + @TestMetadata("importClassInFromProductionInCommonTests") + public void testImportClassInFromProductionInCommonTests() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importClassInFromProductionInCommonTests/"); + } + + @TestMetadata("importCommonClassInJs") + public void testImportCommonClassInJs() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importCommonClassInJs/"); + } + + @TestMetadata("importCommonClassInJvm") + public void testImportCommonClassInJvm() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importCommonClassInJvm/"); + } + + @TestMetadata("importCommonFunInJvm") + public void testImportCommonFunInJvm() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importCommonFunInJvm/"); + } + + @TestMetadata("importExpectClassWithActualInJvm") + public void testImportExpectClassWithActualInJvm() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importExpectClassWithActualInJvm/"); + } + + @TestMetadata("importExpectClassWithoutActualInJvm") + public void testImportExpectClassWithoutActualInJvm() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importExpectClassWithoutActualInJvm/"); + } + + @TestMetadata("importFunInCommon") + public void testImportFunInCommon() throws Exception { + runTest("idea/testData/multiModuleQuickFix/importFunInCommon/"); + } + @TestMetadata("interface") public void testInterface() throws Exception { runTest("idea/testData/multiModuleQuickFix/interface/");