diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/declarationsSearch/overridersSearch.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/declarationsSearch/overridersSearch.kt index c2d963b7cf8..1e9c77d3fee 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/declarationsSearch/overridersSearch.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/declarationsSearch/overridersSearch.kt @@ -30,16 +30,21 @@ import com.intellij.util.Processor import com.intellij.util.Query import org.jetbrains.kotlin.asJava.classes.KtLightClass import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.asJava.getRepresentativeLightMethod import org.jetbrains.kotlin.asJava.toLightMethods +import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.isOverridable +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor +import org.jetbrains.kotlin.idea.core.getDeepestSuperDeclarations import org.jetbrains.kotlin.idea.core.isOverridable import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.search.excludeKotlinSources import org.jetbrains.kotlin.idea.search.restrictToKotlinSources import org.jetbrains.kotlin.idea.util.application.runReadAction +import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -163,4 +168,16 @@ fun PsiClass.forEachDeclaredMemberOverride(processor: (superMember: PsiElement, val members = ktClass.declarations.filterIsInstance() + ktClass.primaryConstructorParameters.filter { it.hasValOrVar() } forEachKotlinOverride(ktClass, members, scope, processor) +} + +fun findDeepestSuperMethodsKotlinAware(method: PsiElement): List { + val element = method.unwrapped + return when (element) { + is PsiMethod -> element.findDeepestSuperMethods().toList() + is KtCallableDeclaration -> { + val descriptor = element.resolveToDescriptorIfAny() as? CallableMemberDescriptor ?: return emptyList() + descriptor.getDeepestSuperDeclarations(false).mapNotNull { it.source.getPsi()?.getRepresentativeLightMethod() } + } + else -> emptyList() + } } \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt index 2aa4f7b0d5b..a9819ae3e08 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt @@ -149,9 +149,9 @@ fun D.getDirectlyOverriddenDeclarations(): Collec return OverridingUtil.filterOutOverridden(result) } -fun D.getDeepestSuperDeclarations(): Collection { +fun D.getDeepestSuperDeclarations(withThis: Boolean = true): Collection { val overriddenDeclarations = DescriptorUtils.getAllOverriddenDeclarations(this) - if (overriddenDeclarations.isEmpty()) { + if (overriddenDeclarations.isEmpty() && withThis) { return setOf(this) } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt index 3dd5500005c..7d38a39b18c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/CallableRefactoring.kt @@ -149,7 +149,7 @@ abstract class CallableRefactoring( assert(!closestModifiableDescriptors.isEmpty()) { "Should contain original declaration or some of its super declarations" } val deepestSuperDeclarations = - (callableDescriptor as? CallableMemberDescriptor)?.let(CallableMemberDescriptor::getDeepestSuperDeclarations) + (callableDescriptor as? CallableMemberDescriptor)?.getDeepestSuperDeclarations() ?: listOf(callableDescriptor) if (ApplicationManager.getApplication()!!.isUnitTestMode) { performRefactoring(deepestSuperDeclarations) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt index b8ac8a40cd2..9462e21ecee 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.idea.refactoring.rename import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.openapi.util.Pass -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiMethod -import com.intellij.psi.PsiNamedElement -import com.intellij.psi.PsiReference +import com.intellij.psi.* import com.intellij.psi.search.SearchScope import com.intellij.refactoring.JavaRefactoringSettings import com.intellij.refactoring.listeners.RefactoringElementListener @@ -30,6 +27,7 @@ import com.intellij.refactoring.rename.RenameDialog import com.intellij.refactoring.rename.RenameJavaMethodProcessor import com.intellij.refactoring.rename.RenameProcessor import com.intellij.refactoring.rename.RenameUtil +import com.intellij.refactoring.util.RefactoringUtil import com.intellij.usageView.UsageInfo import com.intellij.util.SmartList import org.jetbrains.kotlin.asJava.LightClassUtil @@ -45,6 +43,8 @@ import org.jetbrains.kotlin.idea.refactoring.checkSuperMethods import org.jetbrains.kotlin.idea.refactoring.checkSuperMethodsWithPopup import org.jetbrains.kotlin.idea.refactoring.dropOverrideKeywordIfNecessary import org.jetbrains.kotlin.idea.references.KtReference +import org.jetbrains.kotlin.idea.search.declarationsSearch.findDeepestSuperMethodsKotlinAware +import org.jetbrains.kotlin.idea.search.declarationsSearch.forEachOverridingMethod import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -115,7 +115,7 @@ class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() { val wrappedMethod = wrapPsiMethod(element) ?: return element - val deepestSuperMethods = wrappedMethod.findDeepestSuperMethods() + val deepestSuperMethods = findDeepestSuperMethodsKotlinAware(wrappedMethod) val substitutedJavaElement = when { deepestSuperMethods.isEmpty() -> return element wrappedMethod.isConstructor || deepestSuperMethods.size == 1 || element !is KtNamedFunction -> { @@ -149,7 +149,7 @@ class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() { val wrappedMethod = wrapPsiMethod(element) ?: return - val deepestSuperMethods = wrappedMethod.findDeepestSuperMethods() + val deepestSuperMethods = findDeepestSuperMethodsKotlinAware(wrappedMethod) when { deepestSuperMethods.isEmpty() -> preprocessAndPass(element) wrappedMethod.isConstructor || element !is KtNamedFunction -> { @@ -186,6 +186,20 @@ class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() { val psiMethod = wrapPsiMethod(declaration) ?: continue allRenames[declaration] = newName if (psiMethod.containingClass != null) { + psiMethod.forEachOverridingMethod { it -> + val overrider = (it as? PsiMirrorElement)?.prototype as? PsiMethod ?: it + + if (overrider is SyntheticElement) return@forEachOverridingMethod true + + val overriderName = overrider.name + val baseName = psiMethod.name + val newOverriderName = RefactoringUtil.suggestNewOverriderName(overriderName, baseName, newName) + if (newOverriderName != null) { + RenameProcessor.assertNonCompileElement(overrider) + allRenames.put(overrider, newOverriderName) + } + return@forEachOverridingMethod true + } javaMethodProcessorInstance.prepareRenaming(psiMethod, newName, allRenames, scope) } } diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/Common/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/Common/src/test/test.kt new file mode 100644 index 00000000000..b001860a782 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/Common/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +interface I { + suspend fun bar(s: String) +} + +fun test(i: I) { + i.bar("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JS/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JS/src/test/test.kt new file mode 100644 index 00000000000..8dab04ac843 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JS/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun bar(s: String) { } +} + +fun test(c: C) { + c.bar("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JVM/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JVM/src/test/test.kt new file mode 100644 index 00000000000..8dab04ac843 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/after/JVM/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun bar(s: String) { } +} + +fun test(c: C) { + c.bar("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/Common/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/Common/src/test/test.kt new file mode 100644 index 00000000000..8f9e0dd82d3 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/Common/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +interface I { + suspend fun foo(s: String) +} + +fun test(i: I) { + i.foo("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JS/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JS/src/test/test.kt new file mode 100644 index 00000000000..8473feec06e --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JS/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun /*rename*/foo(s: String) { } +} + +fun test(c: C) { + c.foo("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JVM/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JVM/src/test/test.kt new file mode 100644 index 00000000000..27841051b2d --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/before/JVM/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun foo(s: String) { } +} + +fun test(c: C) { + c.foo("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/suspendFunImplInImplModule.test b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/suspendFunImplInImplModule.test new file mode 100644 index 00000000000..8ea37befa22 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/suspendFunImplInImplModule.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "file": "JS/src/test/test.kt", + "newName": "bar", + "isMultiModule": "true" +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/Common/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/Common/src/test/test.kt new file mode 100644 index 00000000000..b001860a782 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/Common/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +interface I { + suspend fun bar(s: String) +} + +fun test(i: I) { + i.bar("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JS/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JS/src/test/test.kt new file mode 100644 index 00000000000..8dab04ac843 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JS/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun bar(s: String) { } +} + +fun test(c: C) { + c.bar("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JVM/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JVM/src/test/test.kt new file mode 100644 index 00000000000..8dab04ac843 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/after/JVM/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun bar(s: String) { } +} + +fun test(c: C) { + c.bar("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/Common/Common.iml b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/Common/Common.iml new file mode 100644 index 00000000000..0ecf9949f6c --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/Common/Common.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/Common/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/Common/src/test/test.kt new file mode 100644 index 00000000000..4aa66e1de88 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/Common/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +interface I { + suspend fun /*rename*/foo(s: String) +} + +fun test(i: I) { + i.foo("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JS/JS.iml b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JS/JS.iml new file mode 100644 index 00000000000..3de270f43fa --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JS/JS.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JS/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JS/src/test/test.kt new file mode 100644 index 00000000000..27841051b2d --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JS/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun foo(s: String) { } +} + +fun test(c: C) { + c.foo("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JVM/JVM.iml b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JVM/JVM.iml new file mode 100644 index 00000000000..76d2b885834 --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JVM/JVM.iml @@ -0,0 +1,21 @@ + + + + + + Common + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JVM/src/test/test.kt b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JVM/src/test/test.kt new file mode 100644 index 00000000000..27841051b2d --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/before/JVM/src/test/test.kt @@ -0,0 +1,9 @@ +package test + +class C : I { + override suspend fun foo(s: String) { } +} + +fun test(c: C) { + c.foo("test") +} \ No newline at end of file diff --git a/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/suspendFunInCommonModule.test b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/suspendFunInCommonModule.test new file mode 100644 index 00000000000..15346e8d47d --- /dev/null +++ b/idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/suspendFunInCommonModule.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "file": "Common/src/test/test.kt", + "newName": "bar", + "isMultiModule": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java index 8c3923c83e6..8d070b28641 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/MultiModuleRenameTestGenerated.java @@ -149,4 +149,16 @@ public class MultiModuleRenameTestGenerated extends AbstractMultiModuleRenameTes String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/renameMultiModule/headersAndImplsByImplVal/headersAndImplsByImplVal.test"); doTest(fileName); } + + @TestMetadata("suspendFunImplInImplModule/suspendFunImplInImplModule.test") + public void testSuspendFunImplInImplModule_SuspendFunImplInImplModule() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/renameMultiModule/suspendFunImplInImplModule/suspendFunImplInImplModule.test"); + doTest(fileName); + } + + @TestMetadata("suspendFunInCommonModule/suspendFunInCommonModule.test") + public void testSuspendFunInCommonModule_SuspendFunInCommonModule() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/renameMultiModule/suspendFunInCommonModule/suspendFunInCommonModule.test"); + doTest(fileName); + } }