[FIR] Part 1. Group checkers by the MPP kind

This commit introduces MppChecker kind, which represents the new property
  of checkers
- `MppCheckerKind.Common` means that this checker should run from the same
  session to which corresponding declaration belongs
- `MppCheckerKind.Platform` means that in case of MPP compilation this
  checker should run with session of leaf platform module for sources
  of all modules

An example of a platform checker is a checker that checks class scopes
  and reports ABSTRACT_NOT_IMPLEMENTED and similar diagnostics. If some
  regular class in the common module contains expect supertypes, the
  checker should consider the actualization of those supertypes to get
  a complete type scope

^KT-58881
This commit is contained in:
Dmitriy Novozhilov
2024-01-08 14:37:30 +02:00
committed by Nikolay Lunyak
parent ff063f553e
commit 727d2f46f8
338 changed files with 1216 additions and 728 deletions
@@ -7,6 +7,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal
import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker
import org.jetbrains.kotlin.fir.analysis.checkers.FirCheckerWithMppKind
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
/*
@@ -14,7 +16,9 @@ import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
* DO NOT MODIFY IT MANUALLY
*/
class ComposedDeclarationCheckers : DeclarationCheckers() {
class ComposedDeclarationCheckers(val predicate: (FirCheckerWithMppKind) -> Boolean) : DeclarationCheckers() {
constructor(mppKind: MppCheckerKind) : this({ it.mppKind == mppKind })
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
get() = _basicDeclarationCheckers
override val callableDeclarationCheckers: Set<FirCallableDeclarationChecker>
@@ -85,27 +89,27 @@ class ComposedDeclarationCheckers : DeclarationCheckers() {
@CheckersComponentInternal
fun register(checkers: DeclarationCheckers) {
_basicDeclarationCheckers += checkers.basicDeclarationCheckers
_callableDeclarationCheckers += checkers.callableDeclarationCheckers
_functionCheckers += checkers.functionCheckers
_simpleFunctionCheckers += checkers.simpleFunctionCheckers
_propertyCheckers += checkers.propertyCheckers
_classLikeCheckers += checkers.classLikeCheckers
_classCheckers += checkers.classCheckers
_regularClassCheckers += checkers.regularClassCheckers
_constructorCheckers += checkers.constructorCheckers
_fileCheckers += checkers.fileCheckers
_scriptCheckers += checkers.scriptCheckers
_typeParameterCheckers += checkers.typeParameterCheckers
_typeAliasCheckers += checkers.typeAliasCheckers
_anonymousFunctionCheckers += checkers.anonymousFunctionCheckers
_propertyAccessorCheckers += checkers.propertyAccessorCheckers
_backingFieldCheckers += checkers.backingFieldCheckers
_valueParameterCheckers += checkers.valueParameterCheckers
_enumEntryCheckers += checkers.enumEntryCheckers
_anonymousObjectCheckers += checkers.anonymousObjectCheckers
_anonymousInitializerCheckers += checkers.anonymousInitializerCheckers
_controlFlowAnalyserCheckers += checkers.controlFlowAnalyserCheckers
_variableAssignmentCfaBasedCheckers += checkers.variableAssignmentCfaBasedCheckers
checkers.basicDeclarationCheckers.filterTo(_basicDeclarationCheckers, predicate)
checkers.callableDeclarationCheckers.filterTo(_callableDeclarationCheckers, predicate)
checkers.functionCheckers.filterTo(_functionCheckers, predicate)
checkers.simpleFunctionCheckers.filterTo(_simpleFunctionCheckers, predicate)
checkers.propertyCheckers.filterTo(_propertyCheckers, predicate)
checkers.classLikeCheckers.filterTo(_classLikeCheckers, predicate)
checkers.classCheckers.filterTo(_classCheckers, predicate)
checkers.regularClassCheckers.filterTo(_regularClassCheckers, predicate)
checkers.constructorCheckers.filterTo(_constructorCheckers, predicate)
checkers.fileCheckers.filterTo(_fileCheckers, predicate)
checkers.scriptCheckers.filterTo(_scriptCheckers, predicate)
checkers.typeParameterCheckers.filterTo(_typeParameterCheckers, predicate)
checkers.typeAliasCheckers.filterTo(_typeAliasCheckers, predicate)
checkers.anonymousFunctionCheckers.filterTo(_anonymousFunctionCheckers, predicate)
checkers.propertyAccessorCheckers.filterTo(_propertyAccessorCheckers, predicate)
checkers.backingFieldCheckers.filterTo(_backingFieldCheckers, predicate)
checkers.valueParameterCheckers.filterTo(_valueParameterCheckers, predicate)
checkers.enumEntryCheckers.filterTo(_enumEntryCheckers, predicate)
checkers.anonymousObjectCheckers.filterTo(_anonymousObjectCheckers, predicate)
checkers.anonymousInitializerCheckers.filterTo(_anonymousInitializerCheckers, predicate)
checkers.controlFlowAnalyserCheckers.filterTo(_controlFlowAnalyserCheckers, predicate)
checkers.variableAssignmentCfaBasedCheckers.filterTo(_variableAssignmentCfaBasedCheckers, predicate)
}
}
@@ -6,13 +6,17 @@
package org.jetbrains.kotlin.fir.analysis.checkers.expression
import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal
import org.jetbrains.kotlin.fir.analysis.checkers.FirCheckerWithMppKind
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
class ComposedExpressionCheckers : ExpressionCheckers() {
class ComposedExpressionCheckers(val predicate: (FirCheckerWithMppKind) -> Boolean) : ExpressionCheckers() {
constructor(mppKind: MppCheckerKind) : this({ it.mppKind == mppKind })
override val basicExpressionCheckers: Set<FirBasicExpressionChecker>
get() = _basicExpressionCheckers
override val qualifiedAccessExpressionCheckers: Set<FirQualifiedAccessExpressionChecker>
@@ -116,38 +120,38 @@ class ComposedExpressionCheckers : ExpressionCheckers() {
@CheckersComponentInternal
fun register(checkers: ExpressionCheckers) {
_basicExpressionCheckers += checkers.basicExpressionCheckers
_qualifiedAccessExpressionCheckers += checkers.qualifiedAccessExpressionCheckers
_callCheckers += checkers.callCheckers
_functionCallCheckers += checkers.functionCallCheckers
_propertyAccessExpressionCheckers += checkers.propertyAccessExpressionCheckers
_integerLiteralOperatorCallCheckers += checkers.integerLiteralOperatorCallCheckers
_variableAssignmentCheckers += checkers.variableAssignmentCheckers
_tryExpressionCheckers += checkers.tryExpressionCheckers
_whenExpressionCheckers += checkers.whenExpressionCheckers
_loopExpressionCheckers += checkers.loopExpressionCheckers
_loopJumpCheckers += checkers.loopJumpCheckers
_logicExpressionCheckers += checkers.logicExpressionCheckers
_returnExpressionCheckers += checkers.returnExpressionCheckers
_blockCheckers += checkers.blockCheckers
_annotationCheckers += checkers.annotationCheckers
_annotationCallCheckers += checkers.annotationCallCheckers
_checkNotNullCallCheckers += checkers.checkNotNullCallCheckers
_elvisExpressionCheckers += checkers.elvisExpressionCheckers
_getClassCallCheckers += checkers.getClassCallCheckers
_safeCallExpressionCheckers += checkers.safeCallExpressionCheckers
_equalityOperatorCallCheckers += checkers.equalityOperatorCallCheckers
_stringConcatenationCallCheckers += checkers.stringConcatenationCallCheckers
_typeOperatorCallCheckers += checkers.typeOperatorCallCheckers
_resolvedQualifierCheckers += checkers.resolvedQualifierCheckers
_constExpressionCheckers += checkers.constExpressionCheckers
_callableReferenceAccessCheckers += checkers.callableReferenceAccessCheckers
_thisReceiverExpressionCheckers += checkers.thisReceiverExpressionCheckers
_whileLoopCheckers += checkers.whileLoopCheckers
_throwExpressionCheckers += checkers.throwExpressionCheckers
_doWhileLoopCheckers += checkers.doWhileLoopCheckers
_arrayLiteralCheckers += checkers.arrayLiteralCheckers
_classReferenceExpressionCheckers += checkers.classReferenceExpressionCheckers
_inaccessibleReceiverCheckers += checkers.inaccessibleReceiverCheckers
checkers.basicExpressionCheckers.filterTo(_basicExpressionCheckers, predicate)
checkers.qualifiedAccessExpressionCheckers.filterTo(_qualifiedAccessExpressionCheckers, predicate)
checkers.callCheckers.filterTo(_callCheckers, predicate)
checkers.functionCallCheckers.filterTo(_functionCallCheckers, predicate)
checkers.propertyAccessExpressionCheckers.filterTo(_propertyAccessExpressionCheckers, predicate)
checkers.integerLiteralOperatorCallCheckers.filterTo(_integerLiteralOperatorCallCheckers, predicate)
checkers.variableAssignmentCheckers.filterTo(_variableAssignmentCheckers, predicate)
checkers.tryExpressionCheckers.filterTo(_tryExpressionCheckers, predicate)
checkers.whenExpressionCheckers.filterTo(_whenExpressionCheckers, predicate)
checkers.loopExpressionCheckers.filterTo(_loopExpressionCheckers, predicate)
checkers.loopJumpCheckers.filterTo(_loopJumpCheckers, predicate)
checkers.logicExpressionCheckers.filterTo(_logicExpressionCheckers, predicate)
checkers.returnExpressionCheckers.filterTo(_returnExpressionCheckers, predicate)
checkers.blockCheckers.filterTo(_blockCheckers, predicate)
checkers.annotationCheckers.filterTo(_annotationCheckers, predicate)
checkers.annotationCallCheckers.filterTo(_annotationCallCheckers, predicate)
checkers.checkNotNullCallCheckers.filterTo(_checkNotNullCallCheckers, predicate)
checkers.elvisExpressionCheckers.filterTo(_elvisExpressionCheckers, predicate)
checkers.getClassCallCheckers.filterTo(_getClassCallCheckers, predicate)
checkers.safeCallExpressionCheckers.filterTo(_safeCallExpressionCheckers, predicate)
checkers.equalityOperatorCallCheckers.filterTo(_equalityOperatorCallCheckers, predicate)
checkers.stringConcatenationCallCheckers.filterTo(_stringConcatenationCallCheckers, predicate)
checkers.typeOperatorCallCheckers.filterTo(_typeOperatorCallCheckers, predicate)
checkers.resolvedQualifierCheckers.filterTo(_resolvedQualifierCheckers, predicate)
checkers.constExpressionCheckers.filterTo(_constExpressionCheckers, predicate)
checkers.callableReferenceAccessCheckers.filterTo(_callableReferenceAccessCheckers, predicate)
checkers.thisReceiverExpressionCheckers.filterTo(_thisReceiverExpressionCheckers, predicate)
checkers.whileLoopCheckers.filterTo(_whileLoopCheckers, predicate)
checkers.throwExpressionCheckers.filterTo(_throwExpressionCheckers, predicate)
checkers.doWhileLoopCheckers.filterTo(_doWhileLoopCheckers, predicate)
checkers.arrayLiteralCheckers.filterTo(_arrayLiteralCheckers, predicate)
checkers.classReferenceExpressionCheckers.filterTo(_classReferenceExpressionCheckers, predicate)
checkers.inaccessibleReceiverCheckers.filterTo(_inaccessibleReceiverCheckers, predicate)
}
}
@@ -6,13 +6,17 @@
package org.jetbrains.kotlin.fir.analysis.checkers.type
import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal
import org.jetbrains.kotlin.fir.analysis.checkers.FirCheckerWithMppKind
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
class ComposedTypeCheckers : TypeCheckers() {
class ComposedTypeCheckers(val predicate: (FirCheckerWithMppKind) -> Boolean) : TypeCheckers() {
constructor(mppKind: MppCheckerKind) : this({ it.mppKind == mppKind })
override val typeRefCheckers: Set<FirTypeRefChecker>
get() = _typeRefCheckers
@@ -20,6 +24,6 @@ class ComposedTypeCheckers : TypeCheckers() {
@CheckersComponentInternal
fun register(checkers: TypeCheckers) {
_typeRefCheckers += checkers.typeRefCheckers
checkers.typeRefCheckers.filterTo(_typeRefCheckers, predicate)
}
}