[Analysis API] cleanup the code
This commit is contained in:
+2
@@ -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)) {
|
||||
|
||||
+4
-3
@@ -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
|
||||
|
||||
+2
-2
@@ -590,13 +590,13 @@ internal class KtSymbolByFirBuilder constructor(
|
||||
}
|
||||
|
||||
|
||||
private class BuilderCache<From, To : Any> {
|
||||
private class BuilderCache<From, To : KtSymbol> {
|
||||
private val cache = ContainerUtil.createConcurrentSoftMap<From, To>()
|
||||
|
||||
inline fun <reified S : To> 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)}")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-7
@@ -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<Name>, builder: KtSymbolByFirBuilder) = sequence {
|
||||
internal fun FirScope.getCallableSymbols(
|
||||
callableNames: Collection<Name>,
|
||||
builder: KtSymbolByFirBuilder
|
||||
): Sequence<KtCallableSymbol> = sequence {
|
||||
callableNames.forEach { name ->
|
||||
val callables = mutableListOf<KtCallableSymbol>()
|
||||
processFunctionsByName(name) { firSymbol ->
|
||||
@@ -35,7 +39,10 @@ internal fun FirScope.getCallableSymbols(callableNames: Collection<Name>, builde
|
||||
}
|
||||
}
|
||||
|
||||
internal fun FirScope.getCallableSignatures(callableNames: Collection<Name>, builder: KtSymbolByFirBuilder) = sequence {
|
||||
internal fun FirScope.getCallableSignatures(
|
||||
callableNames: Collection<Name>,
|
||||
builder: KtSymbolByFirBuilder
|
||||
): Sequence<KtCallableSignature<*>> = sequence {
|
||||
callableNames.forEach { name ->
|
||||
val signatures = mutableListOf<KtCallableSignature<*>>()
|
||||
processFunctionsByName(name) { firSymbol ->
|
||||
|
||||
+2
@@ -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)
|
||||
|
||||
+6
-8
@@ -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")
|
||||
}
|
||||
Reference in New Issue
Block a user