From 567cda9767c3e34957f3c83a514d632108c8af93 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 24 Jun 2022 06:37:42 +0200 Subject: [PATCH] [Analysis API] cleanup the code --- .../KtFe10DescNamedClassOrObjectSymbol.kt | 2 ++ .../KtFe10PsiNamedClassOrObjectSymbol.kt | 7 ++++--- .../analysis/api/fir/KtSymbolByFirBuilder.kt | 4 ++-- .../analysis/api/fir/scopes/firScopeUtils.kt | 21 ++++++++++++------- .../symbols/KtFirNamedClassOrObjectSymbol.kt | 2 ++ .../api/impl/base/symbols/symbolUtils.kt | 14 ++++++------- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt index 6c32aaff2b2..b6207309cae 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescNamedClassOrObjectSymbol.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased +import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.* import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10DescNamedClassOrObjectSymbolSymbol @@ -53,6 +54,7 @@ internal class KtFe10DescNamedClassOrObjectSymbol( } } + @OptIn(KtAnalysisApiInternals::class) override val classKind: KtClassKind get() = withValidityAssertion { if (DescriptorUtils.isAnonymousObject(descriptor)) { diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiNamedClassOrObjectSymbol.kt index 450a0d8457f..0cb3f454d78 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiNamedClassOrObjectSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiNamedClassOrObjectSymbol.kt @@ -5,9 +5,9 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased +import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode -import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSupertypesWithAny import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktModality import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktMod import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktSymbolKind import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.ktVisibility import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached -import org.jetbrains.kotlin.analysis.api.impl.base.symbols.invalidClassKindError +import org.jetbrains.kotlin.analysis.api.impl.base.symbols.invalidEnumEntryAsClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol @@ -67,10 +67,11 @@ internal class KtFe10PsiNamedClassOrObjectSymbol( KtFe10PsiNamedClassOrObjectSymbol(companionObject, analysisContext) } + @OptIn(KtAnalysisApiInternals::class) override val classKind: KtClassKind get() = withValidityAssertion { when (psi) { - is KtEnumEntry -> invalidClassKindError(ClassKind.ENUM_ENTRY) + is KtEnumEntry -> invalidEnumEntryAsClassKind() is KtObjectDeclaration -> when { psi.isCompanion() -> KtClassKind.COMPANION_OBJECT psi.isObjectLiteral() -> KtClassKind.ANONYMOUS_OBJECT diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt index fb86dc2642d..0b68a0e020c 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt @@ -590,13 +590,13 @@ internal class KtSymbolByFirBuilder constructor( } -private class BuilderCache { +private class BuilderCache { private val cache = ContainerUtil.createConcurrentSoftMap() inline fun cache(key: From, calculation: () -> S): S { val value = cache.getOrPut(key, calculation) return value as? S - ?: error("Cannot cast ${value::class} to ${S::class}\n${DebugSymbolRenderer.render(value as KtSymbol)}") + ?: error("Cannot cast ${value::class} to ${S::class}\n${DebugSymbolRenderer.render(value)}") } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt index 7981cffc936..e0164ecac73 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt @@ -1,22 +1,26 @@ +/* + * Copyright 2010-2022 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.analysis.api.fir.scopes import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol -import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature import org.jetbrains.kotlin.fir.isSubstitutionOverride import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.name.Name -/* - * Copyright 2010-2022 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. - */ -internal fun FirScope.getCallableSymbols(callableNames: Collection, builder: KtSymbolByFirBuilder) = sequence { +internal fun FirScope.getCallableSymbols( + callableNames: Collection, + builder: KtSymbolByFirBuilder +): Sequence = sequence { callableNames.forEach { name -> val callables = mutableListOf() processFunctionsByName(name) { firSymbol -> @@ -35,7 +39,10 @@ internal fun FirScope.getCallableSymbols(callableNames: Collection, builde } } -internal fun FirScope.getCallableSignatures(callableNames: Collection, builder: KtSymbolByFirBuilder) = sequence { +internal fun FirScope.getCallableSignatures( + callableNames: Collection, + builder: KtSymbolByFirBuilder +): Sequence> = sequence { callableNames.forEach { name -> val signatures = mutableListOf>() processFunctionsByName(name) { firSymbol -> diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt index cecf9bcc254..e4c63b7d14d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.findPsi @@ -90,6 +91,7 @@ internal class KtFirNamedClassOrObjectSymbol( } + @OptIn(KtAnalysisApiInternals::class) override val classKind: KtClassKind get() = withValidityAssertion { firSymbol.classKind.toKtClassKind(isCompanionObject = firSymbol.isCompanion) diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/symbols/symbolUtils.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/symbols/symbolUtils.kt index e3d3ae64a35..9536c306685 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/symbols/symbolUtils.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/symbols/symbolUtils.kt @@ -5,23 +5,21 @@ package org.jetbrains.kotlin.analysis.api.impl.base.symbols +import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind import org.jetbrains.kotlin.descriptors.ClassKind +@KtAnalysisApiInternals fun ClassKind.toKtClassKind(isCompanionObject: Boolean): KtClassKind = when (this) { ClassKind.INTERFACE -> KtClassKind.INTERFACE ClassKind.ENUM_CLASS -> KtClassKind.ENUM_CLASS ClassKind.ANNOTATION_CLASS -> KtClassKind.ANNOTATION_CLASS ClassKind.CLASS -> KtClassKind.CLASS ClassKind.OBJECT -> if (isCompanionObject) KtClassKind.COMPANION_OBJECT else KtClassKind.OBJECT - ClassKind.ENUM_ENTRY -> invalidClassKindError(this) + ClassKind.ENUM_ENTRY -> invalidEnumEntryAsClassKind() } -fun invalidClassKindError(classKind: ClassKind): Nothing { - when (classKind) { - ClassKind.ENUM_ENTRY -> { - error("KtClassKind is not applicable for enum entry, as enum entry is a callable, not a classifier") - } - else -> error("Valid class kind") - } +@KtAnalysisApiInternals +fun invalidEnumEntryAsClassKind(): Nothing { + error("KtClassKind is not applicable for enum entry, as enum entry is a callable, not a classifier") } \ No newline at end of file