Deprecate @JvmDefault

#KT-40392 Fixed

(cherry picked from commit c11f38688e)
This commit is contained in:
Mikhail Bogdanov
2020-03-27 15:56:55 +01:00
committed by Space
parent 77c263fcc4
commit 95654bb9bc
20 changed files with 290 additions and 60 deletions
@@ -2,7 +2,7 @@
// !JVM_DEFAULT_MODE: enable
interface A<T> {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun test(p: T) {
}
}
@@ -13,7 +13,7 @@ public interface JavaInterface {
// FILE: 1.kt
interface KotlinInterface : JavaInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
<!NON_JVM_DEFAULT_OVERRIDES_JAVA_DEFAULT!>override fun testForNonDefault()<!> {}
@@ -22,7 +22,7 @@ interface KotlinInterface : JavaInterface {
}
interface KotlinInterface2 : JavaInterface, KotlinInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
override fun testForNonDefault() {}
@@ -37,7 +37,7 @@ interface KotlinInterfaceForIndirect : JavaInterface {
interface KotlinInterfaceIndirectInheritance : KotlinInterfaceForIndirect {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
<!NON_JVM_DEFAULT_OVERRIDES_JAVA_DEFAULT!>override fun testForNonDefault()<!> {}
@@ -63,7 +63,7 @@ interface KotlinInterfaceX {
}
interface KotlinInterfaceManySuper: JavaInterface, KotlinInterfaceX {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
<!NON_JVM_DEFAULT_OVERRIDES_JAVA_DEFAULT!>override fun testForNonDefault()<!> {}
@@ -0,0 +1,69 @@
// !JVM_DEFAULT_MODE: all
// !JVM_TARGET: 1.8
// FILE: JavaInterface.java
public interface JavaInterface {
default void test() {}
default void testForNonDefault() {}
void testAbstract();
}
// FILE: 1.kt
interface KotlinInterface : JavaInterface {
@JvmDefault
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
interface KotlinInterface2 : JavaInterface, KotlinInterface {
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
interface KotlinInterfaceForIndirect : JavaInterface {
}
interface KotlinInterfaceIndirectInheritance : KotlinInterfaceForIndirect {
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
open class KotlinClass : JavaInterface {
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
interface KotlinInterfaceX {
fun test() {}
fun testForNonDefault() {}
fun testAbstract() {}
}
interface KotlinInterfaceManySuper: JavaInterface, KotlinInterfaceX {
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: all
// !JVM_TARGET: 1.8
@@ -14,7 +13,7 @@ public interface JavaInterface {
// FILE: 1.kt
interface KotlinInterface : JavaInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
override fun testForNonDefault() {}
@@ -1,7 +1,7 @@
// !JVM_TARGET: 1.8
interface A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
fun test()<!> {
}
}
@@ -28,7 +28,7 @@ class Bar2 : Foo(), A
class Bar3 : Foo(), B
open class BarWithJvmDefault : B {
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
override fun test() {
}
}
@@ -2,12 +2,12 @@
// !JVM_TARGET: 1.8
public interface KInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun test(): String {
return "OK";
}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val property: String
get() = "OK"
@@ -23,7 +23,7 @@ public interface KInterface {
// FILE: 1.kt
interface KotlinInterface : KInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun fooo() {
super.test()
super.property
@@ -42,7 +42,7 @@ interface KotlinInterface : KInterface {
}
}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val propertyy: String
get() {
super.test()
@@ -105,7 +105,7 @@ interface KotlinInterface : KInterface {
}
interface KotlinInterfaceIndirectInheritance : KotlinInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun foooo() {
super.test()
super.property
@@ -124,7 +124,7 @@ interface KotlinInterfaceIndirectInheritance : KotlinInterface {
}
}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val propertyyy: String
get() {
super.test()
@@ -0,0 +1,162 @@
// !JVM_DEFAULT_MODE: enable
// !JVM_TARGET: 1.8
// FILE: JavaInterface.java
public interface JavaInterface {
default String test() {
return "OK";
}
default String testOverride() {
return "OK";
}
}
// FILE: 1.kt
interface KotlinInterface : JavaInterface {
@JvmDefault
fun fooo() {
super.test()
object {
fun run () {
super@KotlinInterface.test()
}
}
}
@JvmDefault
val propertyy: String
get() {
super.test()
object {
fun run () {
super@KotlinInterface.test()
}
}
return ""
}
@JvmDefault
override fun testOverride(): String {
return "OK";
}
}
interface KotlinInterfaceIndirectInheritance : KotlinInterface {
@JvmDefault
fun foooo() {
super.test()
object {
fun run () {
super@KotlinInterfaceIndirectInheritance.test()
}
}
}
@JvmDefault
val propertyyy: String
get() {
super.test()
object {
fun run () {
super@KotlinInterfaceIndirectInheritance.test()
}
}
return ""
}
}
open class KotlinClass : JavaInterface {
fun foo() {
super.test()
super.testOverride()
object {
fun run () {
super@KotlinClass.test()
}
}
}
val property: String
get() {
super.test()
super.testOverride()
object {
fun run () {
super@KotlinClass.test()
}
}
return ""
}
}
class KotlinClassIndirectInheritance : KotlinClass() {
fun foo2() {
super.test()
super.testOverride()
object {
fun run () {
super@KotlinClassIndirectInheritance.test()
}
}
}
val property2: String
get() {
super.test()
super.testOverride()
object {
fun run () {
super@KotlinClassIndirectInheritance.test()
}
}
return ""
}
}
class KotlinClassIndirectInheritance2 : KotlinInterfaceIndirectInheritance {
fun foo() {
super.test()
super.testOverride()
object {
fun run () {
super@KotlinClassIndirectInheritance2.test()
}
}
}
val property: String
get() {
super.test()
super.testOverride()
object {
fun run () {
super@KotlinClassIndirectInheritance2.test()
}
}
return ""
}
}
fun test() {
KotlinClass().foo()
KotlinClass().property
KotlinClassIndirectInheritance2().foo()
KotlinClassIndirectInheritance2().property
KotlinClass().test()
KotlinClass().property
KotlinClass().testOverride()
KotlinClassIndirectInheritance().testOverride()
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: enable
// !JVM_TARGET: 1.8
// FILE: JavaInterface.java
@@ -16,7 +15,7 @@ public interface JavaInterface {
// FILE: 1.kt
interface KotlinInterface : JavaInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun fooo() {
super.test()
@@ -27,7 +26,7 @@ interface KotlinInterface : JavaInterface {
}
}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val propertyy: String
get() {
super.test()
@@ -40,14 +39,14 @@ interface KotlinInterface : JavaInterface {
return ""
}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
override fun testOverride(): String {
return "OK";
}
}
interface KotlinInterfaceIndirectInheritance : KotlinInterface {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun foooo() {
super.test()
@@ -58,7 +57,7 @@ interface KotlinInterfaceIndirectInheritance : KotlinInterface {
}
}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val propertyyy: String
get() {
super.test()
@@ -2,27 +2,27 @@
interface B {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
fun test()<!> {}
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
abstract fun test2(s: String = "")<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
abstract fun test3()<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
abstract val prop: String<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
abstract val prop2: String<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
val prop3: String<!>
get() = ""
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
var prop4: String<!>
get() = ""
set(<!UNUSED_PARAMETER!>value<!>) {}
@@ -2,21 +2,21 @@
abstract class A {
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {}
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
abstract fun test2(s: String = "")
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
abstract fun test3()
}
object B {
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {}
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
fun test2(<!UNUSED_PARAMETER!>s<!>: String = "") {}
}
@@ -3,12 +3,12 @@
interface B {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val prop1: String
<!WRONG_ANNOTATION_TARGET!>@JvmDefault<!> get() = ""
<!WRONG_ANNOTATION_TARGET!>@<!DEPRECATION!>JvmDefault<!><!> get() = ""
var prop2: String
<!WRONG_ANNOTATION_TARGET!>@JvmDefault<!> get() = ""
<!WRONG_ANNOTATION_TARGET!>@JvmDefault<!> set(<!UNUSED_PARAMETER!>value<!>) {}
<!WRONG_ANNOTATION_TARGET!>@<!DEPRECATION!>JvmDefault<!><!> get() = ""
<!WRONG_ANNOTATION_TARGET!>@<!DEPRECATION!>JvmDefault<!><!> set(<!UNUSED_PARAMETER!>value<!>) {}
}
@@ -2,7 +2,7 @@
// !JVM_DEFAULT_MODE: enable
interface A {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun test() {}
}
@@ -2,7 +2,7 @@
// !JVM_DEFAULT_MODE: enable
interface A {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val test: String
get() = "OK"
}
@@ -1,7 +1,7 @@
// !JVM_TARGET: 1.8
// FILE: 1.kt
interface A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
fun test()<!> {
}
}
@@ -12,7 +12,7 @@ interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
}
interface C : B {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
override fun test()<!> {
super.<!USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL!>test<!>()
}
@@ -1,6 +1,6 @@
// !JVM_TARGET: 1.8
interface A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
fun test()<!> {
}
}
@@ -16,7 +16,7 @@ interface B{
interface C : A, B {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
override fun test()<!> {
super<B>.test()
super<A>.<!USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL!>test<!>()
@@ -24,7 +24,7 @@ interface C : A, B {
}
interface D : B, A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
override fun test()<!> {
super<B>.test()
super<A>.<!USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL!>test<!>()
@@ -1,6 +1,6 @@
// !JVM_TARGET: 1.8
interface A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
fun test()<!>
}
@@ -1,6 +1,6 @@
// !JVM_TARGET: 1.8
interface A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!>
fun test()<!> {
}
@@ -2,27 +2,27 @@
interface B {
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {}
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
abstract fun test2(s: String = "")
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
abstract fun test3()
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
abstract val prop: String
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
abstract val prop2: String
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
val prop3: String
get() = ""
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
<!JVM_DEFAULT_IN_JVM6_TARGET!>@<!DEPRECATION!>JvmDefault<!><!>
var prop4: String
get() = ""
set(<!UNUSED_PARAMETER!>value<!>) {}
@@ -3,27 +3,27 @@
interface B {
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
fun test() {}
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
abstract fun test2(s: String = "")
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
abstract fun test3()
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
abstract val prop: String
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
abstract val prop2: String
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
val prop3: String
get() = ""
@JvmDefault
@<!DEPRECATION!>JvmDefault<!>
var prop4: String
get() = ""
set(<!UNUSED_PARAMETER!>value<!>) {}