Add @JvmDefault diagnostics

This commit is contained in:
Mikhael Bogdanov
2018-02-22 12:15:10 +01:00
parent 63afd37cdd
commit 1d3e57acee
23 changed files with 669 additions and 3 deletions
@@ -0,0 +1,60 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface A<T> {
@kotlin.annotations.JvmDefault
fun test(p: T) {
}
}
interface ANonDefault {
fun test(p: String) {}
}
interface B<T> : A<T> {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun test(p: T)<!>
{}
}
interface C<T> : A<T>, ANonDefault {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>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> {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>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) {
}
}
@@ -0,0 +1,66 @@
package
public interface A</*0*/ T> {
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.annotations.JvmDefault public open fun test(/*0*/ p: T): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface ANonDefault {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface B</*0*/ T> : A<T> {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun test(/*0*/ p: T): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C</*0*/ T> : A<T>, ANonDefault {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun test(/*0*/ p: T): kotlin.Unit
public open override /*1*/ fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C1 : C<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
public open override /*2*/ fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C2 : C<kotlin.String>, ANonDefault {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*3*/ fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D</*0*/ T> : ANonDefault, A<T> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun test(/*0*/ p: T): kotlin.Unit
public open override /*1*/ fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D1 : D<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
public open override /*2*/ fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D2 : ANonDefault, D<kotlin.String> {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*3*/ fun test(/*0*/ p: kotlin.String): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,23 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
abstract class A {
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@kotlin.annotations.JvmDefault<!>
fun test() {}
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@kotlin.annotations.JvmDefault<!>
abstract fun test2(s: String = "")
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@kotlin.annotations.JvmDefault<!>
abstract fun test3()
}
object B {
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@kotlin.annotations.JvmDefault<!>
fun test() {}
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@kotlin.annotations.JvmDefault<!>
fun test2(<!UNUSED_PARAMETER!>s<!>: String = "") {}
}
@@ -0,0 +1,20 @@
package
public abstract class A {
public constructor 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.annotations.JvmDefault public final fun test(): kotlin.Unit
@kotlin.annotations.JvmDefault public abstract fun test2(/*0*/ s: kotlin.String = ...): kotlin.Unit
@kotlin.annotations.JvmDefault public abstract fun test3(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object B {
private constructor B()
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.annotations.JvmDefault public final fun test(): kotlin.Unit
@kotlin.annotations.JvmDefault public final fun test2(/*0*/ s: kotlin.String = ...): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,14 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface B {
@kotlin.annotations.JvmDefault
val prop1: String
<!WRONG_ANNOTATION_TARGET!>@kotlin.annotations.JvmDefault<!> get() = ""
var prop2: String
<!WRONG_ANNOTATION_TARGET!>@kotlin.annotations.JvmDefault<!> get() = ""
<!WRONG_ANNOTATION_TARGET!>@kotlin.annotations.JvmDefault<!> set(value) {}
}
@@ -0,0 +1,9 @@
package
public interface B {
@kotlin.annotations.JvmDefault public open val prop1: kotlin.String
public open var prop2: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,27 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface A {
@kotlin.annotations.JvmDefault
fun test() {}
}
interface Abstract : A {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun test()<!>
}
interface ANonDefault {
fun test() {}
}
interface B: A {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun test()<!> {}
}
interface C: ANonDefault, A {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun test()<!> {}
}
interface D: A, ANonDefault {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override fun test()<!> {}
}
@@ -0,0 +1,43 @@
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.annotations.JvmDefault public open fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface ANonDefault {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface Abstract : 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
public abstract override /*1*/ 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
public open override /*1*/ fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C : ANonDefault, A {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D : A, ANonDefault {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,28 @@
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
@kotlin.annotations.JvmDefaultFeature
interface A {
@kotlin.annotations.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<!>()<!> {}
}
@@ -0,0 +1,43 @@
package
@kotlin.annotations.JvmDefaultFeature 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.annotations.JvmDefault public open fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface ANonDefault {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface Abstract : 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
public abstract override /*1*/ 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
public open override /*1*/ fun test(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C : ANonDefault, A {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D : A, ANonDefault {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ fun test(): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,32 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface A {
@kotlin.annotations.JvmDefault
val test: String
get() = "OK"
}
interface Abstract : A {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override val test: String<!>
}
interface ANonDefault {
val test: String
get() = "ANonDefault"
}
interface B: A {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override val test: String<!>
get() = "B"
}
interface C: ANonDefault, A {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override val test: String<!>
get() = "C"
}
interface D: A, ANonDefault {
<!JVM_DEFAULT_REQUIRED_FOR_OVERRIDE!>override val test: String<!>
get() = "C"
}
@@ -0,0 +1,43 @@
package
public interface A {
@kotlin.annotations.JvmDefault public open val test: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface ANonDefault {
public open val test: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface Abstract : A {
public abstract override /*1*/ val test: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface B : A {
public open override /*1*/ val test: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C : ANonDefault, A {
public open override /*2*/ val test: kotlin.String
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface D : A, ANonDefault {
public open override /*2*/ val test: kotlin.String
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,31 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.6
interface B {
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
fun test() {}
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
abstract fun test2(s: String = "")
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
abstract fun test3()
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
abstract val prop: String
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
abstract val prop2: String
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
val prop3: String
get() = ""
<!JVM_DEFAULT_IN_JVM6_TARGET!>@kotlin.annotations.JvmDefault<!>
var prop4: String
get() = ""
set(value) {}
}
@@ -0,0 +1,14 @@
package
public interface B {
@kotlin.annotations.JvmDefault public abstract val prop: kotlin.String
@kotlin.annotations.JvmDefault public abstract val prop2: kotlin.String
@kotlin.annotations.JvmDefault public open val prop3: kotlin.String
@kotlin.annotations.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.annotations.JvmDefault public open fun test(): kotlin.Unit
@kotlin.annotations.JvmDefault public abstract fun test2(/*0*/ s: kotlin.String = ...): kotlin.Unit
@kotlin.annotations.JvmDefault public abstract fun test3(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,30 @@
// !DIAGNOSTICS: -EXPERIMENTAL_API_USAGE
// !API_VERSION: 1.3
// !JVM_TARGET: 1.8
interface B {
@kotlin.annotations.JvmDefault
fun test() {}
@kotlin.annotations.JvmDefault
abstract fun test2(s: String = "")
@kotlin.annotations.JvmDefault
abstract fun test3()
@kotlin.annotations.JvmDefault
abstract val prop: String
@kotlin.annotations.JvmDefault
abstract val prop2: String
@kotlin.annotations.JvmDefault
val prop3: String
get() = ""
@kotlin.annotations.JvmDefault
var prop4: String
get() = ""
set(value) {}
}
@@ -0,0 +1,14 @@
package
public interface B {
@kotlin.annotations.JvmDefault public abstract val prop: kotlin.String
@kotlin.annotations.JvmDefault public abstract val prop2: kotlin.String
@kotlin.annotations.JvmDefault public open val prop3: kotlin.String
@kotlin.annotations.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.annotations.JvmDefault public open fun test(): kotlin.Unit
@kotlin.annotations.JvmDefault public abstract fun test2(/*0*/ s: kotlin.String = ...): kotlin.Unit
@kotlin.annotations.JvmDefault public abstract fun test3(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}