[klib] Add an option to write out header klibs

The header klib is supposed to only contain the public abi of the module
similar to jvm-abi-gen. It is intended to be used as a dependency for other
klib compilations instead of the full klib for compilation avoidance.

^KT-60807
This commit is contained in:
Johan Bay
2023-05-09 14:29:21 +02:00
committed by Space Team
parent 829e0675f4
commit 0a612e4268
90 changed files with 1374 additions and 76 deletions
@@ -0,0 +1,7 @@
package test
private val x = object { fun f() = 1 }
fun g() =
x.f() +
object { fun f() = 0 }.f()
@@ -0,0 +1,3 @@
package test
fun g() = 1
@@ -0,0 +1,3 @@
package test
class Class
@@ -0,0 +1,3 @@
package test
open class Class
@@ -0,0 +1,18 @@
package test
class A {
val publicVal = 0
fun publicMethod() = 0
internal val internalVal = 0
internal fun internalMethod() = 0
protected val protectedVal = 0
protected fun protectedMethod() = 0
private val privateVal = 0
private fun privateMethod() = 0
val publicValBody = internalMethod() + privateMethod() + 2
val publicMethodBody = publicValBody + 2
}
@@ -0,0 +1,15 @@
package test
class A {
val publicVal = 0
fun publicMethod() = 0
internal val internalVal = 42
internal fun internalMethod() = 42
protected val protectedVal = 0
protected fun protectedMethod() = 0
val publicValBody = internalMethod() + 1
val publicMethodBody = publicValBody + 1
}
@@ -0,0 +1,3 @@
package test
const val x = 0
@@ -0,0 +1,3 @@
package test
const val x = 1
@@ -0,0 +1,4 @@
package test
inline fun f() = 1
inline fun g() = 2
@@ -0,0 +1,7 @@
package test
inline fun g() = 2
inline fun f() = 1
// This changes the line numbers in f, g
@@ -0,0 +1,10 @@
package test
fun sum(x: Int, y: Int): Int =
try {
var result = x
result += y
result
} finally {
// do nothing
}
@@ -0,0 +1,3 @@
package test
fun sum(x: Int, y: Int): Int = y + x
@@ -0,0 +1,9 @@
private class A {
inline fun test(crossinline s: () -> Unit) {
object {
fun run() {
s()
}
}.run()
}
}
@@ -0,0 +1,9 @@
private class A {
inline fun test(crossinline s: () -> Unit) {
object {
fun run() {
//s()
}
}.run()
}
}
@@ -0,0 +1,11 @@
class A {
private class B {
inline fun test(crossinline s: () -> Unit) {
object {
fun run() {
s()
}
}.run()
}
}
}
@@ -0,0 +1,11 @@
class A {
private class B {
inline fun test(crossinline s: () -> Unit) {
object {
fun run() {
//s()
}
}.run()
}
}
}
@@ -0,0 +1,3 @@
package test
inline fun sum(x: Int, y: Int): Int = x + y
@@ -0,0 +1,3 @@
package test
inline fun sum(x: Int, y: Int): Int = y + x
@@ -0,0 +1,4 @@
package test
private inline fun f() = { 1 }()
fun g() = f()
@@ -0,0 +1,3 @@
package test
fun g() = 1
@@ -0,0 +1,3 @@
package test
fun id(x: Int): Int = x
@@ -0,0 +1,3 @@
package test
fun id(y: Int): Int = y
@@ -0,0 +1,10 @@
package test
private interface A {
fun foo() = 0
fun bar(): String
}
class B: A {
override fun bar() = "test${foo()}"
}
@@ -0,0 +1,10 @@
package test
private interface A {
fun foo() = 42
fun bar(): String
}
class B: A {
override fun bar() = "test${foo()}"
}
@@ -0,0 +1,13 @@
package test
class PublicClass1
class PublicClass2
typealias PublicTypeAlias1 = PublicClass1
typealias PublicTypeAlias2 = PublicClass1
internal typealias InternalTypeAlias1 = PublicClass1
internal typealias InternalTypeAlias2 = PublicClass1
private typealias PrivateTypeAlias1 = PublicClass1
private typealias PrivateTypeAlias2 = PublicClass1
@@ -0,0 +1,12 @@
package test
class PublicClass1
class PublicClass2
typealias PublicTypeAlias1 = PublicClass1
typealias PublicTypeAlias2 = PublicClass1
internal typealias InternalTypeAlias1 = PublicClass1
internal typealias InternalTypeAlias2 = PublicClass1
private typealias PrivateTypeAlias1 = PublicClass2
@@ -0,0 +1,3 @@
package test
fun foo() = 0
@@ -0,0 +1,3 @@
package test
fun foo() = "0"
@@ -0,0 +1,4 @@
package test
open class A
class B : A()
@@ -0,0 +1,4 @@
package test
open class A
class B
@@ -0,0 +1,7 @@
package test
private val x = 1
object A { fun f() = x }
val y = 2
@@ -0,0 +1,5 @@
package test
object A { fun f() = 1 }
val y = 2
@@ -0,0 +1,13 @@
package test
val publicVal = 0
const val publicConst = 0
fun publicFun() = 0
internal val internalVal = 0
internal const val internalConst = 0
internal fun internalFun() = 0
private val privateVal = 0
private const val privateConst = 0
private fun privateFun() = 0
@@ -0,0 +1,9 @@
package test
val publicVal = 0
const val publicConst = 0
fun publicFun() = 0
internal val internalVal = 0
internal const val internalConst = 0
internal fun internalFun() = 0