diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt index d8e04c8a1bf..4604b51aabe 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt @@ -22,6 +22,8 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod import com.intellij.psi.PsiReference import com.intellij.psi.search.SearchScope +import com.intellij.psi.search.searches.MethodReferencesSearch +import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.psi.util.MethodSignatureUtil import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -250,3 +252,13 @@ fun PsiReference.isCallableOverrideUsage(declaration: KtNamedDeclaration): Boole } } } + +fun PsiElement.searchReferencesOrMethodReferences(): Collection { + val lightMethods = toLightMethods() + return if (lightMethods.isNotEmpty()) { + lightMethods.flatMapTo(LinkedHashSet()) { MethodReferencesSearch.search(it) } + } + else { + ReferencesSearch.search(this).findAll() + } +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeParameterToReceiverIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeParameterToReceiverIntention.kt index aa47bb3beb9..b86e9a71d70 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeParameterToReceiverIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeParameterToReceiverIntention.kt @@ -23,11 +23,9 @@ import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiElement import com.intellij.psi.PsiNamedElement import com.intellij.psi.search.LocalSearchScope -import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.refactoring.util.RefactoringUIUtil import com.intellij.util.containers.MultiMap -import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -41,6 +39,7 @@ import org.jetbrains.kotlin.idea.refactoring.introduce.introduceVariable.KotlinI import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.references.KtSimpleReference import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress +import org.jetbrains.kotlin.idea.search.usagesSearch.searchReferencesOrMethodReferences import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.* @@ -196,8 +195,7 @@ class ConvertFunctionTypeParameterToReceiverIntention : SelfTargetingRangeIntent conflicts.putValue(callable, "Can't modify $renderedCallable") } - val references = callable.toLightMethods().flatMapTo(LinkedHashSet()) { MethodReferencesSearch.search(it) } - usageLoop@ for (ref in references) { + usageLoop@ for (ref in callable.searchReferencesOrMethodReferences()) { val refElement = ref.element ?: continue when (ref) { is KtSimpleReference<*> -> processExternalUsage(conflicts, refElement, usages) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeReceiverToParameterIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeReceiverToParameterIntention.kt index 78ba9286b31..ef284092a3c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeReceiverToParameterIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionTypeReceiverToParameterIntention.kt @@ -21,11 +21,9 @@ import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import com.intellij.psi.search.LocalSearchScope -import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.refactoring.util.RefactoringUIUtil import com.intellij.util.containers.MultiMap -import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -38,6 +36,7 @@ import org.jetbrains.kotlin.idea.refactoring.checkConflictsInteractively import org.jetbrains.kotlin.idea.refactoring.getAffectedCallables import org.jetbrains.kotlin.idea.references.KtSimpleReference import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress +import org.jetbrains.kotlin.idea.search.usagesSearch.searchReferencesOrMethodReferences import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.* @@ -135,8 +134,7 @@ class ConvertFunctionTypeReceiverToParameterIntention : SelfTargetingRangeIntent conflicts.putValue(callable, "Can't modify $renderedCallable") } - val references = callable.toLightMethods().flatMapTo(LinkedHashSet()) { MethodReferencesSearch.search(it) } - for (ref in references) { + for (ref in callable.searchReferencesOrMethodReferences()) { if (ref !is KtSimpleReference<*>) continue processExternalUsage(ref, usages) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt index efa2f406d3b..7a5b7c0f052 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt @@ -35,8 +35,12 @@ import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations +import org.jetbrains.kotlin.idea.highlighter.markers.headerImplementations +import org.jetbrains.kotlin.idea.highlighter.markers.isHeaderOrHeaderClassMember +import org.jetbrains.kotlin.idea.highlighter.markers.liftToHeader import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.psi.KtBlockExpression +import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclarationWithBody import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.renderer.DescriptorRenderer @@ -48,10 +52,13 @@ import java.util.* abstract class CallableRefactoring( val project: Project, - val callableDescriptor: T, + callableDescriptor: T, val commandName: String) { private val LOG = Logger.getInstance(CallableRefactoring::class.java) + @Suppress("UNCHECKED_CAST") + val callableDescriptor = callableDescriptor.liftToHeader() as? T ?: callableDescriptor + private val kind = (callableDescriptor as? CallableMemberDescriptor)?.kind ?: CallableMemberDescriptor.Kind.DECLARATION protected open fun forcePerformForSelectedFunctionOnly(): Boolean { @@ -69,7 +76,7 @@ abstract class CallableRefactoring( else -> { throw IllegalStateException("Unexpected callable kind: $kind") } - } + }.map { it.liftToHeader() as? CallableDescriptor ?: it } } private fun showSuperFunctionWarningDialog(superCallables: Collection, @@ -176,9 +183,16 @@ abstract class CallableRefactoring( fun getAffectedCallables(project: Project, descriptorsForChange: Collection): List { val baseCallables = descriptorsForChange.mapNotNull { DescriptorToSourceUtilsIde.getAnyDeclaration(project, it) } - return baseCallables + baseCallables.flatMap { it.toLightMethods() }.flatMapTo(HashSet()) { psiMethod -> - val overrides = OverridingMethodsSearch.search(psiMethod).findAll() - overrides.map { method -> method.namedUnwrappedElement ?: method} + return baseCallables + baseCallables.flatMapTo(HashSet()) { callable -> + if (callable is KtDeclaration && callable.isHeaderOrHeaderClassMember()) { + callable.headerImplementations() + } + else { + callable.toLightMethods().flatMap { psiMethod -> + val overrides = OverridingMethodsSearch.search(psiMethod).findAll() + overrides.map { method -> method.namedUnwrappedElement ?: method} + } + } } } diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/header/header.kt b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/header/header.kt new file mode 100644 index 00000000000..11e032bb02a --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/header/header.kt @@ -0,0 +1,7 @@ +// "Convert '(Int) -> Int' to 'Int.() -> Int'" "true" + +header fun foo(n: Int, action: (Int) -> Int): Int + +fun test() { + foo(1) { n -> n + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/header/header.kt.after b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/header/header.kt.after new file mode 100644 index 00000000000..a00a246df50 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/header/header.kt.after @@ -0,0 +1,7 @@ +// "Convert '(Int) -> Int' to 'Int.() -> Int'" "true" + +header fun foo(n: Int, action: Int.() -> Int): Int + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/js/js.kt b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/js/js.kt new file mode 100644 index 00000000000..47857ab298c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/js/js.kt @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { n -> n + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/js/js.kt.after b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/js/js.kt.after new file mode 100644 index 00000000000..9cf704976f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/js/js.kt.after @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/jvm/jvm.kt b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/jvm/jvm.kt new file mode 100644 index 00000000000..47857ab298c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/jvm/jvm.kt @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { n -> n + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/jvm/jvm.kt.after b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/jvm/jvm.kt.after new file mode 100644 index 00000000000..9cf704976f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByHeader/jvm/jvm.kt.after @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/header/header.kt b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/header/header.kt new file mode 100644 index 00000000000..47a36f17936 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/header/header.kt @@ -0,0 +1,5 @@ +header fun foo(n: Int, action: (Int) -> Int): Int + +fun test() { + foo(1) { n -> n + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/header/header.kt.after b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/header/header.kt.after new file mode 100644 index 00000000000..519282f5ada --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/header/header.kt.after @@ -0,0 +1,5 @@ +header fun foo(n: Int, action: Int.() -> Int): Int + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/js/js.kt b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/js/js.kt new file mode 100644 index 00000000000..2b937787c21 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/js/js.kt @@ -0,0 +1,7 @@ +// "Convert '(Int) -> Int' to 'Int.() -> Int'" "true" + +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { n -> n + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/js/js.kt.after b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/js/js.kt.after new file mode 100644 index 00000000000..c811262d93e --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/js/js.kt.after @@ -0,0 +1,7 @@ +// "Convert '(Int) -> Int' to 'Int.() -> Int'" "true" + +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/jvm/jvm.kt b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/jvm/jvm.kt new file mode 100644 index 00000000000..47857ab298c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/jvm/jvm.kt @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { n -> n + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/jvm/jvm.kt.after b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/jvm/jvm.kt.after new file mode 100644 index 00000000000..9cf704976f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeParameterToReceiverByImpl/jvm/jvm.kt.after @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/header/header.kt b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/header/header.kt new file mode 100644 index 00000000000..f54ab8e416e --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/header/header.kt @@ -0,0 +1,7 @@ +// "Convert 'Int.() -> Int' to '(Int) -> Int'" "true" + +header fun foo(n: Int, action: Int.() -> Int): Int + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/header/header.kt.after b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/header/header.kt.after new file mode 100644 index 00000000000..980f5d9bcb5 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/header/header.kt.after @@ -0,0 +1,7 @@ +// "Convert 'Int.() -> Int' to '(Int) -> Int'" "true" + +header fun foo(n: Int, action: (Int) -> Int): Int + +fun test() { + foo(1) { i -> i + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/js/js.kt b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/js/js.kt new file mode 100644 index 00000000000..9cf704976f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/js/js.kt @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/js/js.kt.after b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/js/js.kt.after new file mode 100644 index 00000000000..54d08c38b0c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/js/js.kt.after @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { i -> i + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/jvm/jvm.kt b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/jvm/jvm.kt new file mode 100644 index 00000000000..9cf704976f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/jvm/jvm.kt @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/jvm/jvm.kt.after b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/jvm/jvm.kt.after new file mode 100644 index 00000000000..54d08c38b0c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByHeader/jvm/jvm.kt.after @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { i -> i + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/header/header.kt b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/header/header.kt new file mode 100644 index 00000000000..519282f5ada --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/header/header.kt @@ -0,0 +1,5 @@ +header fun foo(n: Int, action: Int.() -> Int): Int + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/header/header.kt.after b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/header/header.kt.after new file mode 100644 index 00000000000..f000f129060 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/header/header.kt.after @@ -0,0 +1,5 @@ +header fun foo(n: Int, action: (Int) -> Int): Int + +fun test() { + foo(1) { i -> i + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/js/js.kt b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/js/js.kt new file mode 100644 index 00000000000..5cca93a45ac --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/js/js.kt @@ -0,0 +1,7 @@ +// "Convert 'Int.() -> Int' to '(Int) -> Int'" "true" + +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/js/js.kt.after b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/js/js.kt.after new file mode 100644 index 00000000000..06e03bacf76 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/js/js.kt.after @@ -0,0 +1,7 @@ +// "Convert 'Int.() -> Int' to '(Int) -> Int'" "true" + +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { i -> i + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/jvm/jvm.kt b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/jvm/jvm.kt new file mode 100644 index 00000000000..9cf704976f4 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/jvm/jvm.kt @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: Int.() -> Int) = n.action() + +fun test() { + foo(1) { this + 1 } +} \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/jvm/jvm.kt.after b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/jvm/jvm.kt.after new file mode 100644 index 00000000000..54d08c38b0c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/functionTypeReceiverToParameterByImpl/jvm/jvm.kt.after @@ -0,0 +1,5 @@ +impl fun foo(n: Int, action: (Int) -> Int) = action(n) + +fun test() { + foo(1) { i -> i + 1 } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt index 93186790190..92167091cc8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt @@ -141,4 +141,16 @@ class QuickFixMultiModuleTest : AbstractQuickFixMultiModuleTest() { @Test fun testMemberFunParameterToReceiverByImpl() = doTestHeaderWithJvmAndJs() + + @Test + fun testFunctionTypeParameterToReceiverByHeader() = doTestHeaderWithJvmAndJs() + + @Test + fun testFunctionTypeParameterToReceiverByImpl() = doTestHeaderWithJvmAndJs() + + @Test + fun testFunctionTypeReceiverToParameterByHeader() = doTestHeaderWithJvmAndJs() + + @Test + fun testFunctionTypeReceiverToParameterByImpl() = doTestHeaderWithJvmAndJs() } \ No newline at end of file