diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index eeb0417c907..3155e0fe142 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -125,7 +125,12 @@ class ModuleDescriptorImpl @JvmOverloads constructor( } override fun shouldSeeInternalsOf(targetModule: ModuleDescriptor): Boolean { - return this == targetModule || targetModule in dependencies!!.modulesWhoseInternalsAreVisible || targetModule in expectedByModules + if (this == targetModule) return true + if (targetModule in dependencies!!.modulesWhoseInternalsAreVisible) return true + if (targetModule in expectedByModules) return true + if (this in targetModule.expectedByModules) return true + + return false } private val id: String diff --git a/idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/a_common_dep(stdlib)/common.kt b/idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/a_common_dep(stdlib)/common.kt new file mode 100644 index 00000000000..db6c9aa0d2c --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/a_common_dep(stdlib)/common.kt @@ -0,0 +1,11 @@ +package foo + +internal expect abstract class ExpectBase() { + abstract fun foo(cause: Throwable?) +} + +interface I { + fun foo(cause: Throwable?) +} + +internal abstract class CommonAbstract : ExpectBase() diff --git a/idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/a_jvm_dep(stdlib)/jvm.kt b/idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/a_jvm_dep(stdlib)/jvm.kt new file mode 100644 index 00000000000..3618885d72b --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/a_jvm_dep(stdlib)/jvm.kt @@ -0,0 +1,9 @@ +package foo + +private class A : CommonAbstract() { + override fun foo(cause: Throwable?) {} +} + +internal actual abstract class ExpectBase actual constructor() : I { + actual abstract override fun foo(cause: Throwable?) +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java index c847c6312cb..e2f3802ca87 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiPlatformHighlightingTestGenerated.java @@ -104,6 +104,11 @@ public class MultiPlatformHighlightingTestGenerated extends AbstractMultiPlatfor runTest("idea/testData/multiModuleHighlighting/multiplatform/internalDependencyFromTests/"); } + @TestMetadata("internalInheritanceToCommon") + public void testInternalInheritanceToCommon() throws Exception { + runTest("idea/testData/multiModuleHighlighting/multiplatform/internalInheritanceToCommon/"); + } + @TestMetadata("javaUsesPlatformFacade") public void testJavaUsesPlatformFacade() throws Exception { runTest("idea/testData/multiModuleHighlighting/multiplatform/javaUsesPlatformFacade/");