FIR checkers: reuse CheckerContext.containingFile & isTopLevel
This commit is contained in:
committed by
teamcity
parent
a60eab7b47
commit
f0dbe1ad2d
+1
-4
@@ -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 }
|
||||
|
||||
|
||||
+2
-7
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-3
@@ -16,13 +16,11 @@ import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.classKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirPropertyChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.needsMultiFieldValueClassFlattening
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingDeclarationSymbol
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
@@ -131,7 +129,7 @@ object FirJvmFieldApplicabilityChecker : FirPropertyChecker() {
|
||||
}
|
||||
|
||||
private fun isInsideJvmMultifileClassFile(context: CheckerContext): Boolean {
|
||||
return context.findClosest<FirFile>()?.annotations?.any {
|
||||
return context.containingFile?.annotations?.any {
|
||||
it.annotationTypeRef.coneType.classId == JVM_MULTIFILE_CLASS_ID
|
||||
} == true
|
||||
}
|
||||
|
||||
+2
-2
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.fir.analysis.native.checkers
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
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
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor
|
||||
@@ -48,7 +48,7 @@ object FirNativeSharedImmutableChecker : FirBasicDeclarationChecker() {
|
||||
|
||||
if (declaration.source?.kind is KtFakeSourceElementKind) return
|
||||
|
||||
if (context.containingDeclarations.lastOrNull() !is FirFile) {
|
||||
if (!context.isTopLevel) {
|
||||
reporter.reportIfHasAnnotation(
|
||||
declaration,
|
||||
sharedImmutableClassId,
|
||||
|
||||
+2
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
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
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.hasBackingField
|
||||
@@ -29,7 +30,7 @@ object FirNativeThreadLocalChecker : FirBasicDeclarationChecker() {
|
||||
|
||||
if (declaration.source?.kind is KtFakeSourceElementKind) return
|
||||
|
||||
if (context.containingDeclarations.lastOrNull() !is FirFile && !isObject) {
|
||||
if (!context.isTopLevel && !isObject) {
|
||||
reporter.reportIfHasAnnotation(declaration, threadLocalClassId, FirNativeErrors.INAPPLICABLE_THREAD_LOCAL_TOP_LEVEL, context)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.*
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
|
||||
@@ -237,7 +236,7 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() {
|
||||
context: CheckerContext,
|
||||
reporter: DiagnosticReporter
|
||||
) {
|
||||
val closestFirFile = context.findClosest<FirFile>()
|
||||
val closestFirFile = context.containingFile
|
||||
if (closestFirFile != null && !closestFirFile.packageFqName.startsWith(StandardClassIds.BASE_KOTLIN_PACKAGE.shortName())) {
|
||||
reporter.reportOn(
|
||||
deprecatedSinceKotlin.source,
|
||||
|
||||
+2
-3
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirOptInUsageBaseChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirOptInUsageBaseChecker.Experimentality
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
|
||||
@@ -159,7 +158,7 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
}
|
||||
|
||||
if (this is FirPropertyAccessorSymbol) return
|
||||
val file = context.findClosest<FirFile>() ?: return
|
||||
val file = context.containingFile ?: return
|
||||
val containingDeclarations = context.containingDeclarations + containingClass
|
||||
val visibilityChecker = context.session.visibilityChecker
|
||||
val hasVisibleBase = overriddenSymbols.any {
|
||||
@@ -270,7 +269,7 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
if (kind !is KtRealSourceElementKind && kind !is KtFakeSourceElementKind.PropertyFromParameter) return
|
||||
|
||||
val visibilityChecker = context.session.visibilityChecker
|
||||
val file = context.findClosest<FirFile>() ?: return
|
||||
val file = context.containingFile ?: return
|
||||
val containingDeclarations = context.containingDeclarations + containingClass
|
||||
|
||||
@OptIn(SymbolInternals::class)
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
|
||||
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.types.*
|
||||
|
||||
object FirTopLevelTypeAliasChecker : FirTypeAliasChecker() {
|
||||
override fun check(declaration: FirTypeAlias, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (context.containingDeclarations.lastOrNull() !is FirFile) {
|
||||
if (!context.isTopLevel) {
|
||||
reporter.reportOn(declaration.source, FirErrors.TOPLEVEL_TYPEALIASES_ONLY, context)
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isEnumClass
|
||||
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||
@@ -49,7 +48,7 @@ object FirEqualityCompatibilityChecker : FirEqualityOperatorCallChecker() {
|
||||
throw IllegalStateException(
|
||||
"Exception while determining type compatibility: lType: $lType, rType: $rType, " +
|
||||
"equality ${expression.render()}, " +
|
||||
"file ${context.containingDeclarations.filterIsInstance<FirFile>().firstOrNull()?.name}",
|
||||
"file ${context.containingFile?.name}",
|
||||
e
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user