[FIR] K2: Fix introduced diagnostic UNDERSCORE_USAGE_WITHOUT_BACKTICKS

^KT-60105 Fixed


Merge-request: KT-MR-12214
Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
Vladimir Sukharev
2023-09-15 16:37:50 +00:00
committed by Space Team
parent 5e8741db1a
commit 56b951152f
3 changed files with 19 additions and 8 deletions
@@ -10,16 +10,19 @@ import org.jetbrains.kotlin.fir.analysis.checkers.checkUnderscoreDiagnostics
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.isUnderscore
import org.jetbrains.kotlin.fir.diagnostics.ConeUnderscoreUsageWithoutBackticks
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.toResolvedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
object FirUnderscoreChecker : FirBasicExpressionChecker() {
override fun check(expression: FirStatement, context: CheckerContext, reporter: DiagnosticReporter) {
when (expression) {
is FirResolvable -> {
checkUnderscoreDiagnostics(expression.calleeReference.source, context, reporter, true)
if (diagnosticsCheckNeeded(expression)) {
checkUnderscoreDiagnostics(expression.calleeReference.source, context, reporter, true)
}
}
is FirResolvedQualifier -> {
for (reservedUnderscoreDiagnostic in expression.nonFatalDiagnostics) {
@@ -30,4 +33,12 @@ object FirUnderscoreChecker : FirBasicExpressionChecker() {
}
}
}
}
private fun diagnosticsCheckNeeded(expression: FirResolvable): Boolean {
return when (expression) {
is FirImplicitInvokeCall -> expression.calleeReference.name.asString().isUnderscore
is FirCall -> expression.calleeReference.toResolvedSymbol<FirFunctionSymbol<*>>()?.callableId?.callableName?.asString()?.isUnderscore == true
else -> true
}
}
}
+1 -1
View File
@@ -2,7 +2,7 @@
import kotlin.Deprecated as <!UNDERSCORE_IS_RESERVED!>___<!>
@<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>___<!>("") data class Pair(val x: Int, val y: Int)
@___("") data class Pair(val x: Int, val y: Int)
class <!UNDERSCORE_IS_RESERVED!>_<!><<!UNDERSCORE_IS_RESERVED!>________<!>>
val <!UNDERSCORE_IS_RESERVED!>______<!> = <!UNDERSCORE_USAGE_WITHOUT_BACKTICKS!>_<!><Int>()
@@ -54,8 +54,8 @@ fun test() {
x10 as <!UNRESOLVED_REFERENCE!>_<!>
x10 <!CAST_NEVER_SUCCEEDS!>as<!> Foo<<!UNRESOLVED_REFERENCE!>_<!>>
val x12: Foo<@<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!> Int>? = null
val x13: Foo<@<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>() Int>? = null
val x12: Foo<@<!UNRESOLVED_REFERENCE!>_<!> Int>? = null
val x13: Foo<@<!UNRESOLVED_REFERENCE!>_<!>() Int>? = null
val x14: Foo<@Anno(<!UNDERSCORE_USAGE_WITHOUT_BACKTICKS, UNRESOLVED_REFERENCE!>_<!>) Int>? = null
val x15: <!UNRESOLVED_REFERENCE!>_<!><<!UNRESOLVED_REFERENCE!>_<!>>? = null