[FIR] Optimize checkers bypass
Use direct accessing instead of lazy
Use List instead of Set
Get rid of excess referencing
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt
index 514b8d5..7c84b7b 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt
@@ -18,67 +18,82 @@
class DeclarationCheckersDiagnosticComponent(
session: FirSession,
reporter: DiagnosticReporter,
- private val checkers: DeclarationCheckers = session.checkersComponent.declarationCheckers,
+ checkers: DeclarationCheckers = session.checkersComponent.declarationCheckers,
) : AbstractDiagnosticCollectorComponent(session, reporter) {
+ private val allFileCheckers = checkers.allFileCheckers.toList()
+ private val allPropertyCheckers = checkers.allPropertyCheckers.toList()
+ private val allClassCheckers = checkers.allClassCheckers.toList()
+ private val allRegularClassCheckers = checkers.allRegularClassCheckers.toList()
+ private val allSimpleFunctionCheckers = checkers.allSimpleFunctionCheckers.toList()
+ private val allTypeAliasCheckers = checkers.allTypeAliasCheckers.toList()
+ private val allConstructorCheckers = checkers.allConstructorCheckers.toList()
+ private val allAnonymousFunctionCheckers = checkers.allAnonymousFunctionCheckers.toList()
+ private val allPropertyAccessorCheckers = checkers.allPropertyAccessorCheckers.toList()
+ private val allBackingFieldCheckers = checkers.allBackingFieldCheckers.toList()
+ private val allValueParameterCheckers = checkers.allValueParameterCheckers.toList()
+ private val allTypeParameterCheckers = checkers.allTypeParameterCheckers.toList()
+ private val allEnumEntryCheckers = checkers.allEnumEntryCheckers.toList()
+ private val allAnonymousObjectCheckers = checkers.allAnonymousObjectCheckers.toList()
+ private val allAnonymousInitializerCheckers = checkers.allAnonymousInitializerCheckers.toList()
override fun visitFile(file: FirFile, data: CheckerContext) {
- checkers.allFileCheckers.check(file, data)
+ allFileCheckers.check(file, data)
}
override fun visitProperty(property: FirProperty, data: CheckerContext) {
- checkers.allPropertyCheckers.check(property, data)
+ allPropertyCheckers.check(property, data)
}
override fun visitClass(klass: FirClass, data: CheckerContext) {
- checkers.allClassCheckers.check(klass, data)
+ allClassCheckers.check(klass, data)
}
override fun visitRegularClass(regularClass: FirRegularClass, data: CheckerContext) {
- checkers.allRegularClassCheckers.check(regularClass, data)
+ allRegularClassCheckers.check(regularClass, data)
}
override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: CheckerContext) {
- checkers.allSimpleFunctionCheckers.check(simpleFunction, data)
+ allSimpleFunctionCheckers.check(simpleFunction, data)
}
override fun visitTypeAlias(typeAlias: FirTypeAlias, data: CheckerContext) {
- checkers.allTypeAliasCheckers.check(typeAlias, data)
+ allTypeAliasCheckers.check(typeAlias, data)
}
override fun visitConstructor(constructor: FirConstructor, data: CheckerContext) {
- checkers.allConstructorCheckers.check(constructor, data)
+ allConstructorCheckers.check(constructor, data)
}
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) {
- checkers.allAnonymousFunctionCheckers.check(anonymousFunction, data)
+ allAnonymousFunctionCheckers.check(anonymousFunction, data)
}
override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: CheckerContext) {
- checkers.allPropertyAccessorCheckers.check(propertyAccessor, data)
+ allPropertyAccessorCheckers.check(propertyAccessor, data)
}
override fun visitBackingField(backingField: FirBackingField, data: CheckerContext) {
- checkers.allBackingFieldCheckers.check(backingField, data)
+ allBackingFieldCheckers.check(backingField, data)
}
override fun visitValueParameter(valueParameter: FirValueParameter, data: CheckerContext) {
- checkers.allValueParameterCheckers.check(valueParameter, data)
+ allValueParameterCheckers.check(valueParameter, data)
}
override fun visitTypeParameter(typeParameter: FirTypeParameter, data: CheckerContext) {
- checkers.allTypeParameterCheckers.check(typeParameter, data)
+ allTypeParameterCheckers.check(typeParameter, data)
}
override fun visitEnumEntry(enumEntry: FirEnumEntry, data: CheckerContext) {
- checkers.allEnumEntryCheckers.check(enumEntry, data)
+ allEnumEntryCheckers.check(enumEntry, data)
}
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: CheckerContext) {
- checkers.allAnonymousObjectCheckers.check(anonymousObject, data)
+ allAnonymousObjectCheckers.check(anonymousObject, data)
}
override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: CheckerContext) {
- checkers.allAnonymousInitializerCheckers.check(anonymousInitializer, data)
+ allAnonymousInitializerCheckers.check(anonymousInitializer, data)
}
private fun <D : FirDeclaration> Collection<FirDeclarationChecker<D>>.check(
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt
index 9e815a2..69186c7 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt
@@ -18,134 +18,165 @@
class ExpressionCheckersDiagnosticComponent(
session: FirSession,
reporter: DiagnosticReporter,
- private val checkers: ExpressionCheckers = session.checkersComponent.expressionCheckers,
+ checkers: ExpressionCheckers = session.checkersComponent.expressionCheckers,
) : AbstractDiagnosticCollectorComponent(session, reporter) {
+ private val allTypeOperatorCallCheckers = checkers.allTypeOperatorCallCheckers.toList()
+ private val allConstExpressionCheckers = checkers.allConstExpressionCheckers.toList()
+ private val allAnnotationCheckers = checkers.allAnnotationCheckers.toList()
+ private val allAnnotationCallCheckers = checkers.allAnnotationCallCheckers.toList()
+ private val allQualifiedAccessExpressionCheckers = checkers.allQualifiedAccessExpressionCheckers.toList()
+ private val allPropertyAccessExpressionCheckers = checkers.allPropertyAccessExpressionCheckers.toList()
+ private val allFunctionCallCheckers = checkers.allFunctionCallCheckers.toList()
+ private val allIntegerLiteralOperatorCallCheckers = checkers.allIntegerLiteralOperatorCallCheckers.toList()
+ private val allCallableReferenceAccessCheckers = checkers.allCallableReferenceAccessCheckers.toList()
+ private val allThisReceiverExpressionCheckers = checkers.allThisReceiverExpressionCheckers.toList()
+ private val allResolvedQualifierCheckers = checkers.allResolvedQualifierCheckers.toList()
+ private val allWhenExpressionCheckers = checkers.allWhenExpressionCheckers.toList()
+ private val allWhileLoopCheckers = checkers.allWhileLoopCheckers.toList()
+ private val allDoWhileLoopCheckers = checkers.allDoWhileLoopCheckers.toList()
+ private val allLoopExpressionCheckers = checkers.allLoopExpressionCheckers.toList()
+ private val allLogicExpressionCheckers = checkers.allLogicExpressionCheckers.toList()
+ private val allArrayOfCallCheckers = checkers.allArrayOfCallCheckers.toList()
+ private val allStringConcatenationCallCheckers = checkers.allStringConcatenationCallCheckers.toList()
+ private val allCheckNotNullCallCheckers = checkers.allCheckNotNullCallCheckers.toList()
+ private val allElvisExpressionCheckers = checkers.allElvisExpressionCheckers.toList()
+ private val allSafeCallExpressionCheckers = checkers.allSafeCallExpressionCheckers.toList()
+ private val allTryExpressionCheckers = checkers.allTryExpressionCheckers.toList()
+ private val allClassReferenceExpressionCheckers = checkers.allClassReferenceExpressionCheckers.toList()
+ private val allGetClassCallCheckers = checkers.allGetClassCallCheckers.toList()
+ private val allEqualityOperatorCallCheckers = checkers.allEqualityOperatorCallCheckers.toList()
+ private val allVariableAssignmentCheckers = checkers.allVariableAssignmentCheckers.toList()
+ private val allReturnExpressionCheckers = checkers.allReturnExpressionCheckers.toList()
+ private val allLoopJumpCheckers = checkers.allLoopJumpCheckers.toList()
+ private val allBlockCheckers = checkers.allBlockCheckers.toList()
+ private val allCallCheckers = checkers.allCallCheckers.toList()
+
override fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: CheckerContext) {
- checkers.allTypeOperatorCallCheckers.check(typeOperatorCall, data)
+ allTypeOperatorCallCheckers.check(typeOperatorCall, data)
}
override fun <T> visitConstExpression(constExpression: FirConstExpression<T>, data: CheckerContext) {
- checkers.allConstExpressionCheckers.check(constExpression, data)
+ allConstExpressionCheckers.check(constExpression, data)
}
override fun visitAnnotation(annotation: FirAnnotation, data: CheckerContext) {
- checkers.allAnnotationCheckers.check(annotation, data)
+ allAnnotationCheckers.check(annotation, data)
}
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: CheckerContext) {
- checkers.allAnnotationCallCheckers.check(annotationCall, data)
+ allAnnotationCallCheckers.check(annotationCall, data)
}
override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: CheckerContext) {
- checkers.allQualifiedAccessExpressionCheckers.check(qualifiedAccessExpression, data)
+ allQualifiedAccessExpressionCheckers.check(qualifiedAccessExpression, data)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: CheckerContext) {
- checkers.allPropertyAccessExpressionCheckers.check(propertyAccessExpression, data)
+ allPropertyAccessExpressionCheckers.check(propertyAccessExpression, data)
}
override fun visitFunctionCall(functionCall: FirFunctionCall, data: CheckerContext) {
- checkers.allFunctionCallCheckers.check(functionCall, data)
+ allFunctionCallCheckers.check(functionCall, data)
}
override fun visitIntegerLiteralOperatorCall(integerLiteralOperatorCall: FirIntegerLiteralOperatorCall, data: CheckerContext) {
- checkers.allIntegerLiteralOperatorCallCheckers.check(integerLiteralOperatorCall, data)
+ allIntegerLiteralOperatorCallCheckers.check(integerLiteralOperatorCall, data)
}
override fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: CheckerContext) {
- checkers.allFunctionCallCheckers.check(implicitInvokeCall, data)
+ allFunctionCallCheckers.check(implicitInvokeCall, data)
}
override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: CheckerContext) {
- checkers.allCallableReferenceAccessCheckers.check(callableReferenceAccess, data)
+ allCallableReferenceAccessCheckers.check(callableReferenceAccess, data)
}
override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: CheckerContext) {
- checkers.allThisReceiverExpressionCheckers.check(thisReceiverExpression, data)
+ allThisReceiverExpressionCheckers.check(thisReceiverExpression, data)
}
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: CheckerContext) {
- checkers.allResolvedQualifierCheckers.check(resolvedQualifier, data)
+ allResolvedQualifierCheckers.check(resolvedQualifier, data)
}
override fun visitWhenExpression(whenExpression: FirWhenExpression, data: CheckerContext) {
- checkers.allWhenExpressionCheckers.check(whenExpression, data)
+ allWhenExpressionCheckers.check(whenExpression, data)
}
override fun visitWhileLoop(whileLoop: FirWhileLoop, data: CheckerContext) {
- checkers.allWhileLoopCheckers.check(whileLoop, data)
+ allWhileLoopCheckers.check(whileLoop, data)
}
override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: CheckerContext) {
- checkers.allDoWhileLoopCheckers.check(doWhileLoop, data)
+ allDoWhileLoopCheckers.check(doWhileLoop, data)
}
override fun visitErrorLoop(errorLoop: FirErrorLoop, data: CheckerContext) {
- checkers.allLoopExpressionCheckers.check(errorLoop, data)
+ allLoopExpressionCheckers.check(errorLoop, data)
}
override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: CheckerContext) {
- checkers.allLogicExpressionCheckers.check(binaryLogicExpression, data)
+ allLogicExpressionCheckers.check(binaryLogicExpression, data)
}
override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: CheckerContext) {
- checkers.allArrayOfCallCheckers.check(arrayOfCall, data)
+ allArrayOfCallCheckers.check(arrayOfCall, data)
}
override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: CheckerContext) {
- checkers.allStringConcatenationCallCheckers.check(stringConcatenationCall, data)
+ allStringConcatenationCallCheckers.check(stringConcatenationCall, data)
}
override fun visitCheckNotNullCall(checkNotNullCall: FirCheckNotNullCall, data: CheckerContext) {
- checkers.allCheckNotNullCallCheckers.check(checkNotNullCall, data)
+ allCheckNotNullCallCheckers.check(checkNotNullCall, data)
}
override fun visitElvisExpression(elvisExpression: FirElvisExpression, data: CheckerContext) {
- checkers.allElvisExpressionCheckers.check(elvisExpression, data)
+ allElvisExpressionCheckers.check(elvisExpression, data)
}
override fun visitSafeCallExpression(safeCallExpression: FirSafeCallExpression, data: CheckerContext) {
- checkers.allSafeCallExpressionCheckers.check(safeCallExpression, data)
+ allSafeCallExpressionCheckers.check(safeCallExpression, data)
}
override fun visitTryExpression(tryExpression: FirTryExpression, data: CheckerContext) {
- checkers.allTryExpressionCheckers.check(tryExpression, data)
+ allTryExpressionCheckers.check(tryExpression, data)
}
override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: CheckerContext) {
- checkers.allClassReferenceExpressionCheckers.check(classReferenceExpression, data)
+ allClassReferenceExpressionCheckers.check(classReferenceExpression, data)
}
override fun visitGetClassCall(getClassCall: FirGetClassCall, data: CheckerContext) {
- checkers.allGetClassCallCheckers.check(getClassCall, data)
+ allGetClassCallCheckers.check(getClassCall, data)
}
override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: CheckerContext) {
- checkers.allEqualityOperatorCallCheckers.check(equalityOperatorCall, data)
+ allEqualityOperatorCallCheckers.check(equalityOperatorCall, data)
}
override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: CheckerContext) {
- checkers.allVariableAssignmentCheckers.check(variableAssignment, data)
+ allVariableAssignmentCheckers.check(variableAssignment, data)
}
override fun visitReturnExpression(returnExpression: FirReturnExpression, data: CheckerContext) {
- checkers.allReturnExpressionCheckers.check(returnExpression, data)
+ allReturnExpressionCheckers.check(returnExpression, data)
}
override fun visitBreakExpression(breakExpression: FirBreakExpression, data: CheckerContext) {
- checkers.allLoopJumpCheckers.check(breakExpression, data)
+ allLoopJumpCheckers.check(breakExpression, data)
}
override fun visitContinueExpression(continueExpression: FirContinueExpression, data: CheckerContext) {
- checkers.allLoopJumpCheckers.check(continueExpression, data)
+ allLoopJumpCheckers.check(continueExpression, data)
}
override fun visitBlock(block: FirBlock, data: CheckerContext) {
- checkers.allBlockCheckers.check(block, data)
+ allBlockCheckers.check(block, data)
}
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: CheckerContext) {
- checkers.allCallCheckers.check(delegatedConstructorCall, data)
+ allCallCheckers.check(delegatedConstructorCall, data)
}
private fun <E : FirStatement> Collection<FirExpressionChecker<E>>.check(
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/TypeCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/TypeCheckersDiagnosticComponent.kt
index d11952c..65c9cc8 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/TypeCheckersDiagnosticComponent.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/TypeCheckersDiagnosticComponent.kt
@@ -18,39 +18,40 @@
class TypeCheckersDiagnosticComponent(
session: FirSession,
reporter: DiagnosticReporter,
- private val checkers: TypeCheckers = session.checkersComponent.typeCheckers,
+ checkers: TypeCheckers = session.checkersComponent.typeCheckers,
) : AbstractDiagnosticCollectorComponent(session, reporter) {
+ private val allTypeRefCheckers = checkers.allTypeRefCheckers.toList()
override fun visitDynamicTypeRef(dynamicTypeRef: FirDynamicTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(dynamicTypeRef, data)
+ allTypeRefCheckers.check(dynamicTypeRef, data)
}
override fun visitFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(functionTypeRef, data)
+ allTypeRefCheckers.check(functionTypeRef, data)
}
override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(userTypeRef, data)
+ allTypeRefCheckers.check(userTypeRef, data)
}
override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(resolvedTypeRef, data)
+ allTypeRefCheckers.check(resolvedTypeRef, data)
}
override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(errorTypeRef, data)
+ allTypeRefCheckers.check(errorTypeRef, data)
}
override fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(typeRefWithNullability, data)
+ allTypeRefCheckers.check(typeRefWithNullability, data)
}
override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(implicitTypeRef, data)
+ allTypeRefCheckers.check(implicitTypeRef, data)
}
override fun visitTypeRef(typeRef: FirTypeRef, data: CheckerContext) {
- checkers.allTypeRefCheckers.check(typeRef, data)
+ allTypeRefCheckers.check(typeRef, data)
}
private fun <T : FirTypeRef> Collection<FirTypeChecker<T>>.check(