[FIR] Prohibit statement-like expressions in expression context
^KT-61067 Fixed
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
// ISSUE: KT-61067
|
||||
// DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
|
||||
|
||||
fun main() {
|
||||
val storages: HashMap<String, String> = HashMap<String, String>()
|
||||
val a = <!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>storages<!NO_SET_METHOD!>["4"]<!> = ""<!> //K1 compile error - Kotlin: Assignments are not expressions, and only expressions are allowed in this context
|
||||
storages<!NO_SET_METHOD!>["4"]<!> = ""
|
||||
|
||||
var nonStorages: Int = 10
|
||||
val b = <!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>nonStorages = 20<!>
|
||||
nonStorages = 20
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// ISSUE: KT-61067
|
||||
// DIAGNOSTICS: -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE
|
||||
|
||||
fun main() {
|
||||
val storages: HashMap<String, String> = HashMap<String, String>()
|
||||
val a = <!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>storages<!NO_SET_METHOD!><!UNRESOLVED_REFERENCE!>[<!>"4"<!UNRESOLVED_REFERENCE!>]<!><!> = ""<!> //K1 compile error - Kotlin: Assignments are not expressions, and only expressions are allowed in this context
|
||||
storages<!NO_SET_METHOD!><!UNRESOLVED_REFERENCE!>[<!>"4"<!UNRESOLVED_REFERENCE!>]<!><!> = ""
|
||||
|
||||
var nonStorages: Int = 10
|
||||
val b = <!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>nonStorages = 20<!>
|
||||
nonStorages = 20
|
||||
}
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
fun test() {
|
||||
(d@ val bar = 2)
|
||||
(d@ <!EXPRESSION_EXPECTED!>val bar = 2<!>)
|
||||
}
|
||||
+4
-4
@@ -1,9 +1,9 @@
|
||||
fun foo() {
|
||||
class A
|
||||
<!CONFLICTING_OVERLOADS!>fun bar()<!> {}
|
||||
(<!CONFLICTING_OVERLOADS!>fun bar()<!> {})
|
||||
<!CONFLICTING_OVERLOADS!>fun A.foo()<!> {}
|
||||
(<!CONFLICTING_OVERLOADS!>fun A.foo()<!> {})
|
||||
fun bar() {}
|
||||
(<!ANONYMOUS_FUNCTION_WITH_NAME!>fun bar() {}<!>)
|
||||
fun A.foo() {}
|
||||
(<!ANONYMOUS_FUNCTION_WITH_NAME!>fun A.foo() {}<!>)
|
||||
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>run<!>(<!ANONYMOUS_FUNCTION_WITH_NAME!>fun foo() {}<!>)
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
//KT-629 Assignments are parsed as expressions.
|
||||
|
||||
package kt629
|
||||
|
||||
class A() {
|
||||
var p = "yeah"
|
||||
operator fun rem(other : A) : A {
|
||||
return A();
|
||||
}
|
||||
}
|
||||
|
||||
fun box() : Boolean {
|
||||
var c = A()
|
||||
val d = c;
|
||||
c %= A();
|
||||
return (c != d) && <!EXPRESSION_EXPECTED!>(c.p = "yeah")<!>
|
||||
}
|
||||
|
||||
|
||||
fun box2() : Boolean {
|
||||
var c = A()
|
||||
return <!EXPRESSION_EXPECTED!>(c.p = "yeah")<!> && true
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
//KT-629 Assignments are parsed as expressions.
|
||||
|
||||
package kt629
|
||||
|
||||
+12
-12
@@ -122,12 +122,12 @@ fun testWithSubject_bad_4(b: B) {
|
||||
}
|
||||
// also bad
|
||||
when (b) {
|
||||
<!EXPRESSION_EXPECTED!>(x = b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b += b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b -= b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b *= b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b /= b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b %= b)<!> -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>x = b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b += b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b -= b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b *= b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b /= b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b %= b<!>) -> {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,11 +226,11 @@ fun testWithRange_bad_4(b: B) {
|
||||
}
|
||||
// also bad
|
||||
when (b) {
|
||||
in <!EXPRESSION_EXPECTED!>(x = b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b += b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b -= b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b *= b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b /= b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b %= b)<!> -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>x = b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b += b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b -= b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b *= b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b /= b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b %= b<!>) -> {}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-12
@@ -122,12 +122,12 @@ fun testWithSubject_bad_4(b: B) {
|
||||
}
|
||||
// also bad
|
||||
when (b) {
|
||||
<!EXPRESSION_EXPECTED!>(x = b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b += b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b -= b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b *= b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b /= b)<!> -> {}
|
||||
<!EXPRESSION_EXPECTED!>(b %= b)<!> -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>x = b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b += b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b -= b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b *= b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b /= b<!>) -> {}
|
||||
(<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b %= b<!>) -> {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,11 +226,11 @@ fun testWithRange_bad_4(b: B) {
|
||||
}
|
||||
// also bad
|
||||
when (b) {
|
||||
in <!EXPRESSION_EXPECTED!>(x = b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b += b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b -= b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b *= b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b /= b)<!> -> {}
|
||||
in <!EXPRESSION_EXPECTED!>(b %= b)<!> -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>x = b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b += b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b -= b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b *= b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b /= b<!>) -> {}
|
||||
in (<!ASSIGNMENT_IN_EXPRESSION_CONTEXT!>b %= b<!>) -> {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user