in compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt [25:242]
fun main(args: Array<String>) {
val basePackage = "org.jetbrains.kotlin.fir.analysis"
val generationPath = args.getOrNull(1)?.let { File(it) }
val packageName = "$basePackage.diagnostics"
if (args.isEmpty() || args[0] == "checkers.jvm") {
generateDiagnostics(
generationPath ?: File("compiler/fir/checkers/checkers.jvm/gen"),
"$packageName.jvm",
JVM_DIAGNOSTICS_LIST,
starImportsToAdd = setOf(
ErrorListDiagnosticListRenderer.BASE_PACKAGE,
ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE
)
)
}
if (args.isEmpty() || args[0] == "checkers.js") {
generateDiagnostics(
generationPath ?: File("compiler/fir/checkers/checkers.js/gen"),
"$packageName.js",
JS_DIAGNOSTICS_LIST,
starImportsToAdd = setOf(
ErrorListDiagnosticListRenderer.BASE_PACKAGE,
ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE
)
)
}
if (args.isEmpty() || args[0] == "checkers.native") {
generateDiagnostics(
generationPath ?: File("compiler/fir/checkers/checkers.native/gen"),
"$packageName.native",
NATIVE_DIAGNOSTICS_LIST,
starImportsToAdd = setOf(
ErrorListDiagnosticListRenderer.BASE_PACKAGE,
ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE
)
)
}
if (args.isEmpty() || args[0] == "checkers.wasm") {
generateDiagnostics(
generationPath ?: File("compiler/fir/checkers/checkers.wasm/gen"),
"$packageName.wasm",
WASM_DIAGNOSTICS_LIST,
starImportsToAdd = setOf(
ErrorListDiagnosticListRenderer.BASE_PACKAGE,
ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE
)
)
}
if (args.isEmpty() || args[0] == "checkers.web.common") {
generateDiagnostics(
generationPath ?: File("compiler/fir/checkers/checkers.web.common/gen"),
"$packageName.web.common",
WEB_COMMON_DIAGNOSTICS_LIST,
starImportsToAdd = setOf(
ErrorListDiagnosticListRenderer.BASE_PACKAGE,
ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE
)
)
}
if (args.isEmpty() || args[0] == "raw-fir.common") {
generateDiagnostics(
generationPath ?: File("compiler/fir/raw-fir/raw-fir.common/gen"),
"org.jetbrains.kotlin.fir.builder",
SYNTAX_DIAGNOSTIC_LIST,
starImportsToAdd = setOf(ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE)
)
}
if (args.isEmpty() || args[0] == "checkers") {
val checkersPath = generationPath ?: File("compiler/fir/checkers/checkers/gen")
val typePackage = "$basePackage.checkers.type"
generateCheckersComponents(checkersPath, typePackage, "FirTypeChecker", FirTypeRef::class, FirTypeRef::class) {
alias<FirTypeRef>("TypeRefChecker").let {
visitAlso<FirImplicitTypeRef>(it)
visitAlso<FirUnresolvedTypeRef>(it)
visitAlso<FirUserTypeRef>(it)
visitAlso<FirDynamicTypeRef>(it)
}
alias<FirResolvedTypeRef>("ResolvedTypeRefChecker").let {
visitAlso<FirErrorTypeRef>(it)
}
alias<FirFunctionTypeRef>("FunctionTypeRefChecker")
alias<FirIntersectionTypeRef>("IntersectionTypeRefChecker")
}
val expressionPackage = "$basePackage.checkers.expression"
generateCheckersComponents(checkersPath, expressionPackage, "FirExpressionChecker", FirStatement::class, FirExpression::class) {
alias<FirStatement>("BasicExpressionChecker", false).let {
visitAlso<FirExpression>(it)
visitAlso<FirVarargArgumentsExpression>(it)
visitAlso<FirSamConversionExpression>(it)
visitAlso<FirWrappedExpression>(it)
visitAlso<FirWrappedArgumentExpression>(it)
visitAlso<FirSpreadArgumentExpression>(it)
visitAlso<FirNamedArgumentExpression>(it)
visitAlso<FirWhenSubjectExpression>(it)
visitAlso<FirResolvedReifiedParameterReference>(it)
visitAlso<FirComparisonExpression>(it)
visitAlso<FirDesugaredAssignmentValueReferenceExpression>(it)
visitAlso<FirCheckedSafeCallSubject>(it)
visitAlso<FirErrorExpression>(it)
visitAlso<FirQualifiedErrorAccessExpression>(it)
}
alias<FirQualifiedAccessExpression>("QualifiedAccessExpressionChecker")
alias<FirCall>("CallChecker", false).let {
visitAlso<FirDelegatedConstructorCall>(it)
visitAlso<FirMultiDelegatedConstructorCall>(it)
}
alias<FirFunctionCall>("FunctionCallChecker").let {
visitAlso<FirComponentCall>(it)
visitAlso<FirImplicitInvokeCall>(it)
}
alias<FirPropertyAccessExpression>("PropertyAccessExpressionChecker")
alias<FirSuperReceiverExpression>("SuperReceiverExpressionChecker")
alias<FirIntegerLiteralOperatorCall>("IntegerLiteralOperatorCallChecker")
alias<FirVariableAssignment>("VariableAssignmentChecker")
alias<FirTryExpression>("TryExpressionChecker")
alias<FirWhenExpression>("WhenExpressionChecker")
alias<FirLoop>("LoopExpressionChecker", false).let {
visitAlso<FirErrorLoop>(it)
}
alias<FirLoopJump>("LoopJumpChecker", false).let {
visitAlso<FirBreakExpression>(it)
visitAlso<FirContinueExpression>(it)
}
alias<FirBooleanOperatorExpression>("BooleanOperatorExpressionChecker")
alias<FirReturnExpression>("ReturnExpressionChecker")
alias<FirBlock>("BlockChecker")
alias<FirReplDeclarationReference>("ReplDeclarationReferenceChecker")
alias<FirAnnotation>("AnnotationChecker")
alias<FirAnnotationCall>("AnnotationCallChecker").let {
visitAlso<FirErrorAnnotationCall>(it)
}
alias<FirCheckNotNullCall>("CheckNotNullCallChecker")
alias<FirElvisExpression>("ElvisExpressionChecker")
alias<FirGetClassCall>("GetClassCallChecker")
alias<FirSafeCallExpression>("SafeCallExpressionChecker")
alias<FirSmartCastExpression>("SmartCastExpressionChecker")
alias<FirEqualityOperatorCall>("EqualityOperatorCallChecker")
alias<FirStringConcatenationCall>("StringConcatenationCallChecker")
alias<FirTypeOperatorCall>("TypeOperatorCallChecker")
alias<FirResolvedQualifier>("ResolvedQualifierChecker").let {
visitAlso<FirErrorResolvedQualifier>(it)
}
alias<FirLiteralExpression>("LiteralExpressionChecker")
alias<FirCallableReferenceAccess>("CallableReferenceAccessChecker")
alias<FirThisReceiverExpression>("ThisReceiverExpressionChecker")
alias<FirWhileLoop>("WhileLoopChecker")
alias<FirThrowExpression>("ThrowExpressionChecker")
alias<FirDoWhileLoop>("DoWhileLoopChecker")
alias<FirCollectionLiteral>("CollectionLiteralChecker")
alias<FirClassReferenceExpression>("ClassReferenceExpressionChecker")
alias<FirInaccessibleReceiverExpression>("InaccessibleReceiverChecker")
}
val declarationPackage = "$basePackage.checkers.declaration"
generateCheckersComponents(
checkersPath,
declarationPackage,
"FirDeclarationChecker",
FirDeclaration::class,
FirDeclaration::class,
) {
alias<FirDeclaration>("BasicDeclarationChecker").let {
visitAlso<FirDanglingModifierList>(it)
visitAlso<FirCodeFragment>(it)
}
alias<FirCallableDeclaration>("CallableDeclarationChecker", false).let {
visitAlso<FirField>(it)
visitAlso<FirErrorProperty>(it)
}
alias<FirFunction>("FunctionChecker", false)
alias<FirNamedFunction>("SimpleFunctionChecker")
alias<FirProperty>("PropertyChecker")
alias<FirClassLikeDeclaration>("ClassLikeChecker", false)
alias<FirClass>("ClassChecker")
alias<FirRegularClass>("RegularClassChecker")
alias<FirConstructor>("ConstructorChecker").let {
visitAlso<FirErrorPrimaryConstructor>(it)
}
alias<FirFile>("FileChecker")
alias<FirScript>("ScriptChecker")
alias<FirReplSnippet>("ReplSnippetChecker")
alias<FirTypeParameter>("FirTypeParameterChecker")
alias<FirTypeAlias>("TypeAliasChecker")
alias<FirAnonymousFunction>("AnonymousFunctionChecker")
alias<FirPropertyAccessor>("PropertyAccessorChecker")
alias<FirBackingField>("BackingFieldChecker")
alias<FirValueParameter>("ValueParameterChecker")
alias<FirEnumEntry>("EnumEntryChecker")
alias<FirAnonymousObject>("AnonymousObjectChecker")
alias<FirAnonymousInitializer>("AnonymousInitializerChecker")
alias<FirReceiverParameter>("ReceiverParameterChecker")
additional(
fieldName = "controlFlowAnalyserCheckers",
classFqn = "$basePackage.checkers.cfa.FirControlFlowChecker"
)
additional(
fieldName = "variableAssignmentCfaBasedCheckers",
classFqn = "$basePackage.cfa.AbstractFirPropertyInitializationChecker"
)
}
generateDiagnostics(
checkersPath,
packageName,
DIAGNOSTICS_LIST,
starImportsToAdd = setOf(
ErrorListDiagnosticListRenderer.BASE_PACKAGE,
ErrorListDiagnosticListRenderer.DIAGNOSTICS_PACKAGE
)
)
generateNonSuppressibleErrorNamesFile(checkersPath, packageName)
}
}