[FIR] Expect classes can never have in implicit constructor. enums included

Motivation: If I don't fix it then I will get a false positive
ACTUAL_MISSING in
DiagnosticCompilerTestFE10TestdataTestGenerated.Tests.Multiplatform.Enum.testSimpleEnum
after I fix KT-59887

The commit also fixes false positive diagnostic in
annotationArgTypeAliasWithArray.fir.kt test

Review: https://jetbrains.team/p/kt/reviews/13244
This commit is contained in:
Nikita Bobko
2023-11-24 17:42:54 +01:00
committed by Space Team
parent 04dec2769b
commit ac3d8ad3ac
5 changed files with 5 additions and 13 deletions
@@ -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