diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt index 0525e53a240..f24ae12cb09 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt @@ -12,11 +12,9 @@ import org.jetbrains.kotlin.fir.analysis.cfa.* import org.jetbrains.kotlin.fir.analysis.checkers.getChildren import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors -import org.jetbrains.kotlin.fir.analysis.getChild import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.resolve.dfa.cfg.* import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol -import org.jetbrains.kotlin.lexer.KtTokens object CanBeValChecker : AbstractFirPropertyInitializationChecker() { override fun analyze( @@ -42,7 +40,7 @@ object CanBeValChecker : AbstractFirPropertyInitializationChecker() { var lastDestructuredVariables = 0 for ((symbol, value) in propertiesCharacteristics) { - val source = symbol.fir.source?.getChild(setOf(KtTokens.VAL_KEYWORD, KtTokens.VAR_KEYWORD), depth = 1) + val source = symbol.fir.source if (symbol.isDestructuring) { lastDestructuringSource = source lastDestructuredVariables = symbol.getDestructuringChildrenCount() ?: continue diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 7b31ea83432..ab2cfa3e2c0 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -159,7 +159,7 @@ object FirErrors { val REDUNDANT_RETURN_UNIT_TYPE by warning0() val REDUNDANT_EXPLICIT_TYPE by warning0() val REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE by warning0() - val CAN_BE_VAL by warning0() + val CAN_BE_VAL by warning0(SourceElementPositioningStrategies.VAL_OR_VAR_NODE) val CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT by warning0(SourceElementPositioningStrategies.OPERATOR) val REDUNDANT_CALL_OF_CONVERSION_METHOD by warning0() val ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS by warning0(SourceElementPositioningStrategies.OPERATOR) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt index ecbffa93870..545bd85c01b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/PositioningStrategies.kt @@ -477,11 +477,12 @@ object PositioningStrategies { } @JvmField - val VAL_OR_VAR_NODE: PositioningStrategy = object : PositioningStrategy() { - override fun mark(element: KtNamedDeclaration): List { + val VAL_OR_VAR_NODE: PositioningStrategy = object : PositioningStrategy() { + override fun mark(element: KtDeclaration): List { return when (element) { is KtParameter -> markElement(element.valOrVarKeyword ?: element) is KtProperty -> markElement(element.valOrVarKeyword) + is KtDestructuringDeclaration -> markElement(element.valOrVarKeyword ?: element) else -> error("Declaration is neither a parameter nor a property: " + element.getElementTextWithContext()) } }