[Invariant fix] Fix false positive internal visibility diagnostic

Effectively, this commit allows for common module
to see internal content of all expect-modules

The problem is that when computing the member scope for A (see the test)
we're building a special member scope for CommonAbstract viewed from JVM
and it's effectively has a fake override of actual member from Jvm/ExpectBase.

OverridingUtil checks if it's visible in CommonAbstract and finds that it's not
thus creating a fake_invisible fake override

The latter results in A::foo override being marked as INVISIBLE_MEMBER_OVERRIDE

Probably, the fix might be smarter
(passing a requested module to OverridingUtil::createAndBindFakeOverride)
but allowing using internal member seems to be safe & simple
because it's reasonable to assume there's no cyclic dependencies
between expected/actual modules
This commit is contained in:
Denis Zharkov
2019-05-20 18:22:31 +03:00
committed by Dmitry Savvinov
parent d20516779a
commit d744192e6f
4 changed files with 31 additions and 1 deletions
@@ -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
@@ -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()
@@ -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?)
}
@@ -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/");