FIR checkers: reuse CheckerContext.containingFile & isTopLevel

This commit is contained in:
Mikhail Glukhikh
2023-01-09 18:05:19 +01:00
committed by teamcity
parent a60eab7b47
commit f0dbe1ad2d
9 changed files with 14 additions and 26 deletions
@@ -14,11 +14,9 @@ import org.jetbrains.kotlin.fir.analysis.js.checkers.isNativeObject
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.fullyExpandedClassId
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.name.JsStandardClassIds
import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull
object FirJsExternalFileChecker : FirBasicDeclarationChecker() {
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
@@ -28,8 +26,7 @@ object FirJsExternalFileChecker : FirBasicDeclarationChecker() {
return
}
val targetAnnotations = context.containingDeclarations
.lastIsInstanceOrNull<FirFile>()
val targetAnnotations = context.containingFile
?.annotations
?.firstOrNull { it.fullyExpandedClassId(context.session) in JsStandardClassIds.Annotations.annotationsRequiringExternal }
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.analysis.js.checkers.isNativeObject
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.name.JsStandardClassIds.Annotations.JsModule
import org.jetbrains.kotlin.name.JsStandardClassIds.Annotations.JsNonModule
import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull
object FirJsModuleChecker : FirBasicDeclarationChecker() {
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
@@ -33,12 +32,8 @@ object FirJsModuleChecker : FirBasicDeclarationChecker() {
reporter.reportOn(declaration.source, FirJsErrors.JS_MODULE_PROHIBITED_ON_NON_NATIVE, context)
}
if (context.isTopLevel) {
val file = context.containingDeclarations.lastIsInstanceOrNull<FirFile>()
if (file != null && file.isEitherModuleOrNonModule(context.session)) {
reporter.reportOn(declaration.source, FirJsErrors.NESTED_JS_MODULE_PROHIBITED, context)
}
if (context.isTopLevel && context.containingFile?.isEitherModuleOrNonModule(context.session) == true) {
reporter.reportOn(declaration.source, FirJsErrors.NESTED_JS_MODULE_PROHIBITED, context)
}
}