From 4d4c95b643a16e50d874aaaddc73721bfa1764be Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 10 Jan 2024 14:23:35 +0200 Subject: [PATCH] [FIR] Extract part of `FirNativeObjCNameChecker` into a separate checker There was a part of `FirNativeObjCNameChecker` which worked only with callable declarations, so it makes sense to extract it into the separate callable declarations-only checker. Also this separation will be useful in the future changes, when this checkers will be implemented differently for expect and non-expect classes in scope of KT-58881 --- .../FirNativeObjCNameCallableChecker.kt | 26 +++++++++++++++++++ .../checkers/FirNativeObjCNameChecker.kt | 19 +++----------- .../checkers/NativeDeclarationCheckers.kt | 3 ++- 3 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameCallableChecker.kt diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameCallableChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameCallableChecker.kt new file mode 100644 index 00000000000..465386f9199 --- /dev/null +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameCallableChecker.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.native.checkers + +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirCallableDeclarationChecker +import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction + +object FirNativeObjCNameCallableChecker : FirCallableDeclarationChecker() { + override fun check(declaration: FirCallableDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + if (declaration !is FirSimpleFunction && declaration !is FirProperty) return + val containingClass = context.containingDeclarations.lastOrNull() as? FirClass + if (containingClass != null) { + val firTypeScope = containingClass.unsubstitutedScope(context) + FirNativeObjCNameUtilities.checkCallableMember(firTypeScope, declaration.symbol, declaration, context, reporter) + } + } +} diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameChecker.kt index e58d96e3acb..71b9f4cb9ae 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCNameChecker.kt @@ -10,7 +10,6 @@ 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.unsubstitutedScope import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.EMPTY_OBJC_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.INAPPLICABLE_EXACT_OBJC_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.INAPPLICABLE_OBJC_NAME @@ -20,25 +19,16 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.INVA import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MISSING_EXACT_OBJC_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.NON_LITERAL_OBJC_NAME_ARG import org.jetbrains.kotlin.fir.analysis.native.checkers.FirNativeObjCNameUtilities.ObjCName -import org.jetbrains.kotlin.fir.analysis.native.checkers.FirNativeObjCNameUtilities.checkCallableMember import org.jetbrains.kotlin.fir.analysis.native.checkers.FirNativeObjCNameUtilities.getObjCNames -import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.utils.isOverride import org.jetbrains.kotlin.fir.expressions.FirConstExpression object FirNativeObjCNameChecker : FirBasicDeclarationChecker() { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { - checkDeclaration(declaration, context, reporter) - if (declaration is FirCallableDeclaration && (declaration is FirSimpleFunction || declaration is FirProperty)) { - val containingClass = context.containingDeclarations.lastOrNull() as? FirClass - if (containingClass != null) { - val firTypeScope = containingClass.unsubstitutedScope(context) - checkCallableMember(firTypeScope, declaration.symbol, declaration, context, reporter) - } - } - } - - private fun checkDeclaration(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { if (declaration is FirValueParameter) return // those are checked with the FirFunction val objCNames = declaration.symbol.getObjCNames(context.session).filterNotNull() if (objCNames.isEmpty()) return @@ -86,4 +76,3 @@ object FirNativeObjCNameChecker : FirBasicDeclarationChecker() { } } } - diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt index 7ec275334c5..0dab38ac8b9 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt @@ -19,7 +19,8 @@ object NativeDeclarationCheckers : DeclarationCheckers() { override val callableDeclarationCheckers: Set get() = setOf( - FirNativeObjCRefinementChecker + FirNativeObjCRefinementChecker, + FirNativeObjCNameCallableChecker, ) override val classCheckers: Set