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");