[FIR] Revert FirMultipleDefaultsInheritedFromSupertypesChecker

It's possible to write a fix that
would prevent false positives with
this checker, but the core
intuition behind it is invalid.

This checker assumes that it's
enough to only check direct
overriddens, while in reality
even simple `Source` override
functions are not allowed to
contain default values, so they
can't be used to make judgements
about them.

^KT-59408 Open
^KT-59408 Open

^KT-61095 Fixed
^KT-61165 Fixed
^KT-61029 Fixed
This commit is contained in:
Nikolay Lunyak
2023-08-10 08:23:00 +03:00
committed by Space Team
parent 2ce324f1fc
commit dc9ed5656e
31 changed files with 275 additions and 138 deletions
@@ -17,10 +17,10 @@ interface B {
fun foo(@An a: @An Int = @An 2)
}
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE("@An() a: @R|An|() Int = ...")!>class AB1<!> : A, B
class AB1 : A, B
@An
class AB2 : A, B {
@An
override fun foo(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES("@An() a: @R|An|() Int")!>@An a: @An Int<!>) {}
override fun foo(@An a: @An Int) {}
}
@@ -0,0 +1,14 @@
// FIR_IDENTICAL
// ISSUE: KT-61095
package org.example
interface Base<P> {
fun child(props: Int = 10)
}
interface Intermediate<P> : Base<P>
class Implementation<P>() : Intermediate<P>, Base<P> {
override fun child(props: Int) {}
}
@@ -0,0 +1,16 @@
// FIR_IDENTICAL
// 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) {}
}
@@ -0,0 +1,18 @@
// FIR_IDENTICAL
// ISSUE: KT-36188
interface SomeRandomBase<K> {
fun child(props: Int = 20)
}
interface SomeRandomOverride<J> : SomeRandomBase<J> {
override fun child(props: Int) {}
}
open class Keker<P> {
open fun child(props: Int = 10) {}
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(props: Int) {}
}
@@ -0,0 +1,18 @@
// FIR_IDENTICAL
// ISSUE: KT-36188
interface SomeRandomBase<K> {
fun child(props: Int = 20)
}
interface SomeRandomOverride<J> : SomeRandomBase<J> {
override abstract fun child(props: Int)
}
open class Keker<P> {
open fun child(props: Int = 10) {}
}
class Implementation<P>() : Keker<P>(), SomeRandomOverride<P> {
override fun child(props: Int) {}
}
@@ -0,0 +1,14 @@
// ISSUE: KT-61095
interface X {
fun foo(a : Int = 1) {}
}
interface Y {
fun foo(a : Int = 1) {}
}
object YImpl : Y
<!DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE!>class Z1<!> : X, Y by YImpl {}
<!DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE!>object Z1O<!> : X, Y by YImpl {}
@@ -0,0 +1,14 @@
// ISSUE: KT-61095
interface X {
fun foo(a : Int = 1) {}
}
interface Y {
fun foo(a : Int = 1) {}
}
object YImpl : Y
<!DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE, MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>class Z1<!> : X, Y by YImpl {}
<!DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE, MANY_IMPL_MEMBER_NOT_IMPLEMENTED, MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>object Z1O<!> : X, Y by YImpl {}
@@ -0,0 +1,15 @@
interface X {
fun foo(a : Int = 1)
}
interface Y {
fun foo(a : Int = 1)
}
class Z : X, Y {
override fun foo(a : Int) {}
}
object ZO : X, Y {
override fun foo(a : Int) {}
}
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
interface X {
fun foo(a : Int = 1)
}
@@ -1,15 +0,0 @@
interface X {
fun foo(a : Int = 1)
}
interface Y {
fun foo(a : Int = 1)
}
class Z : X, Y {
fun <!VIRTUAL_MEMBER_HIDDEN!>foo<!>(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>a : Int<!>) {}
}
object ZO : X, Y {
fun <!VIRTUAL_MEMBER_HIDDEN!>foo<!>(<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES!>a : Int<!>) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface X {
fun foo(a : Int = 1)
}
@@ -11,4 +11,4 @@ interface C {
}
// TODO DIFFERENT_NAMES_FOR_THE_SAME_PARAMETER_IN_SUPERTYPES reported twice
<!MULTIPLE_DEFAULTS_INHERITED_FROM_SUPERTYPES_WHEN_NO_EXPLICIT_OVERRIDE!>class Z<!> : A, B(), C
class Z : A, B(), C
@@ -0,0 +1,10 @@
interface X {
fun foo(a : Int = 1)
}
interface Y {
fun foo(a : Int = 1)
}
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Z1<!> : X, Y {} // BUG
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object Z1O<!> : X, Y {} // BUG
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
interface X {
fun foo(a : Int = 1)
}