Introduce warning about forbidden referencing to underscore named parameter of the catch block in a future release (KT-31567)

This commit is contained in:
Victor Petukhov
2020-09-28 13:40:36 +03:00
parent 09f1764f82
commit 8f333aef3a
18 changed files with 334 additions and 2 deletions
@@ -0,0 +1,57 @@
// !LANGUAGE: -ForbidReferencingToUnderscoreNamedParameterOfCatchBlock
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_ANONYMOUS_PARAMETER -UNUSED_EXPRESSION
fun foo() {
try {
TODO()
} catch (_: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
try {
TODO()
} catch (_: Exception) {
val x = {
val x2 = {
val x3 = { y: Int ->
val x4 = { _: Int ->
`_`
}
`_`
}
`_`
10
}
fun bar(x: Exception = `_`) {}
class Bar(`_`: Exception = `_`) {
inner class Bar2(x: Exception = `_`) { }
}
}
} catch (_: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
val y1 = _
val y2 = (`_`)
}
try {
TODO()
} catch (_: Exception) {
try {
TODO()
} catch (x: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
}
val boo1 = { `_`: Exception ->
try {
TODO()
} catch (x: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
}
val boo2 = { _: Exception ->
try {
TODO()
} catch (x: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
}
}
@@ -0,0 +1,57 @@
// !LANGUAGE: -ForbidReferencingToUnderscoreNamedParameterOfCatchBlock
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_ANONYMOUS_PARAMETER -UNUSED_EXPRESSION
fun foo() {
try {
TODO()
} catch (_: Exception) {
<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>.stackTrace
}
try {
TODO()
} catch (_: Exception) {
val x = {
val x2 = {
val x3 = { y: Int ->
val x4 = { _: Int ->
<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>
}
<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>
}
<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>
10
}
fun bar(x: Exception = <!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>) {}
class Bar(`_`: Exception = <!UNINITIALIZED_PARAMETER!>`_`<!>) {
inner class Bar2(x: Exception = <!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>) { }
}
}
} catch (_: Exception) {
<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>.stackTrace
val y1 = <!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER, UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!>
val y2 = (<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>)
}
try {
TODO()
} catch (_: Exception) {
try {
TODO()
} catch (x: Exception) {
<!RESOLVED_TO_UNDERSCORE_NAMED_CATCH_PARAMETER!>`_`<!>.stackTrace
}
}
val boo1 = { `_`: Exception ->
try {
TODO()
} catch (x: Exception) {
`_`.stackTrace
}
}
val boo2 = { _: Exception ->
try {
TODO()
} catch (x: Exception) {
<!UNRESOLVED_REFERENCE!>`_`<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>stackTrace<!>
}
}
}
@@ -0,0 +1,3 @@
package
public fun foo(): kotlin.Unit
@@ -0,0 +1,57 @@
// !LANGUAGE: +ForbidReferencingToUnderscoreNamedParameterOfCatchBlock
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_ANONYMOUS_PARAMETER -UNUSED_EXPRESSION
fun foo() {
try {
TODO()
} catch (_: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
try {
TODO()
} catch (_: Exception) {
val x = {
val x2 = {
val x3 = { y: Int ->
val x4 = { _: Int ->
`_`
}
`_`
}
`_`
10
}
fun bar(x: Exception = `_`) {}
class Bar(`_`: Exception = `_`) {
inner class Bar2(x: Exception = `_`) { }
}
}
} catch (_: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
val y1 = _
val y2 = (`_`)
}
try {
TODO()
} catch (_: Exception) {
try {
TODO()
} catch (x: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
}
val boo1 = { `_`: Exception ->
try {
TODO()
} catch (x: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
}
val boo2 = { _: Exception ->
try {
TODO()
} catch (x: Exception) {
`_`.<!UNRESOLVED_REFERENCE!>stackTrace<!>
}
}
}
@@ -0,0 +1,57 @@
// !LANGUAGE: +ForbidReferencingToUnderscoreNamedParameterOfCatchBlock
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -UNUSED_ANONYMOUS_PARAMETER -UNUSED_EXPRESSION
fun foo() {
try {
TODO()
} catch (_: Exception) {
<!UNRESOLVED_REFERENCE!>`_`<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>stackTrace<!>
}
try {
TODO()
} catch (_: Exception) {
val x = {
val x2 = {
val x3 = { y: Int ->
val x4 = { _: Int ->
<!UNRESOLVED_REFERENCE!>`_`<!>
}
<!UNRESOLVED_REFERENCE!>`_`<!>
}
<!UNRESOLVED_REFERENCE!>`_`<!>
10
}
fun bar(x: Exception = <!UNRESOLVED_REFERENCE!>`_`<!>) {}
class Bar(`_`: Exception = <!UNINITIALIZED_PARAMETER!>`_`<!>) {
inner class Bar2(x: Exception = <!UNRESOLVED_REFERENCE!>`_`<!>) { }
}
}
} catch (_: Exception) {
<!UNRESOLVED_REFERENCE!>`_`<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>stackTrace<!>
val y1 = <!UNRESOLVED_REFERENCE!>_<!>
val y2 = (<!UNRESOLVED_REFERENCE!>`_`<!>)
}
try {
TODO()
} catch (_: Exception) {
try {
TODO()
} catch (x: Exception) {
<!UNRESOLVED_REFERENCE!>`_`<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>stackTrace<!>
}
}
val boo1 = { `_`: Exception ->
try {
TODO()
} catch (x: Exception) {
`_`.stackTrace
}
}
val boo2 = { _: Exception ->
try {
TODO()
} catch (x: Exception) {
<!UNRESOLVED_REFERENCE!>`_`<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>stackTrace<!>
}
}
}
@@ -0,0 +1,3 @@
package
public fun foo(): kotlin.Unit