[FIR] Adapt VAL_OR_VAR strategy & use it in CanBeValChecker
This commit is contained in:
+1
-3
@@ -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.checkers.getChildren
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
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.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
|
import org.jetbrains.kotlin.fir.resolve.dfa.cfg.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
|
||||||
|
|
||||||
object CanBeValChecker : AbstractFirPropertyInitializationChecker() {
|
object CanBeValChecker : AbstractFirPropertyInitializationChecker() {
|
||||||
override fun analyze(
|
override fun analyze(
|
||||||
@@ -42,7 +40,7 @@ object CanBeValChecker : AbstractFirPropertyInitializationChecker() {
|
|||||||
var lastDestructuredVariables = 0
|
var lastDestructuredVariables = 0
|
||||||
|
|
||||||
for ((symbol, value) in propertiesCharacteristics) {
|
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) {
|
if (symbol.isDestructuring) {
|
||||||
lastDestructuringSource = source
|
lastDestructuringSource = source
|
||||||
lastDestructuredVariables = symbol.getDestructuringChildrenCount() ?: continue
|
lastDestructuredVariables = symbol.getDestructuringChildrenCount() ?: continue
|
||||||
|
|||||||
+1
-1
@@ -159,7 +159,7 @@ object FirErrors {
|
|||||||
val REDUNDANT_RETURN_UNIT_TYPE by warning0<FirSourceElement, PsiTypeElement>()
|
val REDUNDANT_RETURN_UNIT_TYPE by warning0<FirSourceElement, PsiTypeElement>()
|
||||||
val REDUNDANT_EXPLICIT_TYPE by warning0<FirSourceElement, PsiElement>()
|
val REDUNDANT_EXPLICIT_TYPE by warning0<FirSourceElement, PsiElement>()
|
||||||
val REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE by warning0<FirSourceElement, PsiElement>()
|
val REDUNDANT_SINGLE_EXPRESSION_STRING_TEMPLATE by warning0<FirSourceElement, PsiElement>()
|
||||||
val CAN_BE_VAL by warning0<FirSourceElement, PsiElement>()
|
val CAN_BE_VAL by warning0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE)
|
||||||
val CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT by warning0<FirSourceElement, KtExpression>(SourceElementPositioningStrategies.OPERATOR)
|
val CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT by warning0<FirSourceElement, KtExpression>(SourceElementPositioningStrategies.OPERATOR)
|
||||||
val REDUNDANT_CALL_OF_CONVERSION_METHOD by warning0<FirSourceElement, PsiElement>()
|
val REDUNDANT_CALL_OF_CONVERSION_METHOD by warning0<FirSourceElement, PsiElement>()
|
||||||
val ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS by warning0<FirSourceElement, KtExpression>(SourceElementPositioningStrategies.OPERATOR)
|
val ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS by warning0<FirSourceElement, KtExpression>(SourceElementPositioningStrategies.OPERATOR)
|
||||||
|
|||||||
@@ -477,11 +477,12 @@ object PositioningStrategies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@JvmField
|
@JvmField
|
||||||
val VAL_OR_VAR_NODE: PositioningStrategy<KtNamedDeclaration> = object : PositioningStrategy<KtNamedDeclaration>() {
|
val VAL_OR_VAR_NODE: PositioningStrategy<KtDeclaration> = object : PositioningStrategy<KtDeclaration>() {
|
||||||
override fun mark(element: KtNamedDeclaration): List<TextRange> {
|
override fun mark(element: KtDeclaration): List<TextRange> {
|
||||||
return when (element) {
|
return when (element) {
|
||||||
is KtParameter -> markElement(element.valOrVarKeyword ?: element)
|
is KtParameter -> markElement(element.valOrVarKeyword ?: element)
|
||||||
is KtProperty -> markElement(element.valOrVarKeyword)
|
is KtProperty -> markElement(element.valOrVarKeyword)
|
||||||
|
is KtDestructuringDeclaration -> markElement(element.valOrVarKeyword ?: element)
|
||||||
else -> error("Declaration is neither a parameter nor a property: " + element.getElementTextWithContext())
|
else -> error("Declaration is neither a parameter nor a property: " + element.getElementTextWithContext())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user