Migrate to FirEnumEntry

This commit is contained in:
simon.ogorodnik
2019-12-30 13:49:31 +03:00
committed by Mikhail Glukhikh
parent 5b5a5292b7
commit 65a44e2e20
27 changed files with 182 additions and 317 deletions
@@ -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.collectEnumEntries().find { it.callableId.callableName == name }
val firEnumEntry = firElement.collectEnumEntries().find { it.name == name }
return if (firEnumEntry != null) FirQualifiedAccessExpressionImpl(null).apply {
calleeReference = FirResolvedNamedReferenceImpl(
null, name, firEnumEntry
null, name, firEnumEntry.symbol
)
} else if (firElement is FirJavaClass) {
val firStaticProperty = firElement.declarations.filterIsInstance<FirJavaField>().find {
@@ -515,7 +515,7 @@ class DeclarationsConverter(
/**
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumEntry
*/
private fun convertEnumEntry(enumEntry: LighterASTNode, classWrapper: ClassWrapper): FirProperty {
private fun convertEnumEntry(enumEntry: LighterASTNode, classWrapper: ClassWrapper): FirEnumEntry {
var modifiers = Modifier()
lateinit var identifier: String
var hasInitializerList = false
@@ -534,11 +534,10 @@ class DeclarationsConverter(
}
val enumEntryName = identifier.nameAsSafeName()
return FirPropertyImpl(
return FirEnumEntryImpl(
null,
session,
classWrapper.delegatedSelfTypeRef,
receiverTypeRef = null,
name = enumEntryName,
initializer = FirAnonymousObjectImpl(
null,
@@ -566,10 +565,7 @@ class DeclarationsConverter(
convertPrimaryConstructor(null, enumClassWrapper)?.let { declarations += it.firConstructor }
classBodyNode?.also { declarations += convertClassBody(it, enumClassWrapper) }
},
delegate = null,
isVar = false,
symbol = FirPropertySymbol(CallableId(context.currentClassId, enumEntryName)),
isLocal = false,
symbol = FirVariableSymbol(CallableId(context.currentClassId, enumEntryName)),
status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply {
isStatic = true
}
@@ -486,22 +486,18 @@ class RawFirBuilder(session: FirSession, val scopeProvider: FirScopeProvider, va
)
}
return FirPropertyImpl(
return FirEnumEntryImpl(
source = toFirSourceElement(),
session,
delegatedEnumSelfTypeRef,
receiverTypeRef = null,
name = nameAsSafeName,
initializer = obj,
delegate = null,
isVar = false,
isLocal = false,
status = FirDeclarationStatusImpl(
Visibilities.PUBLIC, Modality.FINAL
).apply {
isStatic = true
},
symbol = FirPropertySymbol(callableIdForName(nameAsSafeName))
symbol = FirVariableSymbol(callableIdForName(nameAsSafeName))
)
}
@@ -140,9 +140,9 @@ abstract class AbstractAnnotationDeserializer(
val enumSymbol = enumLookupTag.toSymbol(this@AbstractAnnotationDeserializer.session)
val firClass = enumSymbol?.fir as? FirRegularClass
val enumEntries = firClass?.collectEnumEntries() ?: emptyList()
val enumEntrySymbol = enumEntries.find { it.callableId.callableName == entryName }
val enumEntrySymbol = enumEntries.find { it.name == entryName }
this.calleeReference = enumEntrySymbol?.let {
FirResolvedNamedReferenceImpl(null, entryName, it)
FirResolvedNamedReferenceImpl(null, entryName, it.symbol)
} ?: FirErrorNamedReferenceImpl(
null,
FirSimpleDiagnostic("Strange deserialized enum value: $classId.$entryName", DiagnosticKind.DeserializationError)
@@ -18,10 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirSealedClassImpl
import org.jetbrains.kotlin.fir.scopes.KotlinScopeProvider
import org.jetbrains.kotlin.fir.declarations.impl.*
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl
import org.jetbrains.kotlin.metadata.ProtoBuf
@@ -129,24 +126,13 @@ fun deserializeClassToSymbol(
val enumEntryName = nameResolver.getName(enumEntryProto.name)
val enumType = ConeClassLikeTypeImpl(symbol.toLookupTag(), emptyArray(), false)
val property = FirPropertyImpl(
val property = FirEnumEntryImpl(
null,
session,
FirResolvedTypeRefImpl(null, enumType),
null,
enumEntryName,
initializer = FirAnonymousObjectImpl(
null,
session,
classKind = ClassKind.ENUM_ENTRY,
symbol = FirAnonymousObjectSymbol()
).apply {
superTypeRefs += FirResolvedTypeRefImpl(source = null, type = enumType)
},
delegate = null,
isVar = false,
symbol = FirPropertySymbol(CallableId(classId, enumEntryName)),
isLocal = false,
initializer = null,
symbol = FirVariableSymbol(CallableId(classId, enumEntryName)),
status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply {
isStatic = true
}
@@ -107,6 +107,10 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: KotlinSc
override fun visitProperty(property: FirProperty) {
visitCallableDeclaration(property)
}
override fun visitEnumEntry(enumEntry: FirEnumEntry) {
visitCallableDeclaration(enumEntry)
}
})
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
import org.jetbrains.kotlin.fir.types.ConeNullability
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
@@ -74,7 +75,7 @@ class FirWhenExhaustivenessTransformer(private val bodyResolveComponents: BodyRe
private fun checkEnumExhaustiveness(whenExpression: FirWhenExpression, enum: FirRegularClass, nullable: Boolean): Boolean {
val data = EnumExhaustivenessData(
enum.collectEnumEntries().toMutableSet(),
enum.collectEnumEntries().map { it.symbol }.toMutableSet(),
!nullable
)
for (branch in whenExpression.branches) {
@@ -83,7 +84,7 @@ class FirWhenExhaustivenessTransformer(private val bodyResolveComponents: BodyRe
return data.containsNull && data.remainingEntries.isEmpty()
}
private class EnumExhaustivenessData(val remainingEntries: MutableSet<FirPropertySymbol>, var containsNull: Boolean)
private class EnumExhaustivenessData(val remainingEntries: MutableSet<FirVariableSymbol<FirEnumEntry>>, var containsNull: Boolean)
private object EnumExhaustivenessVisitor : FirVisitor<Unit, EnumExhaustivenessData>() {
override fun visitElement(element: FirElement, data: EnumExhaustivenessData) {}
@@ -98,9 +99,9 @@ class FirWhenExhaustivenessTransformer(private val bodyResolveComponents: BodyRe
}
is FirQualifiedAccessExpression -> {
val reference = argument.calleeReference as? FirResolvedNamedReference ?: return
val symbol = reference.resolvedSymbol
if (symbol is FirPropertySymbol)
data.remainingEntries.remove(symbol)
val symbol = (reference.resolvedSymbol.fir as? FirEnumEntry)?.symbol ?: return
data.remainingEntries.remove(symbol)
}
}
}
+3 -15
View File
@@ -365,21 +365,9 @@ public abstract interface Comparable<in T> : R|kotlin/Any| {
public final enum class DeprecationLevel : R|kotlin/Enum<kotlin/DeprecationLevel>| {
private constructor(): R|kotlin/DeprecationLevel|
public final static val WARNING: R|kotlin/DeprecationLevel| = object : R|kotlin/DeprecationLevel| {
}
public final static val ERROR: R|kotlin/DeprecationLevel| = object : R|kotlin/DeprecationLevel| {
}
public final static val HIDDEN: R|kotlin/DeprecationLevel| = object : R|kotlin/DeprecationLevel| {
}
public final static enum entry WARNING: R|kotlin/DeprecationLevel|
public final static enum entry ERROR: R|kotlin/DeprecationLevel|
public final static enum entry HIDDEN: R|kotlin/DeprecationLevel|
}
public final class Double : R|kotlin/Number|, R|kotlin/Comparable<kotlin/Double>| {
@@ -6,11 +6,7 @@
public final enum class E : R|kotlin/Enum<test/E>| {
private constructor(): R|test/E|
public final static val ENTRY: R|test/E| = object : R|test/E| {
}
public final static enum entry ENTRY: R|test/E|
}
public final annotation class EnumOption : R|kotlin/Annotation| {
@@ -1,11 +1,7 @@
public final enum class E : R|kotlin/Enum<test/E>| {
private constructor(): R|test/E|
public final static val CAKE: R|test/E| = object : R|test/E| {
}
public final static enum entry CAKE: R|test/E|
}
public final annotation class EnumAnno : R|kotlin/Annotation| {
@@ -17,25 +17,9 @@ public final annotation class Bnno : R|kotlin/Annotation| {
public final enum class Eee : R|kotlin/Enum<test/Eee>| {
private constructor(): R|test/Eee|
public final static val Entry1: R|test/Eee| = object : R|test/Eee| {
}
public final static val Entry2: R|test/Eee| = object : R|test/Eee| {
}
public final static val Entry3: R|test/Eee| = object : R|test/Eee| {
}
public final static val Entry4: R|test/Eee| = object : R|test/Eee| {
}
public final static enum entry Entry1: R|test/Eee|
public final static enum entry Entry2: R|test/Eee|
public final static enum entry Entry3: R|test/Eee|
public final static enum entry Entry4: R|test/Eee|
}
@@ -1,30 +1,18 @@
internal final enum class In : R|kotlin/Enum<test/In>| {
private constructor(): R|test/In|
public final static val A: R|test/In| = object : R|test/In| {
}
public final static enum entry A: R|test/In|
}
private final enum class Pr : R|kotlin/Enum<test/Pr>| {
private constructor(): R|test/Pr|
public final static val A: R|test/Pr| = object : R|test/Pr| {
}
public final static enum entry A: R|test/Pr|
}
public final enum class Pu : R|kotlin/Enum<test/Pu>| {
private constructor(): R|test/Pu|
public final static val A: R|test/Pu| = object : R|test/Pu| {
}
public final static enum entry A: R|test/Pu|
}
@@ -7,20 +7,8 @@ public final enum class En : R|kotlin/Enum<test/En>| {
private constructor(b: R|kotlin/Boolean| = STUB, i: R|kotlin/Int| = STUB): R|test/En|
public final static val E1: R|test/En| = object : R|test/En| {
}
public final static val E2: R|test/En| = object : R|test/En| {
}
public final static val E3: R|test/En| = object : R|test/En| {
}
public final static enum entry E1: R|test/En|
public final static enum entry E2: R|test/En|
public final static enum entry E3: R|test/En|
}
@@ -19,15 +19,7 @@ public final enum class Enum : R|kotlin/Enum<test/Enum>| {
public abstract interface Trait : R|kotlin/Any| {
}
public final static val ENTRY1: R|test/Enum| = object : R|test/Enum| {
}
public final static val ENTRY2: R|test/Enum| = object : R|test/Enum| {
}
public final static enum entry ENTRY1: R|test/Enum|
public final static enum entry ENTRY2: R|test/Enum|
}
@@ -4,11 +4,7 @@ public final class A : R|kotlin/Any| {
public final enum class E : R|kotlin/Enum<test/A.E>| {
private constructor(): R|test/A.E|
public final static val ENTRY: R|test/A.E| = object : R|test/A.E| {
}
public final static enum entry ENTRY: R|test/A.E|
}
}
@@ -9,11 +9,7 @@ public final class A : R|kotlin/Any| {
public final enum class E : R|kotlin/Enum<test/A.E>| {
private constructor(): R|test/A.E|
public final static val ENTRY: R|test/A.E| = object : R|test/A.E| {
}
public final static enum entry ENTRY: R|test/A.E|
}
}
@@ -1,10 +1,6 @@
public final enum class MyEnum : R|kotlin/Enum<test/MyEnum>| {
private constructor(): R|test/MyEnum|
public final static val ENTRY: R|test/MyEnum| = object : R|test/MyEnum| {
}
public final static enum entry ENTRY: R|test/MyEnum|
}
@@ -1,15 +1,7 @@
public final enum class Test : R|kotlin/Enum<test/Test>| {
private constructor(a: R|kotlin/Int|): R|test/Test|
public final static val A: R|test/Test| = object : R|test/Test| {
}
public final static val B: R|test/Test| = object : R|test/Test| {
}
public final static enum entry A: R|test/Test|
public final static enum entry B: R|test/Test|
}
@@ -1,45 +1,13 @@
public final enum class E : R|kotlin/Enum<test/E>| {
private constructor(): R|test/E|
public final static val ONE: R|test/E| = object : R|test/E| {
}
public final static val TWO: R|test/E| = object : R|test/E| {
}
public final static val THREE: R|test/E| = object : R|test/E| {
}
public final static val FOUR: R|test/E| = object : R|test/E| {
}
public final static val FIVE: R|test/E| = object : R|test/E| {
}
public final static val SIX: R|test/E| = object : R|test/E| {
}
public final static val SEVEN: R|test/E| = object : R|test/E| {
}
public final static val EIGHT: R|test/E| = object : R|test/E| {
}
public final static enum entry ONE: R|test/E|
public final static enum entry TWO: R|test/E|
public final static enum entry THREE: R|test/E|
public final static enum entry FOUR: R|test/E|
public final static enum entry FIVE: R|test/E|
public final static enum entry SIX: R|test/E|
public final static enum entry SEVEN: R|test/E|
public final static enum entry EIGHT: R|test/E|
}
+2 -6
View File
@@ -21,7 +21,7 @@ FILE: enum.kt
public final val x: R|Some| = R|<local>/x|
public get(): R|Some|
public final static val FIRST: R|SomeEnum| = object : R|SomeEnum| {
public final static enum entry FIRST: R|SomeEnum| = object : R|SomeEnum| {
private constructor(): R|anonymous| {
super<R|SomeEnum|>(Q|O1|)
}
@@ -32,9 +32,7 @@ FILE: enum.kt
}
public final static val SECOND: R|SomeEnum| = object : R|SomeEnum| {
public final static enum entry SECOND: R|SomeEnum| = object : R|SomeEnum| {
private constructor(): R|anonymous| {
super<R|SomeEnum|>(Q|O2|)
}
@@ -45,8 +43,6 @@ FILE: enum.kt
}
public abstract fun check(y: R|Some|): R|kotlin/Boolean|
public final static fun values(): R|kotlin/Array<SomeEnum>| {
@@ -4,24 +4,20 @@ FILE: enumWithCompanion.kt
super<R|kotlin/Any|>()
}
public final static val A: R|EC| = object : R|EC| {
public final static enum entry A: R|EC| = object : R|EC| {
private constructor(): R|anonymous| {
super<R|EC|>()
}
}
public final static val B: R|EC| = object : R|EC| {
public final static enum entry B: R|EC| = object : R|EC| {
private constructor(): R|anonymous| {
super<R|EC|>()
}
}
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|EC.Companion| {
super<R|kotlin/Any|>()
@@ -4,33 +4,27 @@ FILE: exhaustiveness_enum.kt
super<R|kotlin/Any|>()
}
public final static val A: R|Enum| = object : R|Enum| {
public final static enum entry A: R|Enum| = object : R|Enum| {
private constructor(): R|anonymous| {
super<R|Enum|>()
}
}
public final static val B: R|Enum| = object : R|Enum| {
public final static enum entry B: R|Enum| = object : R|Enum| {
private constructor(): R|anonymous| {
super<R|Enum|>()
}
}
public final static val C: R|Enum| = object : R|Enum| {
public final static enum entry C: R|Enum| = object : R|Enum| {
private constructor(): R|anonymous| {
super<R|Enum|>()
}
}
public final static fun values(): R|kotlin/Array<Enum>| {
}
@@ -4,33 +4,27 @@ FILE: enumValues.kt
super<R|kotlin/Any|>()
}
public final static val FIRST: R|MyEnum| = object : R|MyEnum| {
public final static enum entry FIRST: R|MyEnum| = object : R|MyEnum| {
private constructor(): R|anonymous| {
super<R|MyEnum|>()
}
}
public final static val SECOND: R|MyEnum| = object : R|MyEnum| {
public final static enum entry SECOND: R|MyEnum| = object : R|MyEnum| {
private constructor(): R|anonymous| {
super<R|MyEnum|>()
}
}
public final static val LAST: R|MyEnum| = object : R|MyEnum| {
public final static enum entry LAST: R|MyEnum| = object : R|MyEnum| {
private constructor(): R|anonymous| {
super<R|MyEnum|>()
}
}
public final fun bar(): R|kotlin/Int| {
^bar Int(42)
}
@@ -33,15 +33,13 @@ FILE: qualifiedExpressions.kt
super<R|kotlin/Any|>()
}
public final static val entry: R|a/b/E| = object : R|a/b/E| {
public final static enum entry entry: R|a/b/E| = object : R|a/b/E| {
private constructor(): R|anonymous| {
super<R|a/b/E|>()
}
}
public final static fun values(): R|kotlin/Array<a/b/E>| {
}
+6 -18
View File
@@ -4,33 +4,27 @@ FILE: enums.kt
super<R|kotlin/Any|>()
}
public final static val FIRST: R|Order| = object : R|Order| {
public final static enum entry FIRST: R|Order| = object : R|Order| {
private constructor(): R|anonymous| {
super<R|Order|>()
}
}
public final static val SECOND: R|Order| = object : R|Order| {
public final static enum entry SECOND: R|Order| = object : R|Order| {
private constructor(): R|anonymous| {
super<R|Order|>()
}
}
public final static val THIRD: R|Order| = object : R|Order| {
public final static enum entry THIRD: R|Order| = object : R|Order| {
private constructor(): R|anonymous| {
super<R|Order|>()
}
}
public final static fun values(): R|kotlin/Array<Order>| {
}
@@ -49,7 +43,7 @@ FILE: enums.kt
internal final val r: R|kotlin/Double| = R|<local>/r|
internal get(): R|kotlin/Double|
public final static val MERCURY: R|Planet| = object : R|Planet| {
public final static enum entry MERCURY: R|Planet| = object : R|Planet| {
private constructor(): R|anonymous| {
super<R|Planet|>(Double(1.0), Double(2.0))
}
@@ -60,9 +54,7 @@ FILE: enums.kt
}
public final static val VENERA: R|Planet| = object : R|Planet| {
public final static enum entry VENERA: R|Planet| = object : R|Planet| {
private constructor(): R|anonymous| {
super<R|Planet|>(Double(3.0), Double(4.0))
}
@@ -73,9 +65,7 @@ FILE: enums.kt
}
public final static val EARTH: R|Planet| = object : R|Planet| {
public final static enum entry EARTH: R|Planet| = object : R|Planet| {
private constructor(): R|anonymous| {
super<R|Planet|>(Double(5.0), Double(6.0))
}
@@ -86,8 +76,6 @@ FILE: enums.kt
}
public final val g: R|kotlin/Double| = R|/Planet.Companion.G|.R|kotlin/Double.times|(R|<local>/m|).R|kotlin/Double.div|(R|<local>/r|.R|kotlin/Double.times|(R|<local>/r|))
public get(): R|kotlin/Double|
@@ -68,14 +68,7 @@ val FirClassSymbol<*>.superConeTypes
val FirClass<*>.superConeTypes get() = superTypeRefs.mapNotNull { it.coneTypeSafe<ConeClassLikeType>() }
fun FirRegularClass.collectEnumEntries(): Collection<FirPropertySymbol> {
fun FirRegularClass.collectEnumEntries(): Collection<FirEnumEntry> {
assert(classKind == ClassKind.ENUM_CLASS)
return declarations
.mapNotNull {
if (it !is FirProperty) return@mapNotNull null
val initializer = it.initializer
if (initializer == null || initializer !is FirAnonymousObject || initializer.classKind != ClassKind.ENUM_ENTRY)
return@mapNotNull null
return@mapNotNull it.symbol
}
return declarations.filterIsInstance<FirEnumEntry>()
}
+110 -67
View File
@@ -1,94 +1,137 @@
FILE fqName:<root> fileName:/enumEntry.kt
CLASS ENUM_CLASS name:Z modality:FINAL visibility:public superTypes:[kotlin.Enum<<root>.Z>]
CLASS ENUM_CLASS name:Z modality:OPEN visibility:public superTypes:[kotlin.Enum<<root>.Z>]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z
CONSTRUCTOR visibility:private <> () returnType:<root>.Z [primary]
CONSTRUCTOR visibility:private <> () returnType:<root>.Z [primary]h
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_CLASS name:Z modality:FINAL visibility:public superTypes:[kotlin.Enum<<root>.Z>]'
CLASS ENUM_ENTRY name:ENTRY modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z.ENTRY
CONSTRUCTOR visibility:public <> () returnType:<root>.Z.ENTRY [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_ENTRY name:ENTRY modality:FINAL visibility:public superTypes:[kotlin.Any]'
FUN name:test visibility:public modality:FINAL <> ($this:<root>.Z.ENTRY) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Z.ENTRY
BLOCK_BODY
CLASS CLASS name:A modality:FINAL visibility:public [inner] superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z.ENTRY.A
CONSTRUCTOR visibility:public <> () returnType:<root>.Z.ENTRY.A [primary]
ENUM_CONSTRUCTOR_CALL 'public constructor <init> (name: kotlin.String, ordinal: kotlin.Int) [primary] declared in kotlin.Enum'
<E>: <root>.Z
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_CLASS name:Z modality:OPEN visibility:public superTypes:[kotlin.Enum<<root>.Z>]'
ENUM_ENTRY name:ENTRY
init: ENUM_CONSTRUCTOR_CALL 'private constructor <init> () [primary] declared in <root>.Z.ENTRY'
class: CLASS ENUM_ENTRY name:ENTRY modality:FINAL visibility:public superTypes:[<root>.Z]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z.ENTRY
CONSTRUCTOR visibility:private <> () returnType:<root>.Z.ENTRY [primary]
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public [inner] superTypes:[kotlin.Any]'
FUN name:test2 visibility:public modality:FINAL <> ($this:<root>.Z.ENTRY.A) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Z.ENTRY.A
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
ENUM_CONSTRUCTOR_CALL 'private constructor <init> () [primary] declared in <root>.Z'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_ENTRY name:ENTRY modality:FINAL visibility:public superTypes:[<root>.Z]'
FUN name:test visibility:public modality:FINAL <> ($this:<root>.Z.ENTRY) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Z.ENTRY
BLOCK_BODY
CALL 'public final fun test (): kotlin.Unit declared in <root>.Z.ENTRY' type=kotlin.Unit origin=null
$this: GET_VAR '<this>: <root>.Z.ENTRY declared in <root>.Z.ENTRY' type=<root>.Z.ENTRY origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
CLASS CLASS name:A modality:FINAL visibility:public [inner] superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Z.ENTRY.A
CONSTRUCTOR visibility:public <> ($this:<root>.Z.ENTRY) returnType:<root>.Z.ENTRY.A [primary]
$outer: VALUE_PARAMETER name:<this> type:<root>.Z.ENTRY
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL 'public constructor <init> () [primary] declared in kotlin.Any'
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public [inner] superTypes:[kotlin.Any]'
FUN name:test2 visibility:public modality:FINAL <> ($this:<root>.Z.ENTRY.A) returnType:kotlin.Unit
$this: VALUE_PARAMETER name:<this> type:<root>.Z.ENTRY.A
BLOCK_BODY
CALL 'public final fun test (): kotlin.Unit declared in <root>.Z.ENTRY' type=kotlin.Unit origin=null
$this: GET_ENUM 'ENUM_ENTRY name:ENTRY' type=<root>.Z.ENTRY
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Any [fake_override]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
protected final fun clone (): kotlin.Any [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:finalize visibility:protected/*protected and package*/ modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ final fun finalize (): kotlin.Unit [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:getDeclaringClass visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:java.lang.Class<<root>.Z?>? [fake_override]
overridden:
public final fun getDeclaringClass (): java.lang.Class<<root>.Z?>? [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>, other:<root>.Z) returnType:kotlin.Int [fake_override,operator]
overridden:
public final fun compareTo (other: <root>.Z): kotlin.Int [fake_override,operator] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
VALUE_PARAMETER name:other index:0 type:<root>.Z
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public final fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
public final fun hashCode (): kotlin.Int [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val]
FUN FAKE_OVERRIDE name:<get-name> visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.String [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val]
overridden:
public final fun <get-name> (): kotlin.String [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val]
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val]
overridden:
public final fun <get-ordinal> (): kotlin.Int [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
public open fun hashCode (): kotlin.Int declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Any
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:values visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Array<<root>.Z>
$this: VALUE_PARAMETER name:<this> type:<root>.Z
BLOCK_BODY
FUN name:valueOf visibility:public modality:FINAL <> ($this:<root>.Z, value:kotlin.String) returnType:<root>.Z
$this: VALUE_PARAMETER name:<this> type:<root>.Z
VALUE_PARAMETER name:value index:0 type:kotlin.String
BLOCK_BODY
FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override]
public open fun toString (): kotlin.String [fake_override] declared in <root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Any [fake_override]
overridden:
protected final fun clone (): kotlin.Any declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum
FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum, other:<root>.Z) returnType:kotlin.Int [fake_override,operator]
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:finalize visibility:protected/*protected and package*/ modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ final fun finalize (): kotlin.Unit declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:getDeclaringClass visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:java.lang.Class<<root>.Z?>? [fake_override]
overridden:
public final fun getDeclaringClass (): java.lang.Class<E of kotlin.Enum?>? declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>, other:<root>.Z) returnType:kotlin.Int [fake_override,operator]
overridden:
public final fun compareTo (other: E of kotlin.Enum): kotlin.Int [operator] declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
VALUE_PARAMETER name:other index:0 type:<root>.Z
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
public final fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Int [fake_override]
overridden:
public final fun hashCode (): kotlin.Int declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val]
FUN FAKE_OVERRIDE name:<get-name> visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.String [fake_override]
FUN FAKE_OVERRIDE name:<get-name> visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.String [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val]
overridden:
public final fun <get-name> (): kotlin.String declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:<root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val]
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:<root>.Z) returnType:kotlin.Int [fake_override]
FUN FAKE_OVERRIDE name:<get-ordinal> visibility:public modality:FINAL <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val]
overridden:
public final fun <get-ordinal> (): kotlin.Int declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:<root>.Z
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum<<root>.Z>) returnType:kotlin.String [fake_override]
overridden:
public open fun toString (): kotlin.String declared in kotlin.Enum
$this: VALUE_PARAMETER name:<this> type:kotlin.Enum<<root>.Z>
FUN ENUM_CLASS_SPECIAL_MEMBER name:values visibility:public modality:FINAL <> () returnType:kotlin.Array<<root>.Z>
SYNTHETIC_BODY kind=ENUM_VALUES
FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:<root>.Z
VALUE_PARAMETER name:value index:0 type:kotlin.String
SYNTHETIC_BODY kind=ENUM_VALUEOF