Rename: FirSourceElement.getChildren() -> getChild() + minor fixes
This commit is contained in:
@@ -9,32 +9,32 @@ import com.intellij.psi.tree.IElementType
|
|||||||
import com.intellij.psi.tree.TokenSet
|
import com.intellij.psi.tree.TokenSet
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
|
|
||||||
fun FirSourceElement.getChildren(type: IElementType, index: Int = 0, depth: Int = -1): FirSourceElement? {
|
fun FirSourceElement.getChild(type: IElementType, index: Int = 0, depth: Int = -1): FirSourceElement? {
|
||||||
return getChildren(setOf(type), index, depth)
|
return getChild(setOf(type), index, depth)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSourceElement.getChildren(types: TokenSet, index: Int = 0, depth: Int = -1): FirSourceElement? {
|
fun FirSourceElement.getChild(types: TokenSet, index: Int = 0, depth: Int = -1): FirSourceElement? {
|
||||||
return getChildren(types.types.toSet(), index, depth)
|
return getChild(types.types.toSet(), index, depth)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSourceElement.getChildren(types: Set<IElementType>, index: Int = 0, depth: Int = -1): FirSourceElement? {
|
fun FirSourceElement.getChild(types: Set<IElementType>, index: Int = 0, depth: Int = -1): FirSourceElement? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is FirPsiSourceElement<*> -> {
|
is FirPsiSourceElement<*> -> {
|
||||||
getChildren(types, index, depth)
|
getChild(types, index, depth)
|
||||||
}
|
}
|
||||||
is FirLightSourceElement -> {
|
is FirLightSourceElement -> {
|
||||||
getChildren(types, index, depth)
|
getChild(types, index, depth)
|
||||||
}
|
}
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirPsiSourceElement<*>.getChildren(types: Set<IElementType>, index: Int, depth: Int): FirSourceElement? {
|
private fun FirPsiSourceElement<*>.getChild(types: Set<IElementType>, index: Int, depth: Int): FirSourceElement? {
|
||||||
val visitor = PsiElementFinderByType(types, index, depth)
|
val visitor = PsiElementFinderByType(types, index, depth)
|
||||||
return visitor.find(psi)?.toFirPsiSourceElement()
|
return visitor.find(psi)?.toFirPsiSourceElement()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirLightSourceElement.getChildren(types: Set<IElementType>, index: Int, depth: Int): FirSourceElement? {
|
private fun FirLightSourceElement.getChild(types: Set<IElementType>, index: Int, depth: Int): FirSourceElement? {
|
||||||
val visitor = LighterTreeElementFinderByType(tree, types, index, depth)
|
val visitor = LighterTreeElementFinderByType(tree, types, index, depth)
|
||||||
|
|
||||||
return visitor.find(lightNode)?.let { it.toFirLightSourceElement(it.startOffset, it.endOffset, tree) }
|
return visitor.find(lightNode)?.let { it.toFirLightSourceElement(it.startOffset, it.endOffset, tree) }
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirBasicExpresionChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirBasicExpresionChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS
|
||||||
import org.jetbrains.kotlin.fir.analysis.getChildren
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
@@ -29,7 +29,7 @@ object ArrayEqualityCanBeReplacedWithEquals : FirBasicExpresionChecker() {
|
|||||||
if (left.typeRef.coneType.classId != StandardClassIds.Array) return
|
if (left.typeRef.coneType.classId != StandardClassIds.Array) return
|
||||||
if (right.typeRef.coneType.classId != StandardClassIds.Array) return
|
if (right.typeRef.coneType.classId != StandardClassIds.Array) return
|
||||||
|
|
||||||
val source = expression.source?.getChildren(setOf(KtTokens.EQEQ, KtTokens.EXCLEQ))
|
val source = expression.source?.getChild(setOf(KtTokens.EQEQ, KtTokens.EXCLEQ))
|
||||||
reporter.report(source, ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS)
|
reporter.report(source, ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirExpressionChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirExpressionChecker
|
||||||
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.getChildren
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
||||||
import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol
|
||||||
@@ -62,7 +62,7 @@ object CanBeReplacedWithOperatorAssignmentChecker : FirExpressionChecker<FirVari
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (needToReport) {
|
if (needToReport) {
|
||||||
val source = expression.source?.getChildren(setOf(KtTokens.EQ))
|
val source = expression.source?.getChild(setOf(KtTokens.EQ))
|
||||||
reporter.report(source, FirErrors.CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT)
|
reporter.report(source, FirErrors.CAN_BE_REPLACED_WITH_OPERATOR_ASSIGNMENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.analysis.cfa.TraverseDirection
|
|||||||
import org.jetbrains.kotlin.fir.analysis.cfa.traverse
|
import org.jetbrains.kotlin.fir.analysis.cfa.traverse
|
||||||
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.getChildren
|
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
|
||||||
@@ -48,7 +48,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?.getChildren(setOf(KtTokens.VAL_KEYWORD, KtTokens.VAR_KEYWORD), depth = 1)
|
val source = symbol.fir.source?.getChild(setOf(KtTokens.VAL_KEYWORD, KtTokens.VAR_KEYWORD), depth = 1)
|
||||||
if (symbol.isDestructuring) {
|
if (symbol.isDestructuring) {
|
||||||
lastDestructuringSource = source
|
lastDestructuringSource = source
|
||||||
lastDestructuredVariables = symbol.getDestructuringChildrenCount() ?: continue
|
lastDestructuredVariables = symbol.getDestructuringChildrenCount() ?: continue
|
||||||
|
|||||||
+2
-15
@@ -8,20 +8,16 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.FirModifier
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.implicitModality
|
import org.jetbrains.kotlin.fir.analysis.checkers.implicitModality
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.source
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.toToken
|
import org.jetbrains.kotlin.fir.analysis.checkers.toToken
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.REDUNDANT_MODALITY_MODIFIER
|
||||||
import org.jetbrains.kotlin.fir.analysis.getChildren
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.modality
|
import org.jetbrains.kotlin.fir.declarations.modality
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
|
||||||
|
|
||||||
object RedundantModalityModifierChecker : FirMemberDeclarationChecker() {
|
object RedundantModalityModifierChecker : FirMemberDeclarationChecker() {
|
||||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
@@ -37,16 +33,7 @@ object RedundantModalityModifierChecker : FirMemberDeclarationChecker() {
|
|||||||
|
|
||||||
if (modality != implicitModality) return
|
if (modality != implicitModality) return
|
||||||
|
|
||||||
val modalityModifierSource = declaration.source?.getChildren(modality.toToken(), depth = 2)
|
val modalityModifierSource = declaration.source?.getChild(modality.toToken(), depth = 2)
|
||||||
reporter.report(modalityModifierSource, REDUNDANT_MODALITY_MODIFIER)
|
reporter.report(modalityModifierSource, REDUNDANT_MODALITY_MODIFIER)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Collection<FirModifier<*>>.modalitySource(): FirSourceElement? {
|
|
||||||
return this.firstOrNull {
|
|
||||||
it.token == KtTokens.FINAL_KEYWORD
|
|
||||||
|| it.token == KtTokens.OPEN_KEYWORD
|
|
||||||
|| it.token == KtTokens.SEALED_KEYWORD
|
|
||||||
|| it.token == KtTokens.ABSTRACT_KEYWORD
|
|
||||||
}?.source
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-6
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
||||||
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.getChildren
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -56,7 +56,7 @@ object RedundantVisibilityModifierChecker : FirBasicDeclarationChecker() {
|
|||||||
&& declaration.setter?.visibility == Visibilities.Public
|
&& declaration.setter?.visibility == Visibilities.Public
|
||||||
) return
|
) return
|
||||||
|
|
||||||
reporter.report(declaration.source?.getChildren(KtTokens.VISIBILITY_MODIFIERS), FirErrors.REDUNDANT_VISIBILITY_MODIFIER)
|
reporter.report(declaration.source?.getChild(KtTokens.VISIBILITY_MODIFIERS), FirErrors.REDUNDANT_VISIBILITY_MODIFIER)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirDeclaration.implicitVisibility(context: CheckerContext): Visibility {
|
private fun FirDeclaration.implicitVisibility(context: CheckerContext): Visibility {
|
||||||
@@ -127,10 +127,6 @@ object RedundantVisibilityModifierChecker : FirBasicDeclarationChecker() {
|
|||||||
private val CheckerContext.containingPropertyVisibility
|
private val CheckerContext.containingPropertyVisibility
|
||||||
get() = (this.containingDeclarations.last() as? FirProperty)?.visibility
|
get() = (this.containingDeclarations.last() as? FirProperty)?.visibility
|
||||||
|
|
||||||
|
|
||||||
private val FirModifier<*>.isVisibilityModifier
|
|
||||||
get() = this.token.toVisibilityOrNull() != null
|
|
||||||
|
|
||||||
private fun List<FirLightModifier>.visibilityOrNull() =
|
private fun List<FirLightModifier>.visibilityOrNull() =
|
||||||
firstOrNull { it.token.toVisibilityOrNull() != null }?.token?.toVisibilityOrNull()
|
firstOrNull { it.token.toVisibilityOrNull() != null }?.token?.toVisibilityOrNull()
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClass
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.isIterator
|
import org.jetbrains.kotlin.fir.analysis.checkers.isIterator
|
||||||
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.getChildren
|
import org.jetbrains.kotlin.fir.analysis.getChild
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||||
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.*
|
||||||
@@ -203,5 +203,5 @@ object UnusedChecker : FirControlFlowChecker() {
|
|||||||
get() = fir.initializer?.source?.kind == FirFakeSourceElementKind.DesugaredForLoop
|
get() = fir.initializer?.source?.kind == FirFakeSourceElementKind.DesugaredForLoop
|
||||||
|
|
||||||
private val FirPropertySymbol.identifierSource: FirSourceElement?
|
private val FirPropertySymbol.identifierSource: FirSourceElement?
|
||||||
get() = fir.source?.getChildren(KtTokens.IDENTIFIER, 0, 1)
|
get() = fir.source?.getChild(KtTokens.IDENTIFIER, 0, 1)
|
||||||
}
|
}
|
||||||
+3
-3
@@ -343,10 +343,10 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension {
|
|||||||
map.put(ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS, "Replace '==' with 'Arrays.equals'")
|
map.put(ARRAY_EQUALITY_OPERATOR_CAN_BE_REPLACED_WITH_EQUALS, "Replace '==' with 'Arrays.equals'")
|
||||||
map.put(EMPTY_RANGE, "Range is empty")
|
map.put(EMPTY_RANGE, "Range is empty")
|
||||||
map.put(REDUNDANT_SETTER_PARAMETER_TYPE, "Redundant setter parameter type")
|
map.put(REDUNDANT_SETTER_PARAMETER_TYPE, "Redundant setter parameter type")
|
||||||
map.put(UNUSED_VARIABLE, "Unused variable")
|
map.put(UNUSED_VARIABLE, "Variable is unused")
|
||||||
map.put(ASSIGNED_VALUE_IS_NEVER_READ, "Assigned value is never read")
|
map.put(ASSIGNED_VALUE_IS_NEVER_READ, "Assigned value is never read")
|
||||||
map.put(VARIABLE_INITIALIZER_IS_REDUNDANT, "Initialized is redundant")
|
map.put(VARIABLE_INITIALIZER_IS_REDUNDANT, "Initializer is redundant")
|
||||||
map.put(VARIABLE_NEVER_READ, "Variable never read")
|
map.put(VARIABLE_NEVER_READ, "Variable is never read")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user