Initial support of @JvmDefault

(cherry picked from commit fe45eb2)
This commit is contained in:
Mikhael Bogdanov
2018-02-20 18:02:54 +01:00
parent 33577b4078
commit a28a0beaea
50 changed files with 322 additions and 256 deletions

View File

@@ -1,7 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Test<T> {
@kotlin.annotations.JvmDefault
fun test(p: T): T {
return p
}

View File

@@ -1,13 +1,16 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Test<T> {
@kotlin.annotations.JvmDefault
fun test(p: T): T {
return p
}
}
interface Test2: Test<String> {
@kotlin.annotations.JvmDefault
override fun test(p: String): String {
return p + "K"
}

View File

@@ -0,0 +1,24 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// WITH_RUNTIME
interface Test {
@kotlin.annotations.JvmDefault
fun foo(): String = "O"
@kotlin.annotations.JvmDefault
val bar: String
get() = "K"
fun test(): String {
return (::foo)() + (::bar)()
}
}
class TestClass : Test {
}
fun box(): String {
return TestClass().test()
}

View File

@@ -1,7 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface IBase {
@kotlin.annotations.JvmDefault
fun bar() = "OK"
}

View File

@@ -1,7 +1,8 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Z {
@kotlin.annotations.JvmDefault
fun test(s: String = "OK"): String {
return s
}

View File

@@ -1,9 +1,10 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_REFLECT
// FULL_JDK
interface Test {
@kotlin.annotations.JvmDefault
fun test(): String {
return "Test"
}
@@ -15,6 +16,7 @@ open class TestClass : Test {
interface Test2 : Test {
@kotlin.annotations.JvmDefault
override fun test(): String {
return "Test2"
}

View File

@@ -1,17 +1,23 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
// IGNORE_BACKEND: JS
interface Z {
@kotlin.annotations.JvmDefault
private fun privateFun() = { "OK" }
@kotlin.annotations.JvmDefault
fun callPrivateFun() = privateFun()
@kotlin.annotations.JvmDefault
fun publicFun() = { "OK" }
@kotlin.annotations.JvmDefault
fun funWithDefaultArgs(s: () -> Unit = {}): () -> Unit
@kotlin.annotations.JvmDefault
val property: () -> Unit
get() = {}

View File

@@ -1,7 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Z<T> {
@kotlin.annotations.JvmDefault
fun test(p: T): T {
return p
}

View File

@@ -1,7 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Z<T> {
@kotlin.annotations.JvmDefault
fun test(p: T): T {
return p
}

View File

@@ -1,9 +1,12 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Z<T> {
val value: T
@kotlin.annotations.JvmDefault
val z: T
get() = value
}

View File

@@ -1,8 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
// FULL_JDK
interface Test {
@kotlin.annotations.JvmDefault
fun test() {
}
}

View File

@@ -1,8 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
// FULL_JDK
interface Test {
@kotlin.annotations.JvmDefault
fun test() {
}
}

View File

@@ -1,9 +1,10 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
// FULL_JDK
interface Test {
@kotlin.annotations.JvmDefault
fun test() {
}
}

View File

@@ -1,10 +1,14 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface KCallable {
@kotlin.annotations.JvmDefault
val returnType: String
}
interface KCallableImpl : KCallable {
@kotlin.annotations.JvmDefault
override val returnType: String
get() = "OK"
}

View File

@@ -1,10 +1,14 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface KCallable {
@kotlin.annotations.JvmDefault
val returnType: String
}
interface KCallableImpl : KCallable {
@kotlin.annotations.JvmDefault
override val returnType: String
get() = "OK"
}

View File

@@ -1,5 +1,5 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_REFLECT
annotation class Property(val value: String)
@@ -7,6 +7,7 @@ annotation class Accessor(val value: String)
interface Z {
@Property("OK")
@kotlin.annotations.JvmDefault
val z: String
@Accessor("OK")
get() = "OK"
@@ -16,7 +17,7 @@ interface Z {
class Test : Z
fun box() : String {
val value = (Z::z.annotations.single() as Property).value
val value = Z::z.annotations.filterIsInstance<Property>().single().value
if (value != "OK") return value
return (Z::z.getter.annotations.single() as Accessor).value
}

View File

@@ -1,24 +0,0 @@
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS, +JVM.INTERFACE_COMPATIBILITY
// WITH_REFLECT
annotation class Property(val value: String)
annotation class Accessor(val value: String)
interface Z {
@Property("OK")
val z: String
@Accessor("OK")
get() = "OK"
}
class Test : Z
fun box() : String {
val value = (Z::z.annotations.single() as Property).value
if (value != "OK") return value
val forName = Class.forName("Z\$DefaultImpls")
val annotation = forName.getDeclaredMethod("z\$annotations").getAnnotation(Property::class.java)
return annotation.value
}

View File

@@ -1,7 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Test {
@kotlin.annotations.JvmDefault
fun test(): String {
return "OK"
}

View File

@@ -1,7 +1,9 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Z {
@kotlin.annotations.JvmDefault
val z: String
get() = "OK"
}

View File

@@ -1,14 +1,16 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
interface Test {
@kotlin.annotations.JvmDefault
fun test(): String {
return "OK"
}
}
interface Test2 : Test {
@kotlin.annotations.JvmDefault
override fun test(): String {
return super.test()
}

View File

@@ -1,5 +1,6 @@
// !API_VERSION: 1.3
// JVM_TARGET: 1.8
// KOTLIN_CONFIGURATION_FLAGS: +JVM.JVM8_TARGET_WITH_DEFAULTS
// WITH_RUNTIME
// FULL_JDK
// There should be no DefaultImpls method for MutableMap.remove(K;V)
@@ -11,6 +12,7 @@ class B : A<String, String>, java.util.AbstractMap<String, String>() {
}
interface C<K, V> : MutableMap<K, V> {
@kotlin.annotations.JvmDefault
override fun remove(key: K, value: V) = true
}