Make stdlib work with -Xmultifile-package-facades.

Fixed wrong owner mapping in presence of -Xmultifile-package-facades.
Fixed backing field mapping issue.
Added more tests.
This commit is contained in:
Dmitry Petrov
2015-09-11 19:14:10 +03:00
parent 838433ba8a
commit 1586a2df8e
43 changed files with 363 additions and 90 deletions
@@ -1,4 +1,6 @@
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
inline fun foo(body: () -> String): String = body()
inline fun foo(body: () -> String): String = bar(body())
public fun bar(x: String): String = x
@@ -0,0 +1,5 @@
package test
import a.foo
fun box(): String = foo { "OK" }
@@ -0,0 +1,4 @@
@file:[JvmName("APackage") JvmMultifileClass]
package a
inline fun foo(body: () -> String): String = zee(body())
@@ -0,0 +1,4 @@
@file:[JvmName("APackage") JvmMultifileClass]
package a
public fun zee(x: String): String = x
@@ -0,0 +1,3 @@
import a.*
fun box(): String = OK
@@ -0,0 +1,4 @@
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val O: String = "O"
@@ -0,0 +1,4 @@
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val K: String = "K"
@@ -0,0 +1,4 @@
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val OK: String = O + K
@@ -0,0 +1,3 @@
import a.OK
fun box(): String = OK
@@ -0,0 +1,4 @@
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val OK: String = "OK"
@@ -0,0 +1,6 @@
import a.OK
fun box(): String {
OK = "OK"
return OK
}
@@ -0,0 +1,4 @@
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
var OK: String = "Hmmm?"
@@ -0,0 +1,2 @@
fun box(): String =
listOf("a").map { "OK" }.get(0)
@@ -2,6 +2,5 @@ fun foo() {
assert(1 == 1) { "Hahaha" }
}
// assert function will be inlined, and we assure that there are no calls via package part, but is call via package facade in inlined code
// 0 INVOKESTATIC kotlin\/KotlinPackage.+\.getASSERTIONS_ENABLED \(\)Z
// 1 INVOKESTATIC kotlin\/AssertionsJVMKt\.getASSERTIONS_ENABLED \(\)Z
// 1 INVOKESTATIC kotlin\/KotlinPackage\.getASSERTIONS_ENABLED
// 0 INVOKESTATIC kotlin\/AssertionsJVMKt\.getASSERTIONS_ENABLED
@@ -0,0 +1,4 @@
@file:[JvmName("Util") JvmMultifileClass]
package test
public fun publicInOtherFile() {}
@@ -0,0 +1,18 @@
@file:[JvmName("Util") JvmMultifileClass]
package test
inline fun foo(body: () -> Unit) {
publicInThisFile()
publicInOtherFile()
body()
}
public fun publicInThisFile() {}
fun bar() {
foo {}
}
// @test/Util__ThisFileKt.class:
// 2 INVOKESTATIC test/Util.publicInThisFile
// 2 INVOKESTATIC test/Util.publicInOtherFile