[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:
@@ -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)
|
||||
|
||||
+3
-7
@@ -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
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
-2
@@ -1,8 +1,6 @@
|
||||
FILE: expectNestedEnumClassGeneratedMembers.kt
|
||||
public? final? expect class Outer : R|kotlin/Any| {
|
||||
public? final? expect enum class NestedEnum : R|kotlin/Enum<Outer.NestedEnum>| {
|
||||
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<Outer.NestedEnum>| {
|
||||
|
||||
-2
@@ -1,8 +1,6 @@
|
||||
FILE: expectNestedEnumClassGeneratedMembers.kt
|
||||
public? final? expect class Outer : R|kotlin/Any| {
|
||||
public? final? expect enum class NestedEnum : R|kotlin/Enum<Outer.NestedEnum>| {
|
||||
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<Outer.NestedEnum>| {
|
||||
|
||||
Reference in New Issue
Block a user