[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:
committed by
Nikolay Lunyak
parent
ff063f553e
commit
727d2f46f8
+27
-23
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+38
-34
@@ -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
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user