From 489371219fe2921f096bb30ee21314ea7e41d3dd Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Fri, 15 Sep 2023 15:51:23 +0200 Subject: [PATCH] [K2] Support reporting of EXPECTED_ENUM_CONSTRUCTOR ^KT-59980 Fixed --- .../checkers/declaration/FirExpectConsistencyChecker.kt | 8 ++++++++ .../multiplatform/enum/constructorInHeaderEnum.fir.kt | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt index 972e70fee8d..cdf890d7ff2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectConsistencyChecker.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration import org.jetbrains.kotlin.KtFakeSourceElementKind +import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn @@ -38,6 +39,9 @@ object FirExpectConsistencyChecker : FirBasicDeclarationChecker() { getConstructorDelegationCall(declaration)?.let { delegatedConstructor -> reporter.reportOn(delegatedConstructor.source, FirErrors.EXPECTED_CLASS_CONSTRUCTOR_DELEGATION_CALL, context) } + if (isProhibitedEnumConstructor(declaration, lastClass)) { + reporter.reportOn(source, FirErrors.EXPECTED_ENUM_CONSTRUCTOR, context) + } if (isProhibitedPrivateDeclaration(declaration)) { reporter.reportOn(source, FirErrors.EXPECTED_PRIVATE_DECLARATION, context) @@ -65,6 +69,10 @@ object FirExpectConsistencyChecker : FirBasicDeclarationChecker() { return declaration !is FirConstructor && declaration !is FirPropertyAccessor && Visibilities.isPrivate(declaration.visibility) } + private fun isProhibitedEnumConstructor(declaration: FirMemberDeclaration, lastClass: FirClass?): Boolean { + return declaration is FirConstructor && lastClass?.classKind == ClassKind.ENUM_CLASS + } + private fun isProhibitedDeclarationWithBody(declaration: FirMemberDeclaration): Boolean { return declaration is FirFunction && declaration.hasBody } diff --git a/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt index eb1f983ccca..2899a73f525 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/enum/constructorInHeaderEnum.fir.kt @@ -1,12 +1,12 @@ // MODULE: m1-common // FILE: common.kt -expect enum class En(x: Int) { +expect enum class En(x: Int) { E1, E2(42), ; - constructor(s: String) + constructor(s: String) } expect enum class En2 {