[FIR] Rewrite redeclaration checks

#KT-60124 Fixed
#KT-60573 Fixed
This commit is contained in:
Kirill Rakhman
2023-07-20 11:17:02 +02:00
committed by Space Team
parent b56f84b533
commit 951b299268
55 changed files with 1075 additions and 837 deletions
@@ -1,5 +1,107 @@
// !LANGUAGE: +ContextReceivers
// FIR_IDENTICAL
package foo
val Int.<!REDECLARATION!>foo<!>: Int get() = 2
val Int.<!REDECLARATION!>foo<!>: Int get() = 3
val Int.<!REDECLARATION!>simple<!>: Int get() = 0
val Int.<!REDECLARATION!>simple<!>: Int get() = 0
val Int.differentTypes: Int get() = 0
val String.differentTypes: Int get() = 0
val <T> T.<!REDECLARATION!>sameNamedGenerics<!>: Int get() = 0
val <T> T.<!REDECLARATION!>sameNamedGenerics<!>: Int get() = 0
val <T> T.<!REDECLARATION!>differentlyNamedGenerics<!>: Int get() = 0
val <R> R.<!REDECLARATION!>differentlyNamedGenerics<!>: Int get() = 0
val <T> T.sameNamedGenericsDifferentBounds: Int get() = 0
val <T : Any> T.sameNamedGenericsDifferentBounds: String get() = ""
val <T> T.differentlyNamedGenericsDifferentBounds: Int get() = 0
val <R : Any> R.differentlyNamedGenericsDifferentBounds: String get() = ""
val <T> List<T>.sameNamedGenericsListDifferentBounds: Int get() = 0
val <T : Any> List<T>.sameNamedGenericsListDifferentBounds: String get() = ""
val <T> List<T>.differentlyNamedGenericsListDifferentBounds: Int get() = 0
val <R : Any> List<R>.differentlyNamedGenericsListDifferentBounds: String get() = ""
context(Int) val <!REDECLARATION!>simpleContextReceivers<!>: Int get() = 0
context(Int) val <!REDECLARATION!>simpleContextReceivers<!>: Int get() = 0
context(Int) val differentTypesContextReceivers: Int get() = 0
context(String) val differentTypesContextReceivers: Int get() = 0
context(T) val <T> <!REDECLARATION!>sameNamedGenericsContextReceivers<!>: Int get() = 0
context(T) val <T> <!REDECLARATION!>sameNamedGenericsContextReceivers<!>: Int get() = 0
context(T) val <T> <!REDECLARATION!>differentlyNamedGenericsContextReceivers<!>: Int get() = 0
context(R) val <R> <!REDECLARATION!>differentlyNamedGenericsContextReceivers<!>: Int get() = 0
context(T) val <T> sameNamedGenericsDifferentBoundsContextReceivers: Int get() = 0
context(T) val <T : Any> sameNamedGenericsDifferentBoundsContextReceivers: String get() = ""
context(T) val <T> differentlyNamedGenericsDifferentBoundsContextReceivers: Int get() = 0
context(R) val <R : Any> differentlyNamedGenericsDifferentBoundsContextReceivers: String get() = ""
context(List<T>) val <T> sameNamedGenericsListDifferentBoundsContextReceivers: Int get() = 0
context(List<T>) val <T : Any> sameNamedGenericsListDifferentBoundsContextReceivers: String get() = ""
context(List<T>) val <T> differentlyNamedGenericsListDifferentBoundsContextReceivers: Int get() = 0
context(List<R>) val <R : Any> differentlyNamedGenericsListDifferentBoundsContextReceivers: String get() = ""
val Int.extensionVsContextReceiver: Int get() = 0
context(Int) val extensionVsContextReceiver: String get() = ""
class C {
val Int.<!REDECLARATION!>simple<!>: Int get() = 0
val Int.<!REDECLARATION!>simple<!>: Int get() = 0
val Int.differentTypes: Int get() = 0
val String.differentTypes: Int get() = 0
val <T> T.<!REDECLARATION!>sameNamedGenerics<!>: Int get() = 0
val <T> T.<!REDECLARATION!>sameNamedGenerics<!>: Int get() = 0
val <T> T.<!REDECLARATION!>differentlyNamedGenerics<!>: Int get() = 0
val <R> R.<!REDECLARATION!>differentlyNamedGenerics<!>: Int get() = 0
val <T> T.sameNamedGenericsDifferentBounds: Int get() = 0
val <T : Any> T.sameNamedGenericsDifferentBounds: String get() = ""
val <T> T.differentlyNamedGenericsDifferentBounds: Int get() = 0
val <R : Any> R.differentlyNamedGenericsDifferentBounds: String get() = ""
val <T> List<T>.sameNamedGenericsListDifferentBounds: Int get() = 0
val <T : Any> List<T>.sameNamedGenericsListDifferentBounds: String get() = ""
val <T> List<T>.differentlyNamedGenericsListDifferentBounds: Int get() = 0
val <R : Any> List<R>.differentlyNamedGenericsListDifferentBounds: String get() = ""
context(Int) val <!REDECLARATION!>simpleContextReceivers<!>: Int get() = 0
context(Int) val <!REDECLARATION!>simpleContextReceivers<!>: Int get() = 0
context(Int) val differentTypesContextReceivers: Int get() = 0
context(String) val differentTypesContextReceivers: Int get() = 0
context(T) val <T> <!REDECLARATION!>sameNamedGenericsContextReceivers<!>: Int get() = 0
context(T) val <T> <!REDECLARATION!>sameNamedGenericsContextReceivers<!>: Int get() = 0
context(T) val <T> <!REDECLARATION!>differentlyNamedGenericsContextReceivers<!>: Int get() = 0
context(R) val <R> <!REDECLARATION!>differentlyNamedGenericsContextReceivers<!>: Int get() = 0
context(T) val <T> sameNamedGenericsDifferentBoundsContextReceivers: Int get() = 0
context(T) val <T : Any> sameNamedGenericsDifferentBoundsContextReceivers: String get() = ""
context(T) val <T> differentlyNamedGenericsDifferentBoundsContextReceivers: Int get() = 0
context(R) val <R : Any> differentlyNamedGenericsDifferentBoundsContextReceivers: String get() = ""
context(List<T>) val <T> sameNamedGenericsListDifferentBoundsContextReceivers: Int get() = 0
context(List<T>) val <T : Any> sameNamedGenericsListDifferentBoundsContextReceivers: String get() = ""
context(List<T>) val <T> differentlyNamedGenericsListDifferentBoundsContextReceivers: Int get() = 0
context(List<R>) val <R : Any> differentlyNamedGenericsListDifferentBoundsContextReceivers: String get() = ""
val Int.extensionVsContextReceiver: Int get() = 0
context(Int) val extensionVsContextReceiver: String get() = ""
}
@@ -1,6 +0,0 @@
package
package foo {
public val kotlin.Int.foo: kotlin.Int
public val kotlin.Int.foo: kotlin.Int
}
@@ -1,6 +0,0 @@
// FIR_IDENTICAL
// FILE: a.kt
fun main() {}
// FILE: b.kt
fun main() {}
@@ -1,4 +0,0 @@
package
public fun main(): kotlin.Unit
public fun main(): kotlin.Unit
@@ -0,0 +1,112 @@
// FIR_IDENTICAL
// ### INVALID
// FILE: invalid_noargs.kt
package invalid1
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
// FILE: invalid_array.kt
package invalid2
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
// FILE: invalid_vararg.kt
package invalid3
<!CONFLICTING_OVERLOADS!>fun main(vararg args: String)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(vararg args: String)<!> {}
// FILE: invalid_array_typealias.kt
package invalid4
typealias S = String
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(args: Array<S>)<!> {}
// FILE: invalid_noargs_suspend.kt
package invalid5
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
// FILE: invalid_array_suspend.kt
package invalid6
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: invalid_vararg_suspend.kt
package invalid7
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
// FILE: invalid_array_typealias_suspend.kt
package invalid8
typealias S = String
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<S>)<!> {}
// ### VALID
// FILE: valid_noargs.kt
package valid1
fun main() {}
// FILE: valid_noargs2.kt
package valid1
fun main() {}
// FILE: valid_array.kt
package valid2
fun main(args: Array<String>) {}
// FILE: valid_array2.kt
package valid2
fun main(args: Array<String>) {}
// FILE: valid_vararg.kt
package valid3
fun main(vararg args: String) {}
// FILE: valid_vararg2.kt
package valid3
fun main(vararg args: String) {}
// FILE: valid_array_typealias.kt
package valid4
fun main(args: Array<String>) {}
// FILE: valid_array_typealias2.kt
package valid4
typealias S = String
fun main(args: Array<S>) {}
// FILE: valid_noargs_suspend.kt
package valid5
suspend fun main() {}
// FILE: valid_noargs_suspend2.kt
package valid5
suspend fun main() {}
// FILE: valid_array_suspend.kt
package valid6
suspend fun main(args: Array<String>) {}
// FILE: valid_array_suspend2.kt
package valid6
suspend fun main(args: Array<String>) {}
// FILE: valid_vararg_suspend.kt
package valid7
suspend fun main(vararg args: String) {}
// FILE: valid_vararg_suspend2.kt
package valid7
suspend fun main(vararg args: String) {}
// FILE: valid_array_typealias_suspend.kt
package valid8
suspend fun main(args: Array<String>) {}
// FILE: valid_array_typealias_suspend2.kt
package valid8
typealias S = String
suspend fun main(args: Array<S>) {}
@@ -0,0 +1,113 @@
// !LANGUAGE: -ExtendedMainConvention
// ### INVALID
// FILE: invalid_noargs.kt
package invalid1
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
// FILE: invalid_array.kt
package invalid2
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
// FILE: invalid_vararg.kt
package invalid3
<!CONFLICTING_OVERLOADS!>fun main(vararg args: String)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(vararg args: String)<!> {}
// FILE: invalid_array_typealias.kt
package invalid4
typealias S = String
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(args: Array<S>)<!> {}
// FILE: invalid_noargs_suspend.kt
package invalid5
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
// FILE: invalid_array_suspend.kt
package invalid6
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: invalid_vararg_suspend.kt
package invalid7
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
// FILE: invalid_array_typealias_suspend.kt
package invalid8
typealias S = String
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<S>)<!> {}
// ### VALID
// FILE: valid_noargs.kt
package valid1
fun main() {}
// FILE: valid_noargs2.kt
package valid1
fun main() {}
// FILE: valid_array.kt
package valid2
fun main(args: Array<String>) {}
// FILE: valid_array2.kt
package valid2
fun main(args: Array<String>) {}
// FILE: valid_vararg.kt
package valid3
fun main(vararg args: String) {}
// FILE: valid_vararg2.kt
package valid3
fun main(vararg args: String) {}
// FILE: valid_array_typealias.kt
package valid4
fun main(args: Array<String>) {}
// FILE: valid_array_typealias2.kt
package valid4
typealias S = String
fun main(args: Array<S>) {}
// FILE: valid_noargs_suspend.kt
package valid5
suspend fun main() {}
// FILE: valid_noargs_suspend2.kt
package valid5
suspend fun main() {}
// FILE: valid_array_suspend.kt
package valid6
suspend fun main(args: Array<String>) {}
// FILE: valid_array_suspend2.kt
package valid6
suspend fun main(args: Array<String>) {}
// FILE: valid_vararg_suspend.kt
package valid7
suspend fun main(vararg args: String) {}
// FILE: valid_vararg_suspend2.kt
package valid7
suspend fun main(vararg args: String) {}
// FILE: valid_array_typealias_suspend.kt
package valid8
suspend fun main(args: Array<String>) {}
// FILE: valid_array_typealias_suspend2.kt
package valid8
typealias S = String
suspend fun main(args: Array<S>) {}
@@ -0,0 +1,113 @@
// !LANGUAGE: -ExtendedMainConvention
// ### INVALID
// FILE: invalid_noargs.kt
package invalid1
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
// FILE: invalid_array.kt
package invalid2
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
// FILE: invalid_vararg.kt
package invalid3
<!CONFLICTING_OVERLOADS!>fun main(vararg args: String)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(vararg args: String)<!> {}
// FILE: invalid_array_typealias.kt
package invalid4
typealias S = String
<!CONFLICTING_OVERLOADS!>fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>fun main(args: Array<S>)<!> {}
// FILE: invalid_noargs_suspend.kt
package invalid5
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
// FILE: invalid_array_suspend.kt
package invalid6
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: invalid_vararg_suspend.kt
package invalid7
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
// FILE: invalid_array_typealias_suspend.kt
package invalid8
typealias S = String
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<S>)<!> {}
// ### VALID
// FILE: valid_noargs.kt
package valid1
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
// FILE: valid_noargs2.kt
package valid1
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
// FILE: valid_array.kt
package valid2
fun main(args: Array<String>) {}
// FILE: valid_array2.kt
package valid2
fun main(args: Array<String>) {}
// FILE: valid_vararg.kt
package valid3
fun main(vararg args: String) {}
// FILE: valid_vararg2.kt
package valid3
fun main(vararg args: String) {}
// FILE: valid_array_typealias.kt
package valid4
fun main(args: Array<String>) {}
// FILE: valid_array_typealias2.kt
package valid4
typealias S = String
fun main(args: Array<S>) {}
// FILE: valid_noargs_suspend.kt
package valid5
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
// FILE: valid_noargs_suspend2.kt
package valid5
<!CONFLICTING_OVERLOADS!>suspend fun main()<!> {}
// FILE: valid_array_suspend.kt
package valid6
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: valid_array_suspend2.kt
package valid6
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: valid_vararg_suspend.kt
package valid7
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
// FILE: valid_vararg_suspend2.kt
package valid7
<!CONFLICTING_OVERLOADS!>suspend fun main(vararg args: String)<!> {}
// FILE: valid_array_typealias_suspend.kt
package valid8
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: valid_array_typealias_suspend2.kt
package valid8
typealias S = String
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<S>)<!> {}
@@ -1,6 +0,0 @@
// FIR_IDENTICAL
// FILE: a.kt
fun main() {}
// FILE: b.kt
fun main() {}
@@ -1,4 +0,0 @@
package
public fun main(): kotlin.Unit
public fun main(): kotlin.Unit
@@ -1,8 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: a.kt
fun main() {}
suspend fun main(args: Array<String>) {}
// FILE: b.kt
fun main() {}
@@ -1,8 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: a.kt
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
suspend fun main(args: Array<String>) {}
// FILE: b.kt
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
@@ -1,5 +0,0 @@
package
public fun main(): kotlin.Unit
public fun main(): kotlin.Unit
public suspend fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -1,7 +0,0 @@
// !LANGUAGE: -ExtendedMainConvention
// FILE: a.kt
fun main() {}
// FILE: b.kt
fun main() {}
@@ -1,7 +0,0 @@
// !LANGUAGE: -ExtendedMainConvention
// FILE: a.kt
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
// FILE: b.kt
<!CONFLICTING_OVERLOADS!>fun main()<!> {}
@@ -1,4 +0,0 @@
package
public fun main(): kotlin.Unit
public fun main(): kotlin.Unit
@@ -1,6 +0,0 @@
// FIR_IDENTICAL
// FILE: a.kt
suspend fun main() {}
// FILE: b.kt
suspend fun main() {}
@@ -1,4 +0,0 @@
package
public suspend fun main(): kotlin.Unit
public suspend fun main(): kotlin.Unit
@@ -1,7 +0,0 @@
// !LANGUAGE: -ExtendedMainConvention
// FILE: a.kt
suspend fun main(args: Array<String>) {}
// FILE: b.kt
suspend fun main(args: Array<String>) {}
@@ -1,7 +0,0 @@
// !LANGUAGE: -ExtendedMainConvention
// FILE: a.kt
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
// FILE: b.kt
<!CONFLICTING_OVERLOADS!>suspend fun main(args: Array<String>)<!> {}
@@ -1,4 +0,0 @@
package
public suspend fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
public suspend fun main(/*0*/ args: kotlin.Array<kotlin.String>): kotlin.Unit
@@ -1,3 +1,5 @@
// FILE: a.kt
val <!REDECLARATION!>Test1<!> = null
class <!REDECLARATION!>Test1<!>
@@ -10,4 +12,12 @@ object <!REDECLARATION!>Test3<!>
val <!REDECLARATION!>Test4<!> = null
class <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
interface <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
object <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
object <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
val <!REDECLARATION!>Test5<!> = null
class <!REDECLARATION!>Test6<!>
// FILE: b.kt
class <!REDECLARATION!>Test5<!>
val <!REDECLARATION!>Test6<!> = null
@@ -1,3 +1,5 @@
// FILE: a.kt
val <!REDECLARATION!>Test1<!> = null
class <!REDECLARATION!>Test1<!>
@@ -10,4 +12,12 @@ object <!REDECLARATION!>Test3<!>
val <!PACKAGE_OR_CLASSIFIER_REDECLARATION, REDECLARATION!>Test4<!> = null
class <!PACKAGE_OR_CLASSIFIER_REDECLARATION, REDECLARATION!>Test4<!>
interface <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
object <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
object <!PACKAGE_OR_CLASSIFIER_REDECLARATION!>Test4<!>
val <!REDECLARATION!>Test5<!> = null
class <!REDECLARATION!>Test6<!>
// FILE: b.kt
class <!REDECLARATION!>Test5<!>
val <!REDECLARATION!>Test6<!> = null
@@ -4,6 +4,8 @@ public val Test1: kotlin.Nothing? = null
public val Test2: kotlin.Nothing? = null
public val Test3: kotlin.Nothing? = null
public val Test4: kotlin.Nothing? = null
public val Test5: kotlin.Nothing? = null
public val Test6: kotlin.Nothing? = null
public final class Test1 {
public constructor Test1()
@@ -44,3 +46,18 @@ public object Test4 {
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Test5 {
public constructor Test5()
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 final class Test6 {
public constructor Test6()
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
}
@@ -1,16 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY
// FILE: file1.kt
typealias <!REDECLARATION!>Test<!> = String
val <!REDECLARATION!>Test<!> = 42
class Outer {
typealias <!REDECLARATION!>Test<!> = String
val <!REDECLARATION!>Test<!> = 42
}
typealias Test2 = String
// FILE: file2.kt
val Test2 = 42
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -TOPLEVEL_TYPEALIASES_ONLY
// FILE: file1.kt
typealias <!REDECLARATION!>Test<!> = String