[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(