diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt index dbd5ffa11e9..66e27c4ee0b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.MutablePackageFragmentDescriptor import org.jetbrains.kotlin.idea.caches.project.getModuleInfoByVirtualFile import org.jetbrains.kotlin.idea.caches.project.forcedModuleInfo +import org.jetbrains.kotlin.idea.caches.project.implementedModules import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.caches.resolve.util.getJavaMemberDescriptor import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde @@ -483,8 +484,8 @@ class MoveConflictChecker( for (memberToCheck in membersToCheck) { for (reference in ReferencesSearch.search(memberToCheck)) { val element = reference.element ?: continue - val usageModule = ModuleUtilCore.findModuleForPsiElement(element) - if (usageModule != targetModule && !isToBeMoved(element)) { + val usageModule = ModuleUtilCore.findModuleForPsiElement(element) ?: continue + if (usageModule != targetModule && targetModule !in usageModule.implementedModules && !isToBeMoved(element)) { val container = element.getUsageContext() val message = "${render(container)} uses internal ${render(memberToCheck)} which will be inaccessible after move" conflicts.putValue(element, message.capitalize()) diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/A.iml b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/A.iml new file mode 100644 index 00000000000..341197fc9b5 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/A.iml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/src/Foo.kt b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/src/Foo.kt new file mode 100644 index 00000000000..a348ad9602d --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/src/Foo.kt @@ -0,0 +1,3 @@ +open class Foo { + internal fun bar() = "" +} \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/src/dummy.txt b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/A/src/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/B/B.iml b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/B/B.iml new file mode 100644 index 00000000000..d2add8adf60 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/B/B.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + A + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/B/src/test.kt b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/B/src/test.kt new file mode 100644 index 00000000000..9156bb2266e --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/after/B/src/test.kt @@ -0,0 +1,3 @@ +class Bar : Foo() { + val x = bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/A/A.iml b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/A/A.iml new file mode 100644 index 00000000000..341197fc9b5 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/A/A.iml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/A/src/dummy.txt b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/A/src/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/B/B.iml b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/B/B.iml new file mode 100644 index 00000000000..d2add8adf60 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/B/B.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + A + + + + + + + \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/B/src/test.kt b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/B/src/test.kt new file mode 100644 index 00000000000..04aeea370e2 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/before/B/src/test.kt @@ -0,0 +1,7 @@ +open class Foo { + internal fun bar() = "" +} + +class Bar : Foo() { + val x = bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/moveClassWithInternalMemberFromJvmToCommon.test b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/moveClassWithInternalMemberFromJvmToCommon.test new file mode 100644 index 00000000000..46b0536d8e0 --- /dev/null +++ b/idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/moveClassWithInternalMemberFromJvmToCommon.test @@ -0,0 +1,7 @@ +{ + "mainFile": "B/src/test.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "", + "targetSourceRoot": "A/src", + "withRuntime": "true" +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java index aa73487620c..e31f1a8d199 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MultiModuleMoveTestGenerated.java @@ -29,6 +29,11 @@ public class MultiModuleMoveTestGenerated extends AbstractMultiModuleMoveTest { KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/refactoring/moveMultiModule"), Pattern.compile("^(.+)\\.test$"), TargetBackend.ANY); } + @TestMetadata("moveClassWithInternalMemberFromJvmToCommon/moveClassWithInternalMemberFromJvmToCommon.test") + public void testMoveClassWithInternalMemberFromJvmToCommon_MoveClassWithInternalMemberFromJvmToCommon() throws Exception { + runTest("idea/testData/refactoring/moveMultiModule/moveClassWithInternalMemberFromJvmToCommon/moveClassWithInternalMemberFromJvmToCommon.test"); + } + @TestMetadata("moveDirectoryKeepPackageDirective/moveDirectoryKeepPackageDirective.test") public void testMoveDirectoryKeepPackageDirective_MoveDirectoryKeepPackageDirective() throws Exception { runTest("idea/testData/refactoring/moveMultiModule/moveDirectoryKeepPackageDirective/moveDirectoryKeepPackageDirective.test");