[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
+3
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.web.common.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
|
||||
@@ -16,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||
import org.jetbrains.kotlin.name.WebCommonStandardClassIds
|
||||
|
||||
object FirJsExportAnnotationChecker : FirBasicDeclarationChecker() {
|
||||
object FirJsExportAnnotationChecker : FirBasicDeclarationChecker(MppCheckerKind.Common) {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val jsExport = declaration.getAnnotationByClassId(WebCommonStandardClassIds.Annotations.JsExport, context.session) ?: return
|
||||
|
||||
@@ -24,4 +25,4 @@ object FirJsExportAnnotationChecker : FirBasicDeclarationChecker() {
|
||||
reporter.reportOn(jsExport.source, FirWebCommonErrors.NESTED_JS_EXPORT, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
|
||||
abstract class FirWebCommonExternalChecker : FirBasicDeclarationChecker() {
|
||||
abstract class FirWebCommonExternalChecker : FirBasicDeclarationChecker(MppCheckerKind.Common) {
|
||||
abstract fun isNativeOrEffectivelyExternal(symbol: FirBasedSymbol<*>, session: FirSession): Boolean
|
||||
|
||||
abstract fun reportExternalEnum(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter)
|
||||
@@ -253,4 +253,4 @@ abstract class FirWebCommonExternalChecker : FirBasicDeclarationChecker() {
|
||||
?.calleeReference?.toResolvedPropertySymbol() ?: return false
|
||||
return isDefinedExternallyCallableId(declaration.callableId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirBasicExpressionChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol
|
||||
@@ -19,7 +20,7 @@ import org.jetbrains.kotlin.fir.types.toRegularClassSymbol
|
||||
|
||||
abstract class FirAbstractNativeRttiChecker(
|
||||
private val webCheckerUtils: FirAbstractWebCheckerUtils
|
||||
) : FirBasicExpressionChecker() {
|
||||
) : FirBasicExpressionChecker(MppCheckerKind.Common) {
|
||||
override fun check(expression: FirStatement, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
when (expression) {
|
||||
is FirGetClassCall -> checkGetClassCall(expression, context, reporter)
|
||||
@@ -65,4 +66,4 @@ abstract class FirAbstractNativeRttiChecker(
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors
|
||||
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.fir.types.toSymbol
|
||||
|
||||
abstract class FirAbstractReifiedExternalChecker(
|
||||
private val webCheckerUtils: FirAbstractWebCheckerUtils
|
||||
) : FirFunctionCallChecker() {
|
||||
) : FirFunctionCallChecker(MppCheckerKind.Common) {
|
||||
override fun check(expression: FirFunctionCall, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
expression.forAllReifiedTypeParameters { type, typeArgument ->
|
||||
val typeSymbol = type.toSymbol(context.session)
|
||||
@@ -31,4 +32,4 @@ abstract class FirAbstractReifiedExternalChecker(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.canBeEvaluatedAtCompileTime
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker
|
||||
@@ -23,7 +24,7 @@ import org.jetbrains.kotlin.fir.types.resolvedType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.name.WebCommonStandardClassIds
|
||||
|
||||
object FirJsCodeConstantArgumentChecker : FirFunctionCallChecker() {
|
||||
object FirJsCodeConstantArgumentChecker : FirFunctionCallChecker(MppCheckerKind.Common) {
|
||||
private val jsCodeCallableId = WebCommonStandardClassIds.Callables.Js
|
||||
|
||||
override fun check(expression: FirFunctionCall, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
|
||||
+2
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression
|
||||
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.web.common.FirWebCommonErrors
|
||||
@@ -16,7 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.js.validateQualifier
|
||||
import org.jetbrains.kotlin.name.WebCommonStandardClassIds.Annotations.JsQualifier
|
||||
|
||||
object FirJsQualifierChecker : FirAnnotationCallChecker() {
|
||||
object FirJsQualifierChecker : FirAnnotationCallChecker(MppCheckerKind.Common) {
|
||||
override fun check(expression: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (expression.toAnnotationClassId(context.session) != JsQualifier) {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user