Add custom diagnostic checker for @JvmDefault annotation

This commit is contained in:
Mikhael Bogdanov
2018-03-29 16:41:47 +02:00
parent 89f22e69b4
commit 23e8adb793
21 changed files with 205 additions and 47 deletions
@@ -1,6 +1,7 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
// !ENABLE_JVM_DEFAULT
interface A<T> {
@JvmDefault
fun test(p: T) {
@@ -0,0 +1,19 @@
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface A {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
fun test()<!> {
}
}
interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
}
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo<!> : B
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo2<!> : B, A
class Bar : Foo()
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar2<!> : Foo(), A
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar3<!> : Foo(), B
@@ -0,0 +1,55 @@
package
public interface A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface B : A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open override /*1*/ /*fake_override*/ fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Bar : Foo {
public constructor Bar()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open override /*1*/ /*fake_override*/ fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Bar2 : Foo, A {
public constructor Bar2()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open override /*2*/ /*fake_override*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Bar3 : Foo, B {
public constructor Bar3()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open override /*2*/ /*fake_override*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class Foo : B {
public constructor Foo()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open override /*1*/ /*fake_override*/ fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class Foo2 : B, A {
public constructor Foo2()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open override /*2*/ /*fake_override*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,30 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface B {
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
fun test()<!> {}
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
abstract fun test2(s: String = "")<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
abstract fun test3()<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
abstract val prop: String<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
abstract val prop2: String<!>
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
val prop3: String<!>
get() = ""
<!JVM_DEFAULT_IN_DECLARATION!>@JvmDefault
var prop4: String<!>
get() = ""
set(value) {}
}
@@ -0,0 +1,14 @@
package
public interface B {
@kotlin.jvm.JvmDefault public abstract val prop: kotlin.String
@kotlin.jvm.JvmDefault public abstract val prop2: kotlin.String
@kotlin.jvm.JvmDefault public open val prop3: kotlin.String
@kotlin.jvm.JvmDefault public open var prop4: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open fun test(): kotlin.Unit
@kotlin.jvm.JvmDefault public abstract fun test2(/*0*/ s: kotlin.String = ...): kotlin.Unit
@kotlin.jvm.JvmDefault public abstract fun test3(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,6 +1,7 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
// !ENABLE_JVM_DEFAULT
interface B {
@JvmDefault
@@ -1,6 +1,7 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
// !ENABLE_JVM_DEFAULT
interface A {
@JvmDefault
fun test() {}
@@ -1,28 +0,0 @@
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
@JvmDefaultFeature
interface A {
@JvmDefault
fun test() {
}
}
interface Abstract : <!EXPERIMENTAL_API_USAGE!>A<!> {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun <!EXPERIMENTAL_OVERRIDE!>test<!>()<!>
}
interface ANonDefault {
fun test() {}
}
interface B : <!EXPERIMENTAL_API_USAGE!>A<!> {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun <!EXPERIMENTAL_OVERRIDE!>test<!>()<!> {}
}
interface C : ANonDefault, <!EXPERIMENTAL_API_USAGE!>A<!> {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun <!EXPERIMENTAL_OVERRIDE!>test<!>()<!> {}
}
interface D : <!EXPERIMENTAL_API_USAGE!>A<!>, ANonDefault {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun <!EXPERIMENTAL_OVERRIDE!>test<!>()<!> {}
}
@@ -1,6 +1,6 @@
package
@kotlin.jvm.JvmDefaultFeature public interface A {
public interface A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.JvmDefault public open fun test(): kotlin.Unit
@@ -1,6 +1,7 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
// !ENABLE_JVM_DEFAULT
interface A {
@JvmDefault
val test: String
@@ -13,7 +13,6 @@ interface B {
abstract fun test3()
<!JVM_DEFAULT_IN_JVM6_TARGET!>@JvmDefault<!>
abstract val prop: String
@@ -1,6 +1,7 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
// !ENABLE_JVM_DEFAULT
interface B {
@JvmDefault