[FIR] Add JVM Default diagnostics

This commit is contained in:
Ivan Kochurkin
2021-08-27 23:17:27 +03:00
committed by TeamCityServer
parent b5ff49c903
commit cfd2835254
36 changed files with 432 additions and 270 deletions
@@ -1,60 +0,0 @@
// !JVM_TARGET: 1.8
// !JVM_DEFAULT_MODE: enable
interface A<T> {
@<!DEPRECATION!>JvmDefault<!>
fun test(p: T) {
}
}
interface ANonDefault {
fun test(p: String) {}
}
interface B<T> : A<T> {
override fun test(p: T)
{}
}
interface C<T> : A<T>, ANonDefault {
override fun test(p: T)
{}
override fun test(p: String) {
}
}
interface C1 : C<String> {
override fun test(p: String) {
}
}
interface C2 : C<String>, ANonDefault {
override fun test(p: String) {
}
}
interface D<T> : ANonDefault, A<T> {
override fun test(p: T)
{}
override fun test(p: String) {
}
}
interface D1 : D<String> {
override fun test(p: String) {
}
}
interface D2 : ANonDefault, D<String> {
override fun test(p: String) {
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_TARGET: 1.8
// !JVM_DEFAULT_MODE: enable
@@ -1,72 +0,0 @@
// !JVM_DEFAULT_MODE: enable
// !JVM_TARGET: 1.8
// FILE: JavaInterface.java
public interface JavaInterface {
default void test() {}
default void testForNonDefault() {}
void testAbstract();
}
// FILE: 1.kt
interface KotlinInterface : JavaInterface {
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
interface KotlinInterface2 : JavaInterface, KotlinInterface {
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
interface KotlinInterfaceForIndirect : JavaInterface {
}
interface KotlinInterfaceIndirectInheritance : KotlinInterfaceForIndirect {
@<!DEPRECATION!>JvmDefault<!>
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 {
@<!DEPRECATION!>JvmDefault<!>
override fun test() {}
override fun testForNonDefault() {}
override fun testAbstract() {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_DEFAULT_MODE: enable
// !JVM_TARGET: 1.8
@@ -1,18 +1,17 @@
// !JVM_TARGET: 1.8
interface A {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {
}
}
interface B : A {
interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
}
open class Foo : B
open class Foo2 : B, A
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo<!> : B
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo2<!> : B, A
open class FooNoError : B {
override fun test() {
@@ -23,12 +22,12 @@ open class Foo2NoError : B, A {
}
}
class Bar : Foo()
class Bar2 : Foo(), A
class Bar3 : Foo(), B
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar<!> : Foo()
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar2<!> : Foo(), A
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar3<!> : Foo(), B
open class BarWithJvmDefault : B {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
override fun test() {
}
}
@@ -7,7 +7,6 @@ interface A {
}
interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
}
@@ -1,7 +0,0 @@
// !JVM_TARGET: 1.6
@JvmDefaultWithoutCompatibility
interface A {}
@JvmDefaultWithoutCompatibility
class B : A {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_TARGET: 1.6
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefaultWithoutCompatibility<!>
@@ -1,9 +0,0 @@
// !JVM_TARGET: 1.8
@JvmDefaultWithoutCompatibility
interface A<T> {
fun test(p: T) {}
}
@JvmDefaultWithoutCompatibility
class B : A<String> {}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_TARGET: 1.8
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefaultWithoutCompatibility<!>
@@ -2,27 +2,27 @@
interface B {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {}
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
abstract fun test2(s: String = "")
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
abstract fun test3()
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
abstract val prop: String
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
abstract val prop2: String
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
val prop3: String
get() = ""
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
var prop4: String
get() = ""
set(value) {}
@@ -1,22 +0,0 @@
// !JVM_TARGET: 1.8
abstract class A {
@<!DEPRECATION!>JvmDefault<!>
fun test() {}
@<!DEPRECATION!>JvmDefault<!>
abstract fun test2(s: String = "")
@<!DEPRECATION!>JvmDefault<!>
abstract fun test3()
}
object B {
@<!DEPRECATION!>JvmDefault<!>
fun test() {}
@<!DEPRECATION!>JvmDefault<!>
fun test2(s: String = "") {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_TARGET: 1.8
abstract class A {
@@ -1,31 +0,0 @@
// !JVM_TARGET: 1.8
// !JVM_DEFAULT_MODE: enable
interface A {
@<!DEPRECATION!>JvmDefault<!>
fun test() {}
}
interface Abstract : A {
override fun test()
}
interface ANonDefault {
fun test() {}
}
interface B: A {
override fun test() {}
}
interface C: ANonDefault, A {
override fun test() {}
}
interface D: A, ANonDefault {
override fun test() {}
}
class Foo : A {
override fun test() {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_TARGET: 1.8
// !JVM_DEFAULT_MODE: enable
@@ -1,18 +1,18 @@
// !JVM_TARGET: 1.8
// FILE: 1.kt
interface A {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {
}
}
// FILE: 2.kt
interface B : A {
interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
}
interface C : B {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
override fun test() {
super.test()
}
@@ -23,7 +23,7 @@ open class Foo : B {
super.test()
}
}
open class Foo2 : B
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo2<!> : B
open class Bar : Foo2() {
override fun test() {
@@ -37,7 +37,7 @@ open class Bar2 : Bar() {
}
}
class ManySupers: Foo2(), B {
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers<!>: Foo2(), B {
fun foo() {
super<Foo2>.test()
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>B<!>>.test()
@@ -45,7 +45,7 @@ class ManySupers: Foo2(), B {
}
}
class ManySupers2: Foo2(), C {
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers2<!>: Foo2(), C {
fun foo() {
super<Foo2>.test()
super<C>.test()
@@ -53,7 +53,7 @@ class ManySupers2: Foo2(), C {
}
}
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class ManySupers3<!>: Bar2(), C {
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers3<!><!>: Bar2(), C {
fun foo() {
super<Bar2>.test()
super<C>.test()
@@ -1,6 +1,6 @@
// !JVM_TARGET: 1.8
interface A {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {
}
}
@@ -10,13 +10,13 @@ interface B{
}
}
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface AB<!>: A, B
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>AB<!><!>: A, B
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface BA<!>: B, A
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>BA<!><!>: B, A
interface C : A, B {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
override fun test() {
super<B>.test()
super<A>.test()
@@ -24,9 +24,9 @@ interface C : A, B {
}
interface D : B, A {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
override fun test() {
super<B>.test()
super<A>.test()
}
}
}
@@ -1,6 +1,6 @@
// !JVM_TARGET: 1.8
interface A {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
fun test()
}
@@ -29,4 +29,4 @@ class D : B, A {
fun foo() {
super<B>.test()
}
}
}
@@ -1,6 +1,6 @@
// !JVM_TARGET: 1.8
interface A {
@<!DEPRECATION!>JvmDefault<!>
<!JVM_DEFAULT_IN_DECLARATION!>@<!DEPRECATION!>JvmDefault<!><!>
fun test() {
}
@@ -9,8 +9,8 @@ interface A {
interface B{
fun test()
}
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface AB<!> : A, B
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface BA<!> : B, A
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>AB<!><!> : A, B
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>BA<!><!> : B, A
class C : A, B {
override fun test() {
@@ -24,8 +24,8 @@ class D : B, A {
}
}
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>class E<!>: B, A {
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>class <!JVM_DEFAULT_THROUGH_INHERITANCE!>E<!><!>: B, A {
fun foo() {
super<A>.test()
}
}
}
@@ -1,29 +0,0 @@
// !JVM_TARGET: 1.6
interface B {
@<!DEPRECATION!>JvmDefault<!>
fun test() {}
@<!DEPRECATION!>JvmDefault<!>
abstract fun test2(s: String = "")
@<!DEPRECATION!>JvmDefault<!>
abstract fun test3()
@<!DEPRECATION!>JvmDefault<!>
abstract val prop: String
@<!DEPRECATION!>JvmDefault<!>
abstract val prop2: String
@<!DEPRECATION!>JvmDefault<!>
val prop3: String
get() = ""
@<!DEPRECATION!>JvmDefault<!>
var prop4: String
get() = ""
set(value) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !JVM_TARGET: 1.6
interface B {