Report error on missed specialization in compatibility mode
#KT-39603 Fixed
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
// !JVM_DEFAULT_MODE: all-compatibility
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
interface Foo<T> {
|
||||
fun test(p: T) = "fail"
|
||||
val T.prop: String
|
||||
get() = "fail"
|
||||
}
|
||||
|
||||
interface FooDerived: Foo<String>
|
||||
|
||||
class Unspecialized<Y> : Foo<Y>
|
||||
|
||||
open class UnspecializedFromDerived : FooDerived
|
||||
|
||||
abstract class AbstractUnspecializedFromDerived : FooDerived
|
||||
|
||||
open class Specialized : Foo<String>
|
||||
|
||||
abstract class AbstractSpecialized : Foo<String>
|
||||
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
open class UnspecializedFromDerivedNC : FooDerived
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
abstract class AbstractUnspecializedFromDerivedNC : FooDerived
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
open class SpecializedNC : Foo<String>
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
abstract class AbstractSpecializedNC : Foo<String>
|
||||
|
||||
|
||||
final class FinalSpecialized : Foo<String>
|
||||
|
||||
sealed class SealedSpecialized : Foo<String> {
|
||||
open class A : SealedSpecialized();
|
||||
}
|
||||
|
||||
enum class EnumSpecialized : Foo<String> {
|
||||
ENTRY {
|
||||
fun test() = 123
|
||||
}
|
||||
}
|
||||
|
||||
object ObjectSpecialized : Foo<String>
|
||||
|
||||
private class Outer {
|
||||
|
||||
open class InnerSpecialized: Foo<String>
|
||||
}
|
||||
|
||||
fun local() {
|
||||
object : Foo<String> {}
|
||||
}
|
||||
|
||||
fun interface F : Foo<String> {
|
||||
fun invoke(o: String): String
|
||||
}
|
||||
|
||||
fun test(): String {
|
||||
if (F { o -> o + "K" }.invoke("O") != "OK") return "Fail"
|
||||
|
||||
val lambda: (String) -> String = { o -> o + "K" }
|
||||
return F(lambda).invoke("O")
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
// !JVM_DEFAULT_MODE: all-compatibility
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
interface Foo<T> {
|
||||
fun test(p: T) = "fail"
|
||||
val T.prop: String
|
||||
get() = "fail"
|
||||
}
|
||||
|
||||
interface FooDerived: Foo<String>
|
||||
|
||||
class Unspecialized<Y> : Foo<Y>
|
||||
|
||||
open class <!EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE, EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE!>UnspecializedFromDerived<!> : FooDerived
|
||||
|
||||
abstract class <!EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE, EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE!>AbstractUnspecializedFromDerived<!> : FooDerived
|
||||
|
||||
open class <!EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE, EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE!>Specialized<!> : Foo<String>
|
||||
|
||||
abstract class <!EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE, EXPLICIT_OVERRIDE_REQUIRED_IN_COMPATIBILITY_MODE!>AbstractSpecialized<!> : Foo<String>
|
||||
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
open class UnspecializedFromDerivedNC : FooDerived
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
abstract class AbstractUnspecializedFromDerivedNC : FooDerived
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
open class SpecializedNC : Foo<String>
|
||||
|
||||
@JvmDefaultWithoutCompatibility
|
||||
abstract class AbstractSpecializedNC : Foo<String>
|
||||
|
||||
|
||||
final class FinalSpecialized : Foo<String>
|
||||
|
||||
sealed class SealedSpecialized : Foo<String> {
|
||||
open class A : SealedSpecialized();
|
||||
}
|
||||
|
||||
enum class EnumSpecialized : Foo<String> {
|
||||
ENTRY {
|
||||
fun test() = 123
|
||||
}
|
||||
}
|
||||
|
||||
object ObjectSpecialized : Foo<String>
|
||||
|
||||
private class Outer {
|
||||
|
||||
open class InnerSpecialized: Foo<String>
|
||||
}
|
||||
|
||||
fun local() {
|
||||
object : Foo<String> {}
|
||||
}
|
||||
|
||||
fun interface F : Foo<String> {
|
||||
fun invoke(o: String): String
|
||||
}
|
||||
|
||||
fun test(): String {
|
||||
if (F { o -> o + "K" }.invoke("O") != "OK") return "Fail"
|
||||
|
||||
val lambda: (String) -> String = { o -> o + "K" }
|
||||
return F(lambda).invoke("O")
|
||||
}
|
||||
+183
@@ -0,0 +1,183 @@
|
||||
package
|
||||
|
||||
public fun local(): kotlin.Unit
|
||||
public fun test(): kotlin.String
|
||||
|
||||
public abstract class AbstractSpecialized : Foo<kotlin.String> {
|
||||
public constructor AbstractSpecialized()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
@kotlin.jvm.JvmDefaultWithoutCompatibility public abstract class AbstractSpecializedNC : Foo<kotlin.String> {
|
||||
public constructor AbstractSpecializedNC()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public abstract class AbstractUnspecializedFromDerived : FooDerived {
|
||||
public constructor AbstractUnspecializedFromDerived()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
@kotlin.jvm.JvmDefaultWithoutCompatibility public abstract class AbstractUnspecializedFromDerivedNC : FooDerived {
|
||||
public constructor AbstractUnspecializedFromDerivedNC()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final enum class EnumSpecialized : kotlin.Enum<EnumSpecialized>, Foo<kotlin.String> {
|
||||
enum entry ENTRY
|
||||
|
||||
private constructor EnumSpecialized()
|
||||
public final override /*1*/ /*fake_override*/ val name: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: kotlin.String
|
||||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
|
||||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: EnumSpecialized): kotlin.Int
|
||||
public final override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit
|
||||
public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<EnumSpecialized!>!
|
||||
public final override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
// Static members
|
||||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): EnumSpecialized
|
||||
public final /*synthesized*/ fun values(): kotlin.Array<EnumSpecialized>
|
||||
}
|
||||
|
||||
public fun interface F : Foo<kotlin.String> {
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 abstract fun invoke(/*0*/ o: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class FinalSpecialized : Foo<kotlin.String> {
|
||||
public constructor FinalSpecialized()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface Foo</*0*/ T> {
|
||||
public open val T.prop: 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 fun test(/*0*/ p: T): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface FooDerived : Foo<kotlin.String> {
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public object ObjectSpecialized : Foo<kotlin.String> {
|
||||
private constructor ObjectSpecialized()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
private final class Outer {
|
||||
public constructor Outer()
|
||||
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 open class InnerSpecialized : Foo<kotlin.String> {
|
||||
public constructor InnerSpecialized()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class SealedSpecialized : Foo<kotlin.String> {
|
||||
private constructor SealedSpecialized()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public open class A : SealedSpecialized {
|
||||
public constructor A()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public open class Specialized : Foo<kotlin.String> {
|
||||
public constructor Specialized()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
@kotlin.jvm.JvmDefaultWithoutCompatibility public open class SpecializedNC : Foo<kotlin.String> {
|
||||
public constructor SpecializedNC()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class Unspecialized</*0*/ Y> : Foo<Y> {
|
||||
public constructor Unspecialized</*0*/ Y>()
|
||||
public open override /*1*/ /*fake_override*/ val Y.prop: 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 test(/*0*/ p: Y): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class UnspecializedFromDerived : FooDerived {
|
||||
public constructor UnspecializedFromDerived()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
@kotlin.jvm.JvmDefaultWithoutCompatibility public open class UnspecializedFromDerivedNC : FooDerived {
|
||||
public constructor UnspecializedFromDerivedNC()
|
||||
public open override /*1*/ /*fake_override*/ val kotlin.String.prop: 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 test(/*0*/ p: kotlin.String): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user