From c3c758c7cc45044516751a1671d1e6771f36b260 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 1 Sep 2016 17:19:13 +0300 Subject: [PATCH] Do not generate underlying classes for enum entries without member declarations. --- .../org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt | 3 +-- .../org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt | 2 +- .../src/org/jetbrains/kotlin/ir/declarations/IrDelegate.kt | 3 +-- compiler/testData/ir/irText/classes/enum.kt | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt index 8b381117969..4cd4c9b8205 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/BodyGenerator.kt @@ -198,8 +198,7 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context: } fun generateEnumEntryInitializer(ktEnumEntry: KtEnumEntry, enumEntryDescriptor: ClassDescriptor): IrExpression { - // Enum entry with body has a corresponding underlying class - if (ktEnumEntry.getBody() != null) { + if (ktEnumEntry.declarations.isNotEmpty()) { val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!! return IrEnumConstructorCallImpl(ktEnumEntry.startOffset, ktEnumEntry.endOffset, enumEntryConstructor, enumEntryDescriptor) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index c9817ac7e02..866f5b7ee5a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -124,7 +124,7 @@ class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator BodyGenerator(enumEntryDescriptor.containingDeclaration, context) .generateEnumEntryInitializer(ktEnumEntry, enumEntryDescriptor) - if (ktEnumEntry.getBody() != null) { + if (ktEnumEntry.declarations.isNotEmpty()) { irEnumEntry.correspondingClass = generateClass(ktEnumEntry) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDelegate.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDelegate.kt index fc261ae455e..2fb9aee1f03 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDelegate.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDelegate.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.ir.* -import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -75,6 +74,6 @@ class IrDelegateImpl( } override fun acceptChildren(visitor: IrElementVisitor, data: D) { - initializer?.accept(visitor, data) + initializer.accept(visitor, data) } } \ No newline at end of file diff --git a/compiler/testData/ir/irText/classes/enum.kt b/compiler/testData/ir/irText/classes/enum.kt index 97f26f6b250..f6ecb1702bb 100644 --- a/compiler/testData/ir/irText/classes/enum.kt +++ b/compiler/testData/ir/irText/classes/enum.kt @@ -5,7 +5,7 @@ enum class TestEnum1 { enum class TestEnum2(val x: Int) { TEST1(1), TEST2(2), - TEST3(3) + TEST3(3) {} } enum class TestEnum3 {