JS: support internal visibility from friend modules
Friend modules should be provided using the -Xfriend-modules flag in the same format as -libraries. No manual configuration required for JPS, Gradle and Maven plugins. Friend modules could be switched off using the -Xfriend-modules-disabled flag. Doing that will * prevent internal declarations from being exported, * values provided by -Xfriend-modules ignored, * raise a compilation error on attemps to use internal declarations from other modules Fixes #KT-15135 and #KT-16568.
This commit is contained in:
+4
-2
@@ -1,6 +1,8 @@
|
||||
Usage: kotlinc-js <options> <source files>
|
||||
where advanced options include:
|
||||
-Xtypedarrays Translate primitive arrays to JS typed arrays
|
||||
-Xtyped-arrays Translate primitive arrays to JS typed arrays
|
||||
-Xfriend-modules-disabled Disable internal declaration export
|
||||
-Xfriend-modules=<path> Paths to friend modules
|
||||
-Xno-inline Disable method inlining
|
||||
-Xrepeat=<count> Repeat compilation (for performance analysis)
|
||||
-Xskip-metadata-version-check Load classes with bad metadata version anyway (incl. pre-release classes)
|
||||
@@ -14,4 +16,4 @@ where advanced options include:
|
||||
Enable coroutines or report warnings or errors on declarations and use sites of 'suspend' modifier
|
||||
|
||||
Advanced options are non-standard and may be changed or removed without any notice.
|
||||
OK
|
||||
OK
|
||||
@@ -0,0 +1,37 @@
|
||||
// MODULE: lib
|
||||
// FILE: lib.kt
|
||||
|
||||
package lib
|
||||
|
||||
internal fun foo() = 1
|
||||
|
||||
internal val bar = 2
|
||||
|
||||
internal class A {
|
||||
internal fun baz(a: Int): Int {
|
||||
return a * 10
|
||||
}
|
||||
|
||||
internal val foo = 3
|
||||
|
||||
internal inner class B {
|
||||
internal fun foo() = 4
|
||||
}
|
||||
}
|
||||
|
||||
// MODULE: main(lib)(lib)
|
||||
// FILE: main.kt
|
||||
|
||||
package main
|
||||
|
||||
import lib.*
|
||||
|
||||
fun box(): String {
|
||||
if (foo() != 1) return "fail 1: ${foo()}"
|
||||
if (bar != 2) return "fail 2: ${bar}"
|
||||
val a = A()
|
||||
if (a.baz(10) != 100) return "fail 3: ${a.baz(10)}"
|
||||
if (a.foo != 3) return "fail 4: ${a.foo}"
|
||||
if (a.B().foo() != 4) return "fail 5: ${a.B().foo()}"
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user