From 52d712e1102a1ed427fe6bf8ff438dae38d66fec Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Thu, 11 Jan 2024 14:29:38 +0200 Subject: [PATCH] [FIR] Introduce `memberDeclarationNameOrNull` --- .../fir/analysis/js/checkers/FirJsStableName.kt | 5 +---- .../diagnostics/coneDiagnosticToFirDiagnostic.kt | 9 ++++----- .../fir/declarations/utils/FirDeclarationUtil.kt | 16 ++++++++-------- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/FirJsStableName.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/FirJsStableName.kt index 7332a82e4d6..cad235a09fd 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/FirJsStableName.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/FirJsStableName.kt @@ -8,10 +8,8 @@ package org.jetbrains.kotlin.fir.analysis.js.checkers import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol -import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration 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.* internal data class FirJsStableName( @@ -40,7 +38,6 @@ internal data class FirJsStableName( } } - @OptIn(SymbolInternals::class) fun createStableNameOrNull(symbol: FirBasedSymbol<*>, session: FirSession): FirJsStableName? { val jsName = symbol.getJsName(session) if (jsName != null) { @@ -70,7 +67,7 @@ internal data class FirJsStableName( // - FirJsStableName.shouldClashBeCaughtByCommonFrontendCheck(). hasPublicName(symbol, session) ) { - val name = (symbol.fir as? FirMemberDeclaration)?.nameOrSpecialName?.identifierOrNullIfSpecial + val name = symbol.memberDeclarationNameOrNull?.identifierOrNullIfSpecial if (name != null) { return FirJsStableName(name, symbol, !hasStableNameInJavaScript, symbol.isPresentInGeneratedCode(session)) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt index 2ddeb0bb9ad..3ee1e1c915a 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExpectedTypeConstrai import org.jetbrains.kotlin.fir.resolve.inference.model.ConeLambdaArgumentConstraintPosition import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol -import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol @@ -318,11 +317,11 @@ private fun mapInapplicableCandidateError( is TypeVariableAsExplicitReceiver -> { val typeParameter = rootCause.typeParameter - @OptIn(SymbolInternals::class) FirErrors.BUILDER_INFERENCE_STUB_RECEIVER.createOn( rootCause.explicitReceiver.source, typeParameter.symbol.name, - (typeParameter.symbol.containingDeclarationSymbol.fir as FirMemberDeclaration).nameOrSpecialName + typeParameter.symbol.containingDeclarationSymbol.memberDeclarationNameOrNull + ?: error("containingDeclarationSymbol must have been a member declaration") ) } @@ -541,8 +540,8 @@ private fun ConstraintSystemError.toDiagnostic( FirErrors.BUILDER_INFERENCE_MULTI_LAMBDA_RESTRICTION.createOn( anonymous.source ?: source, typeParameterSymbol.name, - @OptIn(SymbolInternals::class) - (typeParameterSymbol.containingDeclarationSymbol.fir as FirMemberDeclaration).nameOrSpecialName + typeParameterSymbol.containingDeclarationSymbol.memberDeclarationNameOrNull + ?: error("containingDeclarationSymbol must have been a member declaration") ) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt index d0fc11fa3fd..50395cba089 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirDeclarationUtil.kt @@ -6,8 +6,8 @@ package org.jetbrains.kotlin.fir.declarations.utils import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.isNullableAny @@ -49,14 +49,14 @@ val FirDeclaration.isNonLocal val FirCallableDeclaration.isExtension get() = receiverParameter != null +val FirBasedSymbol<*>.memberDeclarationNameOrNull: Name? + // Accessing `fir` is ok, because `nameOrSpecialName` only accesses names + get() = (fir as? FirMemberDeclaration)?.nameOrSpecialName + val FirMemberDeclaration.nameOrSpecialName: Name get() = when (this) { - is FirCallableDeclaration -> - this.symbol.callableId.callableName - is FirClass -> - this.classId.shortClassName - is FirTypeAlias -> - this.name + is FirCallableDeclaration -> symbol.callableId.callableName + is FirClassLikeDeclaration -> classId.shortClassName } val FirNamedFunctionSymbol.isMethodOfAny: Boolean