[analysis api] remove KtClassKind.ENUM_ENTRY as enum entry is not a classifier

This commit is contained in:
Ilya Kirillov
2022-06-07 14:58:56 +02:00
parent a16a01bf37
commit a10e55cd6a
5 changed files with 36 additions and 28 deletions
@@ -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<KtType>
@@ -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
@@ -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
@@ -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")
}
}
@@ -91,7 +91,6 @@ public abstract class KtNamedClassOrObjectSymbol : KtClassOrObjectSymbol(),
public enum class KtClassKind {
CLASS,
ENUM_CLASS,
ENUM_ENTRY,
ANNOTATION_CLASS,
OBJECT,
COMPANION_OBJECT,