From e166e70916c870d055c07cd2b29439ea4d4cf076 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Wed, 3 Jan 2024 19:41:57 +0100 Subject: [PATCH] [FIR] Refactor FirRegularClassSymbol.getSuperClassSymbolOrAny ^KT-61564 --- .../FirNativeObjCOverrideInitChecker.kt | 13 +------------ .../kotlin/fir/resolve/SupertypeUtils.kt | 8 ++++++++ .../noarg/fir/FirNoArgDeclarationChecker.kt | 17 +---------------- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt index ea3544a852b..95ce051ef87 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOverrideInitChecker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.fir.analysis.native.checkers -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.* @@ -19,14 +18,13 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isOverride import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.fullyExpandedType +import org.jetbrains.kotlin.fir.resolve.getSuperClassSymbolOrAny import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.NativeStandardInteropNames.objCOverrideInitClassId @@ -95,15 +93,6 @@ object FirNativeObjCOverrideInitChecker : FirClassChecker() { } } -// Copy-pasted from plugins/noarg/noarg.k2/src/org/jetbrains/kotlin/noarg/fir/FirNoArgDeclarationChecker.kt -private fun FirRegularClassSymbol.getSuperClassSymbolOrAny(session: FirSession): FirRegularClassSymbol { - for (superType in resolvedSuperTypes) { - val symbol = superType.fullyExpandedType(session).toRegularClassSymbol(session) ?: continue - if (symbol.classKind == ClassKind.CLASS) return symbol - } - return session.builtinTypes.anyType.type.toRegularClassSymbol(session) ?: error("Symbol for Any not found") -} - // copy-pasted from org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirInlineDeclarationChecker private fun FirCallableDeclaration.getOverriddenSymbols(context: CheckerContext): List> { if (!this.isOverride) return emptyList() diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index a047ab96c0c..a90be6f0019 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -309,3 +309,11 @@ fun createSubstitutionForSupertype(superType: ConeLookupTagBasedType, session: F val mapping = klass.typeParameters.map { it.symbol }.zip(arguments).toMap() return ConeSubstitutorByMap(mapping, session) } + +fun FirRegularClassSymbol.getSuperClassSymbolOrAny(session: FirSession): FirRegularClassSymbol { + for (superType in resolvedSuperTypes) { + val symbol = superType.fullyExpandedType(session).toRegularClassSymbol(session) ?: continue + if (symbol.classKind == ClassKind.CLASS) return symbol + } + return session.builtinTypes.anyType.type.toRegularClassSymbol(session) ?: error("Symbol for Any not found") +} diff --git a/plugins/noarg/noarg.k2/src/org/jetbrains/kotlin/noarg/fir/FirNoArgDeclarationChecker.kt b/plugins/noarg/noarg.k2/src/org/jetbrains/kotlin/noarg/fir/FirNoArgDeclarationChecker.kt index b600e8e6584..6035ad79e96 100644 --- a/plugins/noarg/noarg.k2/src/org/jetbrains/kotlin/noarg/fir/FirNoArgDeclarationChecker.kt +++ b/plugins/noarg/noarg.k2/src/org/jetbrains/kotlin/noarg/fir/FirNoArgDeclarationChecker.kt @@ -8,20 +8,13 @@ package org.jetbrains.kotlin.noarg.fir import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn -import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirRegularClassChecker -import org.jetbrains.kotlin.fir.caches.FirCache -import org.jetbrains.kotlin.fir.caches.firCachesFactory -import org.jetbrains.kotlin.fir.caches.getValue import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.declarations.utils.isLocal -import org.jetbrains.kotlin.fir.extensions.predicateBasedProvider -import org.jetbrains.kotlin.fir.resolve.fullyExpandedType +import org.jetbrains.kotlin.fir.resolve.getSuperClassSymbolOrAny import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol -import org.jetbrains.kotlin.fir.types.toRegularClassSymbol object FirNoArgDeclarationChecker : FirRegularClassChecker() { override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { @@ -42,14 +35,6 @@ object FirNoArgDeclarationChecker : FirRegularClassChecker() { } - private fun FirRegularClassSymbol.getSuperClassSymbolOrAny(session: FirSession): FirRegularClassSymbol { - for (superType in resolvedSuperTypes) { - val symbol = superType.fullyExpandedType(session).toRegularClassSymbol(session) ?: continue - if (symbol.classKind == ClassKind.CLASS) return symbol - } - return session.builtinTypes.anyType.type.toRegularClassSymbol(session) ?: error("Symbol for Any not found") - } - private fun FirConstructorSymbol.isNoArgConstructor(): Boolean { return valueParameterSymbols.all { it.hasDefaultValue } }