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 d1ac2a666be..6c32aaff2b2 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 @@ -9,6 +9,8 @@ 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 import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer +import org.jetbrains.kotlin.analysis.api.impl.base.symbols.toKtClassKind +import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol @@ -16,9 +18,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.KtType -import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.DescriptorUtils @@ -55,20 +55,10 @@ internal class KtFe10DescNamedClassOrObjectSymbol( override val classKind: KtClassKind get() = withValidityAssertion { - if (descriptor.isCompanionObject) { - return KtClassKind.COMPANION_OBJECT - } else if (DescriptorUtils.isAnonymousObject(descriptor)) { + if (DescriptorUtils.isAnonymousObject(descriptor)) { error("Should be an anonymous object") } - - return when (descriptor.kind) { - ClassKind.CLASS -> KtClassKind.CLASS - ClassKind.INTERFACE -> KtClassKind.INTERFACE - ClassKind.ENUM_CLASS -> KtClassKind.ENUM_CLASS - ClassKind.ENUM_ENTRY -> KtClassKind.ENUM_ENTRY - ClassKind.ANNOTATION_CLASS -> KtClassKind.ANNOTATION_CLASS - ClassKind.OBJECT -> KtClassKind.OBJECT - } + descriptor.kind.toKtClassKind(isCompanionObject = descriptor.isCompanionObject) } override val superTypes: List 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 5332a4a6c3e..450a0d8457f 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 @@ -18,6 +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.symbols.KtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol @@ -26,10 +27,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointe import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.Modality -import org.jetbrains.kotlin.descriptors.Visibilities -import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name @@ -72,7 +70,7 @@ internal class KtFe10PsiNamedClassOrObjectSymbol( override val classKind: KtClassKind get() = withValidityAssertion { when (psi) { - is KtEnumEntry -> KtClassKind.ENUM_ENTRY + is KtEnumEntry -> invalidClassKindError(ClassKind.ENUM_ENTRY) 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/symbols/KtFirNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt index f6ffa64e95a..671f6e644d7 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 @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForD import org.jetbrains.kotlin.analysis.api.fir.findPsi import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirClassOrObjectInLibrarySymbolPointer import org.jetbrains.kotlin.analysis.api.fir.utils.cached +import org.jetbrains.kotlin.analysis.api.impl.base.symbols.toKtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind @@ -94,14 +95,7 @@ internal class KtFirNamedClassOrObjectSymbol( override val classKind: KtClassKind get() = withValidityAssertion { - when (firSymbol.classKind) { - ClassKind.INTERFACE -> KtClassKind.INTERFACE - ClassKind.ENUM_CLASS -> KtClassKind.ENUM_CLASS - ClassKind.ENUM_ENTRY -> KtClassKind.ENUM_ENTRY - ClassKind.ANNOTATION_CLASS -> KtClassKind.ANNOTATION_CLASS - ClassKind.CLASS -> KtClassKind.CLASS - ClassKind.OBJECT -> if (firSymbol.isCompanion) KtClassKind.COMPANION_OBJECT else KtClassKind.OBJECT - } + firSymbol.classKind.toKtClassKind(isCompanionObject = firSymbol.isCompanion) } override val symbolKind: KtSymbolKind 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 new file mode 100644 index 00000000000..e3d3ae64a35 --- /dev/null +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/symbols/symbolUtils.kt @@ -0,0 +1,27 @@ +/* + * 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.impl.base.symbols + +import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind +import org.jetbrains.kotlin.descriptors.ClassKind + +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) +} + +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") + } +} \ No newline at end of file diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtClassLikeSymbol.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtClassLikeSymbol.kt index 0d13e92cd43..7f5cab0b54c 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtClassLikeSymbol.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtClassLikeSymbol.kt @@ -91,7 +91,6 @@ public abstract class KtNamedClassOrObjectSymbol : KtClassOrObjectSymbol(), public enum class KtClassKind { CLASS, ENUM_CLASS, - ENUM_ENTRY, ANNOTATION_CLASS, OBJECT, COMPANION_OBJECT,