From 19285d05692ca64abd3cc7c608e50342d589a765 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Wed, 9 Feb 2022 16:27:23 +0300 Subject: [PATCH] [FIR] Fix false positive EXPOSED_PARAMETER_TYPE on internal val in constructor of sealed class ^KT-51200 Fixed --- .../FirExposedVisibilityDeclarationChecker.kt | 10 ++++++---- .../tests/sealed/internalTypeInConstructor.fir.kt | 9 --------- .../tests/sealed/internalTypeInConstructor.kt | 1 + .../tests/sealed/privateTypeInConstructor.fir.kt | 6 +++--- 4 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.fir.kt diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt index 8770705b413..4c96fc7bbee 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt @@ -13,9 +13,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.declarations.utils.effectiveVisibility -import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType -import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor +import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol @@ -103,7 +101,11 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() { } private fun checkFunction(declaration: FirFunction, reporter: DiagnosticReporter, context: CheckerContext) { - val functionVisibility = (declaration as FirMemberDeclaration).effectiveVisibility + var functionVisibility = (declaration as FirMemberDeclaration).effectiveVisibility + + if (declaration is FirConstructor && declaration.isFromSealedClass) { + functionVisibility = EffectiveVisibility.PrivateInClass + } if (functionVisibility == EffectiveVisibility.Local) return if (declaration !is FirConstructor && declaration !is FirPropertyAccessor) { diff --git a/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.fir.kt b/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.fir.kt deleted file mode 100644 index f7ad3c9a727..00000000000 --- a/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.fir.kt +++ /dev/null @@ -1,9 +0,0 @@ -// ISSUE: KT-45033 -// DIAGNOSTICS: -UNUSED_PARAMETER - -internal class Bar - -sealed class Foo( - internal val x: Bar, - y: Bar -) diff --git a/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.kt b/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.kt index b5872a1cbc6..f178722aca5 100644 --- a/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.kt +++ b/compiler/testData/diagnostics/tests/sealed/internalTypeInConstructor.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-45033 // DIAGNOSTICS: -UNUSED_PARAMETER diff --git a/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt b/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt index 1394e1479f2..008001164cc 100644 --- a/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt @@ -4,9 +4,9 @@ private class Bar sealed class SealedFoo( - val x: Bar, - private val y: Bar, - z: Bar + val x: Bar, + private val y: Bar, + z: Bar ) abstract class AbstractFoo(