[FIR] Start enum entries reworking

This commit is contained in:
Simon Ogorodnik
2019-11-28 18:07:29 +03:00
committed by Mikhail Glukhikh
parent 68d64f1b5c
commit 13132e69a3
60 changed files with 443 additions and 479 deletions
@@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl
import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
@@ -212,11 +211,6 @@ class KotlinDeserializedJvmSymbolsProvider(
).firstOrNull()
this.calleeReference = when {
entryClassSymbol != null && (entryClassSymbol as? FirClassSymbol)?.fir is FirEnumEntry -> {
FirResolvedNamedReferenceImpl(
null, name, entryClassSymbol
)
}
entryCallableSymbol != null -> {
FirResolvedNamedReferenceImpl(
null, name, entryCallableSymbol
@@ -340,9 +334,7 @@ class KotlinDeserializedJvmSymbolsProvider(
kotlinScopeProvider,
parentContext, this::findAndDeserializeClass
)
symbol.fir.declarations.filterIsInstance<FirEnumEntryImpl>().forEach {
classesCache[it.symbol.classId] = it.symbol
}
classesCache[classId] = symbol
val annotations = mutableListOf<FirAnnotationCall>()
kotlinJvmBinaryClass.loadClassAnnotations(object : KotlinJvmBinaryClass.AnnotationVisitor {
@@ -365,11 +365,11 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String):
val firElement = lookupTag.toSymbol(session)?.fir
if (firElement is FirRegularClass && firElement.classKind == ClassKind.ENUM_CLASS) {
val name = Name.identifier(value)
val firEnumEntry = firElement.declarations.filterIsInstance<FirEnumEntry>().find { it.name == name }
val firEnumEntry = firElement.collectEnumEntries().find { it.callableId.callableName == name }
return if (firEnumEntry != null) FirQualifiedAccessExpressionImpl(null).apply {
calleeReference = FirSimpleNamedReference(
null, name, null // TODO: , firEnumEntry.symbol
calleeReference = FirResolvedNamedReferenceImpl(
null, name, firEnumEntry
)
} else if (firElement is FirJavaClass) {
val firStaticProperty = firElement.declarations.filterIsInstance<FirJavaField>().find {