diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt index 010e96af435..3bf2cdb6b70 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt @@ -444,6 +444,16 @@ internal class InvokeImportFix(expression: KtExpression) : OrdinaryImportFixBase } } +internal class IteratorImportFix(expression: KtExpression) : OrdinaryImportFixBase(expression, MyFactory) { + override val importNames = listOf(OperatorNameConventions.ITERATOR) + + override fun getCallTypeAndReceiver() = element?.let { CallTypeAndReceiver.OPERATOR(it) } + + companion object MyFactory : Factory() { + override fun createImportAction(diagnostic: Diagnostic) = (diagnostic.psiElement as? KtExpression)?.let(::IteratorImportFix) + } +} + internal open class ArrayAccessorImportFix( element: KtArrayAccessExpression, override val importNames: Collection, diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 6637eba9740..bcf3eaf6875 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -171,6 +171,8 @@ class QuickFixRegistrar : QuickFixContributor { FUNCTION_EXPECTED.registerFactory(InvokeImportFix) + ITERATOR_MISSING.registerFactory(IteratorImportFix) + DELEGATE_SPECIAL_FUNCTION_MISSING.registerFactory(DelegateAccessorsImportFix) COMPONENT_FUNCTION_MISSING.registerFactory(ComponentsImportFix, AddDataModifierFix) diff --git a/idea/testData/quickfix/autoImports/iteratorOperator.after.kt b/idea/testData/quickfix/autoImports/iteratorOperator.after.kt new file mode 100644 index 00000000000..32f45647235 --- /dev/null +++ b/idea/testData/quickfix/autoImports/iteratorOperator.after.kt @@ -0,0 +1,12 @@ +// "Import" "true" +// ERROR: For-loop range must have an 'iterator()' method +// WITH_RUNTIME + +package bar + +import foo.Foo +import foo.iterator + +fun foo(start: Foo, end: Foo) { + for (date in start..end) {} +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/iteratorOperator.before.Dependency.kt b/idea/testData/quickfix/autoImports/iteratorOperator.before.Dependency.kt new file mode 100644 index 00000000000..d5f5315816b --- /dev/null +++ b/idea/testData/quickfix/autoImports/iteratorOperator.before.Dependency.kt @@ -0,0 +1,7 @@ +package foo + +class Foo : Comparable { + override fun compareTo(other: Foo): Int = TODO() +} + +operator fun ClosedRange.iterator(): Iterator = TODO() \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/iteratorOperator.before.Main.kt b/idea/testData/quickfix/autoImports/iteratorOperator.before.Main.kt new file mode 100644 index 00000000000..9811f65d504 --- /dev/null +++ b/idea/testData/quickfix/autoImports/iteratorOperator.before.Main.kt @@ -0,0 +1,11 @@ +// "Import" "true" +// ERROR: For-loop range must have an 'iterator()' method +// WITH_RUNTIME + +package bar + +import foo.Foo + +fun foo(start: Foo, end: Foo) { + for (date in start..end) {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index 2145ee4ee19..5e857ed9a7e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -790,6 +790,11 @@ public class QuickFixMultiFileTestGenerated extends AbstractQuickFixMultiFileTes runTest("idea/testData/quickfix/autoImports/invokeExtensionNoOperator.test"); } + @TestMetadata("iteratorOperator.before.Main.kt") + public void testIteratorOperator() throws Exception { + runTest("idea/testData/quickfix/autoImports/iteratorOperator.before.Main.kt"); + } + @TestMetadata("memberImportFunction.test") public void testMemberImportFunction() throws Exception { runTest("idea/testData/quickfix/autoImports/memberImportFunction.test");