diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index bacb86dd97a..e73b915bf9d 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -170,7 +170,7 @@ class Fir2IrVisitor( ) } } - } else if (irParentEnumClass != null && initializer == null) { + } else if (irParentEnumClass != null && !irParentEnumClass.isExpect && initializer == null) { // a default-ish enum entry whose initializer would be a delegating constructor call // `irParentEnumClass` definitely is not a lazy class @OptIn(UnsafeDuringIrConstructionAPI::class) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt index e58b756686c..a4bb9d38cc8 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt @@ -12,10 +12,7 @@ import org.jetbrains.kotlin.* import org.jetbrains.kotlin.ElementTypeUtils.isExpression import org.jetbrains.kotlin.KtNodeTypes.* import org.jetbrains.kotlin.builtins.StandardNames -import org.jetbrains.kotlin.descriptors.ClassKind -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.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.* import org.jetbrains.kotlin.fir.* @@ -893,11 +890,10 @@ class LightTreeRawFirDeclarationBuilder( isImplicitlyActual: Boolean = false, isKotlinAny: Boolean = false, ): PrimaryConstructor? { - fun ClassKind.isEnumRelated(): Boolean = this == ClassKind.ENUM_CLASS || this == ClassKind.ENUM_ENTRY val shouldGenerateImplicitConstructor = (classWrapper.isEnumEntry() || !classWrapper.hasSecondaryConstructor) && - !classWrapper.isInterface() && - (!containingClassIsExpectClass || classWrapper.classBuilder.classKind.isEnumRelated()) + !classWrapper.isInterface() && + (!containingClassIsExpectClass || classWrapper.classBuilder.classKind == ClassKind.ENUM_ENTRY) val isErrorConstructor = primaryConstructor == null && !shouldGenerateImplicitConstructor if (isErrorConstructor && classWrapper.delegatedSuperCalls.isEmpty()) { return null diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index 880772e22bf..00c356a4512 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -1015,7 +1015,7 @@ open class PsiRawFirBuilder( // We are never here as part of enum entry val shouldGenerateImplicitPrimaryConstructor = !hasSecondaryConstructors() && - !(containingClassIsExpectClass && classKind != ClassKind.ENUM_CLASS) && + !containingClassIsExpectClass && (this !is KtClass || !this.isInterface()) val hasPrimaryConstructor = primaryConstructor != null || shouldGenerateImplicitPrimaryConstructor diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.lazyBodies.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.lazyBodies.txt index 2ed3ba2f129..cf07a4faaa1 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.lazyBodies.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.lazyBodies.txt @@ -1,8 +1,6 @@ FILE: expectNestedEnumClassGeneratedMembers.kt public? final? expect class Outer : R|kotlin/Any| { public? final? expect enum class NestedEnum : R|kotlin/Enum| { - private expect constructor(): R|Outer.NestedEnum| - public final expect static enum entry ONE: R|Outer.NestedEnum| public final expect static enum entry TWO: R|Outer.NestedEnum| public final expect static fun values(): R|kotlin/Array| { diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.txt index e5202f7149c..3eb56cd3bb4 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectNestedEnumClassGeneratedMembers.txt @@ -1,8 +1,6 @@ FILE: expectNestedEnumClassGeneratedMembers.kt public? final? expect class Outer : R|kotlin/Any| { public? final? expect enum class NestedEnum : R|kotlin/Enum| { - private expect [ContainingClassKey=NestedEnum] constructor(): R|Outer.NestedEnum| - public final expect static [ContainingClassKey=NestedEnum] enum entry ONE: R|Outer.NestedEnum| public final expect static [ContainingClassKey=NestedEnum] enum entry TWO: R|Outer.NestedEnum| public final expect static [ContainingClassKey=NestedEnum] fun values(): R|kotlin/Array| {