[FIR] Relax MULTIPLE_DEFAULTS_* to account for the K1 behavior

^KT-56442
^KT-36188
This commit is contained in:
Nikolay Lunyak
2023-08-18 12:18:52 +03:00
committed by Space Team
parent 3f1bf6112f
commit 13a7bb95b3
29 changed files with 505 additions and 27 deletions
@@ -11,5 +11,5 @@ open class Keker<P> {
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {}
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
}
@@ -0,0 +1,16 @@
// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes
// ISSUE: KT-36188
interface SomeRandomBase<K> {
fun child(props: Int = 20)
}
interface SomeRandomOverride<J> : SomeRandomBase<J>
open class Keker<P> {
open fun child(props: Int = 10) {}
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_ERROR!>props: Int<!>) {}
}
@@ -0,0 +1,16 @@
// LANGUAGE: +ProhibitAllMultipleDefaultsInheritedFromSupertypes
// ISSUE: KT-36188
interface SomeRandomBase<K> {
fun child(props: Int = 20)
}
interface SomeRandomOverride<J> : SomeRandomBase<J>
open class Keker<P> {
open fun child(props: Int = 10) {}
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(props: Int) {}
}
@@ -13,5 +13,5 @@ open class Keker<P> {
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {}
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
}
@@ -13,5 +13,5 @@ open class Keker<P> {
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>props: Int<!>) {}
override fun child(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>props: Int<!>) {}
}
@@ -0,0 +1,23 @@
// ISSUE: KT-60269
// WITH_STDLIB
interface Foo {
fun foo(param: Int = 1)
}
interface Bar {
fun foo(param: Int = 2)
}
interface Baz1 : Bar
class Baz : Baz1, Foo {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>param: Int<!>) {
println(param)
}
}
fun main() {
Baz().foo()
(Baz() as Foo).foo()
}
@@ -0,0 +1,23 @@
// ISSUE: KT-60269
// WITH_STDLIB
interface Foo {
fun foo(param: Int = 1)
}
interface Bar {
fun foo(param: Int = 2)
}
interface Baz1 : Bar
class Baz : Baz1, Foo {
override fun foo(param: Int) {
println(param)
}
}
fun main() {
Baz().foo()
(Baz() as Foo).foo()
}
@@ -0,0 +1,22 @@
// FIR_IDENTICAL
// ISSUE: KT-60269
// WITH_STDLIB
interface Foo {
fun foo(param: Int = 1)
}
interface Bar {
fun foo(param: Int = 2)
}
class Baz : Bar, Foo {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>param: Int<!>) {
println(param)
}
}
fun main() {
Baz().foo()
(Baz() as Foo).foo()
}
@@ -0,0 +1,19 @@
// FIR_IDENTICAL
// ISSUE: KT-57076
// WITH_STDLIB
interface I01 {
fun some(x: Int = 1, y: Int)
}
open class C01 {
open fun some(x: Int = -1, y: Int = 2) {
println("x = $x y = $y")
}
}
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>class C02<!>: C01(), I01
fun main(){
C02().some() // K2: x = -1 y = 2
}
@@ -0,0 +1,14 @@
// FIR_IDENTICAL
// ISSUE: KT-36188
interface A {
fun foo(a: String = "Fail"): String
}
interface B {
fun foo(a: String = "OK"): String
}
class Impl : A, B {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>a: String<!>) = a
}
fun box(): String = Impl().foo()
@@ -0,0 +1,14 @@
// ISSUE: KT-36188
interface A {
fun foo(a: String = "Fail"): String
}
interface A2 : A
interface B {
fun foo(a: String = "OK"): String
}
class Impl : A2, B {
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_DEPRECATION_WARNING!>a: String<!>) = a
}
fun box(): String = Impl().foo()
@@ -0,0 +1,14 @@
// ISSUE: KT-36188
interface A {
fun foo(a: String = "Fail"): String
}
interface A2 : A
interface B {
fun foo(a: String = "OK"): String
}
class Impl : A2, B {
override fun foo(a: String) = a
}
fun box(): String = Impl().foo()