diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index a8797e14fc8..c6d49b817fd 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -704,7 +704,7 @@ private fun findDefaultValue(source: KtLightSourceElement): KtLightSourceElement fun ConeKotlinType.getInlineClassUnderlyingType(session: FirSession): ConeKotlinType { require(this.isSingleFieldValueClass(session)) - return toRegularClassSymbol(session)!!.primaryConstructorSymbol()!!.valueParameterSymbols[0].resolvedReturnTypeRef.coneType + return toRegularClassSymbol(session)!!.primaryConstructorSymbol(session)!!.valueParameterSymbols[0].resolvedReturnTypeRef.coneType } fun FirNamedFunctionSymbol.directOverriddenFunctions(session: FirSession, scopeSession: ScopeSession): List { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt index 9692477c4e8..4ef5e6dad0f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationClassDeclarationChecker.kt @@ -168,7 +168,7 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { } private fun checkCyclesInParameters(annotation: FirRegularClassSymbol, context: CheckerContext, reporter: DiagnosticReporter) { - val primaryConstructor = annotation.primaryConstructorSymbol() ?: return + val primaryConstructor = annotation.primaryConstructorSymbol(context.session) ?: return val checker = CycleChecker(annotation, context.session) for (valueParameter in primaryConstructor.valueParameterSymbols) { if (checker.parameterHasCycle(annotation, valueParameter)) { @@ -182,7 +182,7 @@ object FirAnnotationClassDeclarationChecker : FirRegularClassChecker() { private val annotationsWithCycle = mutableSetOf(targetAnnotation) fun annotationHasCycle(annotation: FirRegularClassSymbol): Boolean { - val primaryConstructor = annotation.primaryConstructorSymbol() ?: return false + val primaryConstructor = annotation.primaryConstructorSymbol(session) ?: return false for (valueParameter in primaryConstructor.valueParameterSymbols) { if (parameterHasCycle(annotation, valueParameter)) return true } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/declarationUtils.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/declarationUtils.kt index 7a5250a9009..3dc67b99e51 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/declarationUtils.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/declarationUtils.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.modality import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.coneType @@ -96,13 +97,9 @@ internal val FirBasedSymbol<*>.isLocalMember: Boolean internal val FirCallableSymbol<*>.isExtensionMember: Boolean get() = resolvedReceiverTypeRef != null && dispatchReceiverType != null -fun FirClassSymbol<*>.primaryConstructorSymbol(): FirConstructorSymbol? { - for (declarationSymbol in this.declarationSymbols) { - if (declarationSymbol is FirConstructorSymbol && declarationSymbol.isPrimary) { - return declarationSymbol - } - } - return null +@OptIn(SymbolInternals::class) +fun FirClassSymbol<*>.primaryConstructorSymbol(session: FirSession): FirConstructorSymbol? { + return fir.primaryConstructorIfAny(session) } fun FirTypeRef.needsMultiFieldValueClassFlattening(session: FirSession) = with(session.typeContext) { diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/services/FirSerializablePropertiesProvider.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/services/FirSerializablePropertiesProvider.kt index 0fdb6314644..da70ee0be0a 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/services/FirSerializablePropertiesProvider.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/services/FirSerializablePropertiesProvider.kt @@ -89,7 +89,7 @@ class FirSerializablePropertiesProvider(session: FirSession) : FirExtensionSessi .let { restoreCorrectOrderFromClassProtoExtension(classSymbol, it) } val isExternallySerializable = classSymbol.isEnumClass || - primaryConstructorProperties.size == (classSymbol.primaryConstructorSymbol()?.valueParameterSymbols?.size ?: 0) + primaryConstructorProperties.size == (classSymbol.primaryConstructorSymbol(session)?.valueParameterSymbols?.size ?: 0) val (serializableConstructorProperties, serializableStandaloneProperties) = serializableProperties.partition { it.propertySymbol in primaryConstructorProperties } return FirSerializableProperties(