FIR checker: introduce DECLARATION_SIGNATURE_OR_DEFAULT positioning strategy

and fix CONFLICTING_OVERLOADS to use it
This commit is contained in:
Jinseong Jeon
2021-01-19 16:46:06 -08:00
committed by Mikhail Glukhikh
parent 2e4daee1d4
commit f1d8a6e5d1
31 changed files with 126 additions and 128 deletions
@@ -1,6 +1,6 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
data class A(val x: Int, val y: String) {
<!CONFLICTING_OVERLOADS!>fun copy(x: Int, y: String) = x<!>
<!CONFLICTING_OVERLOADS!>fun copy(x: Int, y: String) = A(x, y)<!>
<!CONFLICTING_OVERLOADS!>fun copy(x: Int, y: String)<!> = x
<!CONFLICTING_OVERLOADS!>fun copy(x: Int, y: String)<!> = A(x, y)
}
@@ -7,8 +7,8 @@ class MyClass {
class MyClass2 {}
<!CONFLICTING_OVERLOADS!>fun MyClass2.component1() = 1.2<!>
<!CONFLICTING_OVERLOADS!>fun MyClass2.component1() = 1.3<!>
<!CONFLICTING_OVERLOADS!>fun MyClass2.component1()<!> = 1.2
<!CONFLICTING_OVERLOADS!>fun MyClass2.component1()<!> = 1.3
fun test(mc1: MyClass, mc2: MyClass2) {
val (<!INAPPLICABLE_CANDIDATE!>a<!>, <!UNRESOLVED_REFERENCE!>b<!>) = mc1
@@ -1,6 +1,6 @@
class A {
<!CONFLICTING_OVERLOADS!>operator fun component1() = 1<!>
<!CONFLICTING_OVERLOADS!>operator fun component1() = 1<!>
<!CONFLICTING_OVERLOADS!>operator fun component1()<!> = 1
<!CONFLICTING_OVERLOADS!>operator fun component1()<!> = 1
operator fun component2() = 1
}
@@ -7,11 +7,11 @@ expect fun foo()
// MODULE: m2-jvm(m1-common)
// FILE: jvm.kt
<!CONFLICTING_OVERLOADS!>actual fun foo() {}<!>
<!CONFLICTING_OVERLOADS!>actual fun foo() {}<!>
<!CONFLICTING_OVERLOADS!>actual fun foo()<!> {}
<!CONFLICTING_OVERLOADS!>actual fun foo()<!> {}
// MODULE: m3-js(m1-common)
// FILE: js.kt
<!CONFLICTING_OVERLOADS!>actual fun foo() {}<!>
<!CONFLICTING_OVERLOADS!>actual fun foo() {}<!>
<!CONFLICTING_OVERLOADS!>actual fun foo()<!> {}
<!CONFLICTING_OVERLOADS!>actual fun foo()<!> {}
@@ -4,6 +4,6 @@
<!CONFLICTING_OVERLOADS!>expect fun foo()<!>
<!CONFLICTING_OVERLOADS!>expect fun foo() {}<!>
<!CONFLICTING_OVERLOADS!>expect fun foo()<!> {}
expect fun bar() {}
@@ -1,6 +1,6 @@
class A {
<!CONFLICTING_OVERLOADS!>fun a(a: Int): Int = 0<!>
<!CONFLICTING_OVERLOADS!>fun a(a: Int): Int<!> = 0
<!CONFLICTING_OVERLOADS!>fun a(a: Int) {
}<!>
<!CONFLICTING_OVERLOADS!>fun a(a: Int)<!> {
}
}
@@ -1,7 +1,7 @@
package qwertyuiop
<!CONFLICTING_OVERLOADS!>fun c(s: String) {
}<!>
<!CONFLICTING_OVERLOADS!>fun c(s: String)<!> {
}
<!CONFLICTING_OVERLOADS!>fun c(s: String) {
}<!>
<!CONFLICTING_OVERLOADS!>fun c(s: String)<!> {
}
@@ -1,5 +1,5 @@
package extensionFunctions
<!CONFLICTING_OVERLOADS!>fun Int.qwe(a: Float) = 1<!>
<!CONFLICTING_OVERLOADS!>fun Int.qwe(a: Float)<!> = 1
<!CONFLICTING_OVERLOADS!>fun Int.qwe(a: Float) = 2<!>
<!CONFLICTING_OVERLOADS!>fun Int.qwe(a: Float)<!> = 2
@@ -1,7 +0,0 @@
class A() {
<!CONFLICTING_OVERLOADS!>fun b() {
}<!>
<!CONFLICTING_OVERLOADS!>fun b() {
}<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
class A() {
<!CONFLICTING_OVERLOADS!>fun b()<!> {
}
@@ -1,15 +0,0 @@
import java.io.Serializable
interface Test1 {
<!CONFLICTING_OVERLOADS!>fun <T> foo(t: T) where T : Cloneable, T : Serializable<!>
<!CONFLICTING_OVERLOADS!>fun <T> foo(t: T) where T : Serializable, T : Cloneable<!>
}
interface I1
interface I2 : I1
interface Test2 {
<!CONFLICTING_OVERLOADS!>fun <T> foo(t: T) where T : I1, T : I2<!>
<!CONFLICTING_OVERLOADS!>fun <T> foo(t: T) where T : I2, T : I1<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
import java.io.Serializable
interface Test1 {
@@ -1,8 +0,0 @@
interface Some {
fun test()
}
class SomeImpl : Some {
<!CONFLICTING_OVERLOADS!>override fun test() {}<!>
<!CONFLICTING_OVERLOADS!>override fun test() {}<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface Some {
fun test()
}
@@ -1,5 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// KT-9733 No error shown for 2 "main" functions in the same file
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>) {}<!>
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>) {}<!>
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
// KT-9733 No error shown for 2 "main" functions in the same file
@@ -14,16 +14,16 @@ private val invalidProp0 = 1
fun useInvalidFun0() = invalidFun0()
fun useInvalidProp0() = invalidProp0
<!CONFLICTING_OVERLOADS!>private fun invalidFun1() {}<!>
<!CONFLICTING_OVERLOADS!>private fun invalidFun1() {}<!>
<!CONFLICTING_OVERLOADS!>private fun invalidFun1()<!> {}
<!CONFLICTING_OVERLOADS!>private fun invalidFun1()<!> {}
<!CONFLICTING_OVERLOADS!>private fun invalidFun2() {}<!>
<!CONFLICTING_OVERLOADS!>public fun invalidFun2() {}<!>
<!CONFLICTING_OVERLOADS!>private fun invalidFun2()<!> {}
<!CONFLICTING_OVERLOADS!>public fun invalidFun2()<!> {}
public fun invalidFun3() {}
<!CONFLICTING_OVERLOADS!>private fun invalidFun4() {}<!>
<!CONFLICTING_OVERLOADS!>public fun invalidFun4() {}<!>
<!CONFLICTING_OVERLOADS!>private fun invalidFun4()<!> {}
<!CONFLICTING_OVERLOADS!>public fun invalidFun4()<!> {}
public fun validFun2(a: A) = a
public fun validFun2(b: B) = b
@@ -7,14 +7,14 @@
<!REDECLARATION!>val b : Int = 1<!>
<!REDECLARATION!>val b : Int = 1<!>
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here too
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here too
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun bar() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun bar() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun bar() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun bar()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun bar()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun bar()<!> {} // and here
class A {
<!REDECLARATION!>val a : Int = 1<!>
@@ -26,12 +26,12 @@ class A {
<!REDECLARATION!>val b : Int = 1<!>
<!REDECLARATION!>val b : Int = 1<!>
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here too
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun foo() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here too
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun foo()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun bar() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun bar() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun bar() {}<!> // and here
<!CONFLICTING_OVERLOADS!>fun bar()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun bar()<!> {} // and here
<!CONFLICTING_OVERLOADS!>fun bar()<!> {} // and here
}
@@ -3,32 +3,32 @@ package c
fun z(view: () -> Unit) {}
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x() = z { z { z { z { z { z { z { z { } } } } } } } }<!>
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
<!CONFLICTING_OVERLOADS!>fun x()<!> = z { z { z { z { z { z { z { z { } } } } } } } }
class x() {}
@@ -5,11 +5,11 @@ interface A {
}
interface B : A {
<!CONFLICTING_OVERLOADS!>suspend override fun foo() {
<!CONFLICTING_OVERLOADS!>suspend override fun foo()<!> {
}<!>
}
<!CONFLICTING_OVERLOADS!>override fun foo() {
<!CONFLICTING_OVERLOADS!>override fun foo()<!> {
}<!>
}
}
@@ -4,10 +4,10 @@
<!CONFLICTING_OVERLOADS!>@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.jvm.JvmName("containsAny")
<!HIDDEN!>@kotlin.internal.LowPriorityInOverloadResolution<!>
public fun <T> Iterable<T>.contains1(element: T): Int = null!!<!>
public fun <T> Iterable<T>.contains1(element: T): Int<!> = null!!
<!CONFLICTING_OVERLOADS!>@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
public fun <T> Iterable<T>.contains1(element: @kotlin.internal.NoInfer T): Boolean = null!!<!>
public fun <T> Iterable<T>.contains1(element: @kotlin.internal.NoInfer T): Boolean<!> = null!!
fun test() {
@@ -5,10 +5,10 @@
<!CONFLICTING_OVERLOADS!>@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@kotlin.jvm.JvmName("containsAny")
<!HIDDEN!>@kotlin.internal.LowPriorityInOverloadResolution<!>
public fun <T> Iterable<T>.contains1(element: T): Int = null!!<!>
public fun <T> Iterable<T>.contains1(element: T): Int<!> = null!!
<!CONFLICTING_OVERLOADS!>@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
public fun <<!HIDDEN!>@kotlin.internal.OnlyInputTypes<!> T> Iterable<T>.contains1(element: T): Boolean = null!!<!>
public fun <<!HIDDEN!>@kotlin.internal.OnlyInputTypes<!> T> Iterable<T>.contains1(element: T): Boolean<!> = null!!
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@JvmName("getAny")