[FIR] Add specific checkers for each leaf expression type
This commit is contained in:
committed by
TeamCityServer
parent
d3ba821371
commit
1f1065d858
+7
@@ -46,6 +46,13 @@ fun main(args: Array<String>) {
|
||||
alias<FirStringConcatenationCall>("StringConcatenationCallChecker")
|
||||
alias<FirTypeOperatorCall>("TypeOperatorCallChecker")
|
||||
alias<FirResolvedQualifier>("ResolvedQualifierChecker")
|
||||
alias<FirConstExpression<*>>("ConstExpressionChecker")
|
||||
alias<FirCallableReferenceAccess>("CallableReferenceAccessChecker")
|
||||
alias<FirThisReceiverExpression>("ThisReceiverExpressionChecker")
|
||||
alias<FirWhileLoop>("WhileLoopChecker")
|
||||
alias<FirDoWhileLoop>("DoWhileLoopChecker")
|
||||
alias<FirArrayOfCall>("ArrayOfCallChecker")
|
||||
alias<FirClassReferenceExpression>("ClassReferenceExpressionChecker")
|
||||
}
|
||||
|
||||
val declarationPackage = "$basePackage.checkers.declaration"
|
||||
|
||||
+28
@@ -53,6 +53,20 @@ class ComposedExpressionCheckers : ExpressionCheckers() {
|
||||
get() = _typeOperatorCallCheckers
|
||||
override val resolvedQualifierCheckers: Set<FirResolvedQualifierChecker>
|
||||
get() = _resolvedQualifierCheckers
|
||||
override val constExpressionCheckers: Set<FirConstExpressionChecker>
|
||||
get() = _constExpressionCheckers
|
||||
override val callableReferenceAccessCheckers: Set<FirCallableReferenceAccessChecker>
|
||||
get() = _callableReferenceAccessCheckers
|
||||
override val thisReceiverExpressionCheckers: Set<FirThisReceiverExpressionChecker>
|
||||
get() = _thisReceiverExpressionCheckers
|
||||
override val whileLoopCheckers: Set<FirWhileLoopChecker>
|
||||
get() = _whileLoopCheckers
|
||||
override val doWhileLoopCheckers: Set<FirDoWhileLoopChecker>
|
||||
get() = _doWhileLoopCheckers
|
||||
override val arrayOfCallCheckers: Set<FirArrayOfCallChecker>
|
||||
get() = _arrayOfCallCheckers
|
||||
override val classReferenceExpressionCheckers: Set<FirClassReferenceExpressionChecker>
|
||||
get() = _classReferenceExpressionCheckers
|
||||
|
||||
private val _basicExpressionCheckers: MutableSet<FirBasicExpressionChecker> = mutableSetOf()
|
||||
private val _qualifiedAccessCheckers: MutableSet<FirQualifiedAccessChecker> = mutableSetOf()
|
||||
@@ -74,6 +88,13 @@ class ComposedExpressionCheckers : ExpressionCheckers() {
|
||||
private val _stringConcatenationCallCheckers: MutableSet<FirStringConcatenationCallChecker> = mutableSetOf()
|
||||
private val _typeOperatorCallCheckers: MutableSet<FirTypeOperatorCallChecker> = mutableSetOf()
|
||||
private val _resolvedQualifierCheckers: MutableSet<FirResolvedQualifierChecker> = mutableSetOf()
|
||||
private val _constExpressionCheckers: MutableSet<FirConstExpressionChecker> = mutableSetOf()
|
||||
private val _callableReferenceAccessCheckers: MutableSet<FirCallableReferenceAccessChecker> = mutableSetOf()
|
||||
private val _thisReceiverExpressionCheckers: MutableSet<FirThisReceiverExpressionChecker> = mutableSetOf()
|
||||
private val _whileLoopCheckers: MutableSet<FirWhileLoopChecker> = mutableSetOf()
|
||||
private val _doWhileLoopCheckers: MutableSet<FirDoWhileLoopChecker> = mutableSetOf()
|
||||
private val _arrayOfCallCheckers: MutableSet<FirArrayOfCallChecker> = mutableSetOf()
|
||||
private val _classReferenceExpressionCheckers: MutableSet<FirClassReferenceExpressionChecker> = mutableSetOf()
|
||||
|
||||
@CheckersComponentInternal
|
||||
fun register(checkers: ExpressionCheckers) {
|
||||
@@ -97,5 +118,12 @@ class ComposedExpressionCheckers : ExpressionCheckers() {
|
||||
_stringConcatenationCallCheckers += checkers.stringConcatenationCallCheckers
|
||||
_typeOperatorCallCheckers += checkers.typeOperatorCallCheckers
|
||||
_resolvedQualifierCheckers += checkers.resolvedQualifierCheckers
|
||||
_constExpressionCheckers += checkers.constExpressionCheckers
|
||||
_callableReferenceAccessCheckers += checkers.callableReferenceAccessCheckers
|
||||
_thisReceiverExpressionCheckers += checkers.thisReceiverExpressionCheckers
|
||||
_whileLoopCheckers += checkers.whileLoopCheckers
|
||||
_doWhileLoopCheckers += checkers.doWhileLoopCheckers
|
||||
_arrayOfCallCheckers += checkers.arrayOfCallCheckers
|
||||
_classReferenceExpressionCheckers += checkers.classReferenceExpressionCheckers
|
||||
}
|
||||
}
|
||||
|
||||
+14
@@ -37,6 +37,13 @@ abstract class ExpressionCheckers {
|
||||
open val stringConcatenationCallCheckers: Set<FirStringConcatenationCallChecker> = emptySet()
|
||||
open val typeOperatorCallCheckers: Set<FirTypeOperatorCallChecker> = emptySet()
|
||||
open val resolvedQualifierCheckers: Set<FirResolvedQualifierChecker> = emptySet()
|
||||
open val constExpressionCheckers: Set<FirConstExpressionChecker> = emptySet()
|
||||
open val callableReferenceAccessCheckers: Set<FirCallableReferenceAccessChecker> = emptySet()
|
||||
open val thisReceiverExpressionCheckers: Set<FirThisReceiverExpressionChecker> = emptySet()
|
||||
open val whileLoopCheckers: Set<FirWhileLoopChecker> = emptySet()
|
||||
open val doWhileLoopCheckers: Set<FirDoWhileLoopChecker> = emptySet()
|
||||
open val arrayOfCallCheckers: Set<FirArrayOfCallChecker> = emptySet()
|
||||
open val classReferenceExpressionCheckers: Set<FirClassReferenceExpressionChecker> = emptySet()
|
||||
|
||||
@CheckersComponentInternal internal val allBasicExpressionCheckers: Set<FirBasicExpressionChecker> get() = basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allQualifiedAccessCheckers: Set<FirQualifiedAccessChecker> get() = qualifiedAccessCheckers + basicExpressionCheckers
|
||||
@@ -58,4 +65,11 @@ abstract class ExpressionCheckers {
|
||||
@CheckersComponentInternal internal val allStringConcatenationCallCheckers: Set<FirStringConcatenationCallChecker> get() = stringConcatenationCallCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allTypeOperatorCallCheckers: Set<FirTypeOperatorCallChecker> get() = typeOperatorCallCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allResolvedQualifierCheckers: Set<FirResolvedQualifierChecker> get() = resolvedQualifierCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allConstExpressionCheckers: Set<FirConstExpressionChecker> get() = constExpressionCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allCallableReferenceAccessCheckers: Set<FirCallableReferenceAccessChecker> get() = callableReferenceAccessCheckers + qualifiedAccessExpressionCheckers + basicExpressionCheckers + qualifiedAccessCheckers
|
||||
@CheckersComponentInternal internal val allThisReceiverExpressionCheckers: Set<FirThisReceiverExpressionChecker> get() = thisReceiverExpressionCheckers + qualifiedAccessExpressionCheckers + basicExpressionCheckers + qualifiedAccessCheckers
|
||||
@CheckersComponentInternal internal val allWhileLoopCheckers: Set<FirWhileLoopChecker> get() = whileLoopCheckers + loopExpressionCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allDoWhileLoopCheckers: Set<FirDoWhileLoopChecker> get() = doWhileLoopCheckers + loopExpressionCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allArrayOfCallCheckers: Set<FirArrayOfCallChecker> get() = arrayOfCallCheckers + basicExpressionCheckers
|
||||
@CheckersComponentInternal internal val allClassReferenceExpressionCheckers: Set<FirClassReferenceExpressionChecker> get() = classReferenceExpressionCheckers + basicExpressionCheckers
|
||||
}
|
||||
|
||||
+14
@@ -11,9 +11,14 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression
|
||||
*/
|
||||
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCheckNotNullCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirClassReferenceExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
|
||||
import org.jetbrains.kotlin.fir.expressions.FirElvisExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
@@ -26,10 +31,12 @@ import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirSafeCallExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirTryExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhileLoop
|
||||
|
||||
typealias FirBasicExpressionChecker = FirExpressionChecker<FirStatement>
|
||||
typealias FirQualifiedAccessChecker = FirExpressionChecker<FirQualifiedAccess>
|
||||
@@ -51,3 +58,10 @@ typealias FirEqualityOperatorCallChecker = FirExpressionChecker<FirEqualityOpera
|
||||
typealias FirStringConcatenationCallChecker = FirExpressionChecker<FirStringConcatenationCall>
|
||||
typealias FirTypeOperatorCallChecker = FirExpressionChecker<FirTypeOperatorCall>
|
||||
typealias FirResolvedQualifierChecker = FirExpressionChecker<FirResolvedQualifier>
|
||||
typealias FirConstExpressionChecker = FirExpressionChecker<FirConstExpression<*>>
|
||||
typealias FirCallableReferenceAccessChecker = FirExpressionChecker<FirCallableReferenceAccess>
|
||||
typealias FirThisReceiverExpressionChecker = FirExpressionChecker<FirThisReceiverExpression>
|
||||
typealias FirWhileLoopChecker = FirExpressionChecker<FirWhileLoop>
|
||||
typealias FirDoWhileLoopChecker = FirExpressionChecker<FirDoWhileLoop>
|
||||
typealias FirArrayOfCallChecker = FirExpressionChecker<FirArrayOfCall>
|
||||
typealias FirClassReferenceExpressionChecker = FirExpressionChecker<FirClassReferenceExpression>
|
||||
|
||||
+7
-7
@@ -26,7 +26,7 @@ class ExpressionCheckersDiagnosticComponent(
|
||||
}
|
||||
|
||||
override fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: CheckerContext) {
|
||||
checkers.allBasicExpressionCheckers.check(constExpression, data, reporter)
|
||||
checkers.allConstExpressionCheckers.check(constExpression, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: CheckerContext) {
|
||||
@@ -42,11 +42,11 @@ class ExpressionCheckersDiagnosticComponent(
|
||||
}
|
||||
|
||||
override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: CheckerContext) {
|
||||
checkers.allQualifiedAccessExpressionCheckers.check(callableReferenceAccess, data, reporter)
|
||||
checkers.allCallableReferenceAccessCheckers.check(callableReferenceAccess, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: CheckerContext) {
|
||||
checkers.allBasicExpressionCheckers.check(thisReceiverExpression, data, reporter)
|
||||
checkers.allThisReceiverExpressionCheckers.check(thisReceiverExpression, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: CheckerContext) {
|
||||
@@ -58,11 +58,11 @@ class ExpressionCheckersDiagnosticComponent(
|
||||
}
|
||||
|
||||
override fun visitWhileLoop(whileLoop: FirWhileLoop, data: CheckerContext) {
|
||||
checkers.allLoopExpressionCheckers.check(whileLoop, data, reporter)
|
||||
checkers.allWhileLoopCheckers.check(whileLoop, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: CheckerContext) {
|
||||
checkers.allLoopExpressionCheckers.check(doWhileLoop, data, reporter)
|
||||
checkers.allDoWhileLoopCheckers.check(doWhileLoop, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitErrorLoop(errorLoop: FirErrorLoop, data: CheckerContext) {
|
||||
@@ -74,7 +74,7 @@ class ExpressionCheckersDiagnosticComponent(
|
||||
}
|
||||
|
||||
override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: CheckerContext) {
|
||||
checkers.allBasicExpressionCheckers.check(arrayOfCall, data, reporter)
|
||||
checkers.allArrayOfCallCheckers.check(arrayOfCall, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: CheckerContext) {
|
||||
@@ -98,7 +98,7 @@ class ExpressionCheckersDiagnosticComponent(
|
||||
}
|
||||
|
||||
override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: CheckerContext) {
|
||||
checkers.allBasicExpressionCheckers.check(classReferenceExpression, data, reporter)
|
||||
checkers.allClassReferenceExpressionCheckers.check(classReferenceExpression, data, reporter)
|
||||
}
|
||||
|
||||
override fun visitGetClassCall(getClassCall: FirGetClassCall, data: CheckerContext) {
|
||||
|
||||
Reference in New Issue
Block a user