[FIR] Support of REDECLARATION for local val/var, ^KT-54405 Fixed

This commit is contained in:
Ivan Kochurkin
2022-12-01 15:08:34 +01:00
committed by Space Team
parent 879deb90fc
commit e49bb1fe37
30 changed files with 201 additions and 85 deletions
+2 -2
View File
@@ -12,12 +12,12 @@ fun <!UNDERSCORE_IS_RESERVED!>__<!>(<!UNDERSCORE_IS_RESERVED!>___<!>: Int, y: <!
val (x, <!UNDERSCORE_IS_RESERVED!>__________<!>) = Pair(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>___<!> - 1, 42)
val <!UNDERSCORE_IS_RESERVED!>____<!> = x
// in backquotes: allowed
val `_` = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>__________<!>
val <!REDECLARATION!>`_`<!> = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>__________<!>
val q = fun(_: Int, <!UNDERSCORE_IS_RESERVED!>__<!>: Int) {}
q(1, 2)
val <!UNDERSCORE_IS_RESERVED!>_<!> = 56
val <!REDECLARATION, UNDERSCORE_IS_RESERVED!>_<!> = 56
fun localFun(<!UNDERSCORE_IS_RESERVED!>_<!>: String) = 1
@@ -4,11 +4,11 @@ class A {
}
fun a() {
val (a, a) = A()
val (x, y) = A();
val b = 1
val (<!REDECLARATION!>a<!>, <!REDECLARATION!>a<!>) = A()
val (x, <!REDECLARATION!>y<!>) = A();
val <!REDECLARATION!>b<!> = 1
use(b)
val (b, y) = A();
val (<!REDECLARATION!>b<!>, <!REDECLARATION!>y<!>) = A();
}
@@ -8,7 +8,7 @@ class C {
}
fun test() {
for ((x, x) in C()) {
for ((<!REDECLARATION!>x<!>, <!REDECLARATION!>x<!>) in C()) {
}
}
@@ -36,11 +36,11 @@ fun test() {
foo(x, <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>)
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>, y)
val (`_`, z) = A()
val (<!REDECLARATION!>`_`<!>, z) = A()
foo(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>, z)
val (_, `_`) = A()
val (_, <!REDECLARATION!>`_`<!>) = A()
foo(<!ARGUMENT_TYPE_MISMATCH, UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>, y)
@@ -6,7 +6,7 @@ data class B(val u: Double, val w: Short)
fun foo(block: (A, B) -> Unit) { }
fun bar() {
foo { (a, a), b ->
foo { (<!REDECLARATION!>a<!>, <!REDECLARATION!>a<!>), b ->
a checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Int>() }
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
}
@@ -21,7 +21,7 @@ fun bar() {
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
}
foo { (a, b), (c, b) ->
foo { (a, <!REDECLARATION!>b<!>), (c, <!REDECLARATION!>b<!>) ->
a checkType { _<Int>() }
b checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><String>() }
c checkType { <!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><B>() }
@@ -46,7 +46,7 @@ fun bar() {
_ checkType { _<String>() }
}
foo { (`_`, `_`) ->
foo { (<!REDECLARATION!>`_`<!>, <!REDECLARATION!>`_`<!>) ->
_ checkType { _<String>() }
}
@@ -0,0 +1,28 @@
// ISSUE: KT-54405
class A {
operator fun component1() = 1
operator fun component2() = ""
}
fun test(b: Boolean) {
val <!REDECLARATION!>y<!> = 1
val <!REDECLARATION!>y<!> = 2
val <!REDECLARATION!>`_`<!> = 3
val <!REDECLARATION!>`_`<!> = 4
{
var <!REDECLARATION!>a<!> = 10
var <!REDECLARATION!>a<!> = 11
}
if (b) {
val z = 3
val <!REDECLARATION!>x<!> = 5
val <!REDECLARATION!>x<!> = 6
} else {
val z = 4
}
}
fun test2() {
val (`_`, _) = A()
}
@@ -0,0 +1,28 @@
// ISSUE: KT-54405
class A {
operator fun component1() = 1
operator fun component2() = ""
}
fun test(b: Boolean) {
val <!REDECLARATION!>y<!> = 1
val <!NAME_SHADOWING, REDECLARATION!>y<!> = 2
val <!REDECLARATION!>`_`<!> = 3
val <!NAME_SHADOWING, REDECLARATION!>`_`<!> = 4
{
var <!REDECLARATION!>a<!> = 10
var <!NAME_SHADOWING, REDECLARATION!>a<!> = 11
}
if (b) {
val z = 3
val <!REDECLARATION!>x<!> = 5
val <!NAME_SHADOWING, REDECLARATION!>x<!> = 6
} else {
val z = 4
}
}
fun test2() {
val (`_`, _) = A()
}
@@ -0,0 +1,14 @@
package
public fun test(/*0*/ b: kotlin.Boolean): kotlin.Unit
public fun test2(): kotlin.Unit
public final class A {
public constructor A()
public final operator fun component1(): kotlin.Int
public final operator fun component2(): 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 toString(): kotlin.String
}
@@ -35,8 +35,8 @@ fun test3() {
fun test4() {
try {}
catch (e: Exception) {
val a = 42
val a = "foo"
val <!REDECLARATION!>a<!> = 42
val <!REDECLARATION!>a<!> = "foo"
}
}