From 8bd0b237b75894ebb869ec3c9aac25377715836b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 21 Oct 2021 12:40:55 +0300 Subject: [PATCH] Convert EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR into deprecation error #KT-28078 Fixed --- .../diagnostics/KtFirDataClassConverters.kt | 13 ++++++-- .../api/fir/diagnostics/KtFirDiagnostics.kt | 11 +++++-- .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 12 ++++++-- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 ++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++ .../diagnostics/FirDiagnosticsList.kt | 11 ++++++- .../fir/analysis/diagnostics/FirErrors.kt | 3 +- .../FirExposedVisibilityDeclarationChecker.kt | 28 ++++++++++------- .../jetbrains/kotlin/diagnostics/Errors.java | 2 +- .../resolve/ExposedVisibilityChecker.kt | 21 +++++++++++-- .../propertyInPrivateConstructor.fir.kt | 3 -- .../exposed/propertyInPrivateConstructor.kt | 5 +++- .../propertyInPrivateConstructorError.kt | 6 ++++ .../propertyInPrivateConstructorError.txt | 30 +++++++++++++++++++ .../propertyInSimpleConstructor.fir.kt | 2 +- .../diagnostics/tests/exposed/simple.fir.kt | 2 +- .../sealed/privateTypeInConstructor.fir.kt | 4 +-- .../tests/sealed/privateTypeInConstructor.kt | 2 +- .../test/runners/DiagnosticTestGenerated.java | 6 ++++ .../kotlin/config/LanguageVersionSettings.kt | 1 + .../kotlin/gradle/plugin/KotlinPlugin.kt | 2 +- 22 files changed, 150 insertions(+), 32 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.fir.kt create mode 100644 compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt create mode 100644 compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.txt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index 697d9fe6d1f..a9a9d249335 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -1045,8 +1045,17 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } - add(FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR) { firDiagnostic -> - ExposedPropertyTypeInConstructorImpl( + add(FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR.errorFactory) { firDiagnostic -> + ExposedPropertyTypeInConstructorErrorImpl( + firDiagnostic.a, + firSymbolBuilder.buildSymbol(firDiagnostic.b.fir), + firDiagnostic.c, + firDiagnostic as FirPsiDiagnostic, + token, + ) + } + add(FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR.warningFactory) { firDiagnostic -> + ExposedPropertyTypeInConstructorWarningImpl( firDiagnostic.a, firSymbolBuilder.buildSymbol(firDiagnostic.b.fir), firDiagnostic.c, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 8628c69c507..fa1f3bc5fef 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -754,8 +754,15 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val restrictingVisibility: EffectiveVisibility } - abstract class ExposedPropertyTypeInConstructor : KtFirDiagnostic() { - override val diagnosticClass get() = ExposedPropertyTypeInConstructor::class + abstract class ExposedPropertyTypeInConstructorError : KtFirDiagnostic() { + override val diagnosticClass get() = ExposedPropertyTypeInConstructorError::class + abstract val elementVisibility: EffectiveVisibility + abstract val restrictingDeclaration: KtSymbol + abstract val restrictingVisibility: EffectiveVisibility + } + + abstract class ExposedPropertyTypeInConstructorWarning : KtFirDiagnostic() { + override val diagnosticClass get() = ExposedPropertyTypeInConstructorWarning::class abstract val elementVisibility: EffectiveVisibility abstract val restrictingDeclaration: KtSymbol abstract val restrictingVisibility: EffectiveVisibility diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 14256f5a4da..62307f91589 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -903,13 +903,21 @@ internal class ExposedPropertyTypeImpl( override val token: ValidityToken, ) : KtFirDiagnostic.ExposedPropertyType(), KtAbstractFirDiagnostic -internal class ExposedPropertyTypeInConstructorImpl( +internal class ExposedPropertyTypeInConstructorErrorImpl( override val elementVisibility: EffectiveVisibility, override val restrictingDeclaration: KtSymbol, override val restrictingVisibility: EffectiveVisibility, override val firDiagnostic: FirPsiDiagnostic, override val token: ValidityToken, -) : KtFirDiagnostic.ExposedPropertyTypeInConstructor(), KtAbstractFirDiagnostic +) : KtFirDiagnostic.ExposedPropertyTypeInConstructorError(), KtAbstractFirDiagnostic + +internal class ExposedPropertyTypeInConstructorWarningImpl( + override val elementVisibility: EffectiveVisibility, + override val restrictingDeclaration: KtSymbol, + override val restrictingVisibility: EffectiveVisibility, + override val firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.ExposedPropertyTypeInConstructorWarning(), KtAbstractFirDiagnostic internal class ExposedParameterTypeImpl( override val elementVisibility: EffectiveVisibility, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index bc5d894f322..60ac5ecb7f9 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -10377,6 +10377,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt"); } + @Test + @TestMetadata("propertyInPrivateConstructorError.kt") + public void testPropertyInPrivateConstructorError() throws Exception { + runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt"); + } + @Test @TestMetadata("propertyInSimpleConstructor.kt") public void testPropertyInSimpleConstructor() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index db3a7df97e5..ff94d8b2f5c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -10377,6 +10377,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt"); } + @Test + @TestMetadata("propertyInPrivateConstructorError.kt") + public void testPropertyInPrivateConstructorError() throws Exception { + runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt"); + } + @Test @TestMetadata("propertyInSimpleConstructor.kt") public void testPropertyInSimpleConstructor() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index d2fdcd5319d..69b4ac91895 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -10377,6 +10377,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt"); } + @Test + @TestMetadata("propertyInPrivateConstructorError.kt") + public void testPropertyInPrivateConstructorError() throws Exception { + runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt"); + } + @Test @TestMetadata("propertyInSimpleConstructor.kt") public void testPropertyInSimpleConstructor() throws Exception { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 274b33135df..eaa9b570b9d 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -326,7 +326,9 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val EXPOSED_FUNCTION_RETURN_TYPE by exposedVisibilityError(PositioningStrategy.DECLARATION_NAME) val EXPOSED_RECEIVER_TYPE by exposedVisibilityError() val EXPOSED_PROPERTY_TYPE by exposedVisibilityError(PositioningStrategy.DECLARATION_NAME) - val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by exposedVisibilityWarning(PositioningStrategy.DECLARATION_NAME) + val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by exposedVisibilityDeprecationError( + LanguageFeature.ForbidExposingTypesInPrimaryConstructorProperties, PositioningStrategy.DECLARATION_NAME + ) val EXPOSED_PARAMETER_TYPE by exposedVisibilityError(/* // NB: for parameter FE 1.0 reports not on a name for some reason */) val EXPOSED_SUPER_INTERFACE by exposedVisibilityError() val EXPOSED_SUPER_CLASS by exposedVisibilityError() @@ -1378,4 +1380,11 @@ private inline fun AbstractDiagnosticGroup.exposedVisib return warning

(positioningStrategy, exposedVisibilityDiagnosticInit) } +private inline fun AbstractDiagnosticGroup.exposedVisibilityDeprecationError( + languageFeature: LanguageFeature, + positioningStrategy: PositioningStrategy = PositioningStrategy.DEFAULT +): PropertyDelegateProvider> { + return deprecationError

(languageFeature, positioningStrategy, exposedVisibilityDiagnosticInit) +} + typealias Symbol = FirBasedSymbol<*> diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index d4effb06644..39af291e7dd 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics import com.intellij.psi.PsiElement import com.intellij.psi.impl.source.tree.LeafPsiElement import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.config.LanguageFeature.ForbidExposingTypesInPrimaryConstructorProperties import org.jetbrains.kotlin.config.LanguageFeature.ProhibitAssigningSingleElementsToVarargsInNamedForm import org.jetbrains.kotlin.config.LanguageFeature.ProhibitConfusingSyntaxInWhenBranches import org.jetbrains.kotlin.config.LanguageFeature.ProhibitInvisibleAbstractMethodsInSuperclasses @@ -266,7 +267,7 @@ object FirErrors { val EXPOSED_FUNCTION_RETURN_TYPE by error3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) val EXPOSED_RECEIVER_TYPE by error3, EffectiveVisibility>() val EXPOSED_PROPERTY_TYPE by error3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) - val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by warning3, EffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) + val EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR by deprecationError3, EffectiveVisibility>(ForbidExposingTypesInPrimaryConstructorProperties, SourceElementPositioningStrategies.DECLARATION_NAME) val EXPOSED_PARAMETER_TYPE by error3, EffectiveVisibility>() val EXPOSED_SUPER_INTERFACE by error3, EffectiveVisibility>() val EXPOSED_SUPER_CLASS by error3, EffectiveVisibility>() 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 18878e8c47c..8dde1f46077 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 @@ -145,19 +145,25 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() { if (propertyVisibility == EffectiveVisibility.Local) return declaration.returnTypeRef.coneTypeSafe() ?.findVisibilityExposure(context, propertyVisibility)?.let { (restricting, restrictingVisibility) -> - val diagnostic = if (declaration.fromPrimaryConstructor == true) { - FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR + if (declaration.fromPrimaryConstructor == true) { + reporter.reportOn( + declaration.source, + FirErrors.EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR, + propertyVisibility, + restricting, + restrictingVisibility, + context + ) } else { - FirErrors.EXPOSED_PROPERTY_TYPE + reporter.reportOn( + declaration.source, + FirErrors.EXPOSED_PROPERTY_TYPE, + propertyVisibility, + restricting, + restrictingVisibility, + context + ) } - reporter.reportOn( - declaration.source, - diagnostic, - propertyVisibility, - restricting, - restrictingVisibility, - context - ) } checkMemberReceiver(declaration.receiverTypeRef, declaration, reporter, context) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index a51ba67d973..f829fee2cf3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -141,7 +141,7 @@ public interface Errors { // Exposed visibility group DiagnosticFactory3 EXPOSED_PROPERTY_TYPE = DiagnosticFactory3.create(ERROR); - DiagnosticFactory3 EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR = DiagnosticFactory3.create(WARNING); + DiagnosticFactoryForDeprecation3 EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR = DiagnosticFactoryForDeprecation3.create(LanguageFeature.ForbidExposingTypesInPrimaryConstructorProperties); DiagnosticFactory3 EXPOSED_FUNCTION_RETURN_TYPE = DiagnosticFactory3.create(ERROR); DiagnosticFactory3 EXPOSED_PARAMETER_TYPE = DiagnosticFactory3.create(ERROR); DiagnosticFactory3 EXPOSED_RECEIVER_TYPE = DiagnosticFactory3.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ExposedVisibilityChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ExposedVisibilityChecker.kt index 373c34e1355..708b72af373 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ExposedVisibilityChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ExposedVisibilityChecker.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticFactory3 +import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryForDeprecation3 import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier @@ -52,6 +53,17 @@ class ExposedVisibilityChecker( } } + private fun reportExposureForDeprecation( + diagnostic: DiagnosticFactoryForDeprecation3, + element: E, + elementVisibility: EffectiveVisibility, + restrictingDescriptor: DescriptorWithRelation + ) { + val trace = trace ?: return + val restrictingVisibility = restrictingDescriptor.effectiveVisibility() + trace.report(diagnostic.on(languageVersionSettings, element, elementVisibility, restrictingDescriptor, restrictingVisibility)) + } + // NB: does not check any members fun checkClassHeader(klass: KtClassOrObject, classDescriptor: ClassDescriptor): Boolean { var result = checkSupertypes(klass, classDescriptor) @@ -62,6 +74,8 @@ class ExposedVisibilityChecker( return result and checkFunction(constructor, constructorDescriptor) } + // IMPORTANT: please don't remove this function (it's used in IDE) + @Suppress("unused") fun checkDeclarationWithVisibility( modifierListOwner: KtModifierListOwner, descriptor: DeclarationDescriptorWithVisibility, @@ -119,8 +133,11 @@ class ExposedVisibilityChecker( val propertyOrClassVisibility = (propertyDescriptor ?: functionDescriptor.constructedClass).effectiveVisibility() val restrictingByProperty = parameterDescriptor.type.leastPermissiveDescriptor(propertyOrClassVisibility) if (restrictingByProperty != null) { - reportExposure( - EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR, valueParameter, propertyOrClassVisibility, restrictingByProperty + reportExposureForDeprecation( + EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR, + valueParameter.nameIdentifier ?: valueParameter, + propertyOrClassVisibility, + restrictingByProperty ) result = false } diff --git a/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.fir.kt b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.fir.kt deleted file mode 100644 index e92aa5799ba..00000000000 --- a/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.fir.kt +++ /dev/null @@ -1,3 +0,0 @@ -private enum class Foo { A, B } - -class Bar private constructor(val foo: Foo) diff --git a/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt index 277913e8b57..ada8ce03462 100644 --- a/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt +++ b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt @@ -1,3 +1,6 @@ +// FIR_IDENTICAL +// !LANGUAGE: -ForbidExposingTypesInPrimaryConstructorProperties + private enum class Foo { A, B } -class Bar private constructor(val foo: Foo) \ No newline at end of file +class Bar private constructor(val foo: Foo) diff --git a/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt new file mode 100644 index 00000000000..fed4c16243f --- /dev/null +++ b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt @@ -0,0 +1,6 @@ +// FIR_IDENTICAL +// !LANGUAGE: +ForbidExposingTypesInPrimaryConstructorProperties + +private enum class Foo { A, B } + +class Bar private constructor(val foo: Foo) diff --git a/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.txt b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.txt new file mode 100644 index 00000000000..cbe4134d1e5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.txt @@ -0,0 +1,30 @@ +package + +public final class Bar { + private constructor Bar(/*0*/ foo: Foo) + public final val foo: Foo + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +private final enum class Foo : kotlin.Enum { + enum entry A + + enum entry B + + private constructor Foo() + public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Foo): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class! + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Foo + public final /*synthesized*/ fun values(): kotlin.Array +} diff --git a/compiler/testData/diagnostics/tests/exposed/propertyInSimpleConstructor.fir.kt b/compiler/testData/diagnostics/tests/exposed/propertyInSimpleConstructor.fir.kt index 334d70c3a02..e6c862d2bdb 100644 --- a/compiler/testData/diagnostics/tests/exposed/propertyInSimpleConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/exposed/propertyInSimpleConstructor.fir.kt @@ -1,3 +1,3 @@ private enum class Foo { A, B } -class Bar(val foo: Foo) +class Bar(val foo: Foo) diff --git a/compiler/testData/diagnostics/tests/exposed/simple.fir.kt b/compiler/testData/diagnostics/tests/exposed/simple.fir.kt index 5519e569f24..05d808a89da 100644 --- a/compiler/testData/diagnostics/tests/exposed/simple.fir.kt +++ b/compiler/testData/diagnostics/tests/exposed/simple.fir.kt @@ -6,7 +6,7 @@ public interface Your: My { fun foo(): T } -public class DerivedMy>(val x: My): Base() { +public class DerivedMy>(val x: My): Base() { constructor(xx: My?, x: My): this(xx ?: x) diff --git a/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt b/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt index f8cebb13a70..1394e1479f2 100644 --- a/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.fir.kt @@ -4,13 +4,13 @@ private class Bar sealed class SealedFoo( - val x: Bar, + val x: Bar, private val y: Bar, z: Bar ) abstract class AbstractFoo( - val x: Bar, + val x: Bar, private val y: Bar, z: Bar ) diff --git a/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.kt b/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.kt index 05d13d85b64..b102561ddd4 100644 --- a/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.kt +++ b/compiler/testData/diagnostics/tests/sealed/privateTypeInConstructor.kt @@ -4,7 +4,7 @@ private class Bar sealed class SealedFoo( - val x: Bar, + val x: Bar, private val y: Bar, z: Bar ) diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 10604741bba..282b2c0dd80 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -10383,6 +10383,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructor.kt"); } + @Test + @TestMetadata("propertyInPrivateConstructorError.kt") + public void testPropertyInPrivateConstructorError() throws Exception { + runTest("compiler/testData/diagnostics/tests/exposed/propertyInPrivateConstructorError.kt"); + } + @Test @TestMetadata("propertyInSimpleConstructor.kt") public void testPropertyInSimpleConstructor() throws Exception { diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 24e6f294fb8..38d549b441d 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -236,6 +236,7 @@ enum class LanguageFeature( IgnoreNullabilityForErasedValueParameters(KOTLIN_1_7, kind = BUG_FIX), ProperTypeInferenceConstraintsProcessing(KOTLIN_1_7, kind = BUG_FIX), ProhibitNonExhaustiveIfInRhsOfElvis(KOTLIN_1_7, kind = BUG_FIX), // KT-44705 + ForbidExposingTypesInPrimaryConstructorProperties(KOTLIN_1_7, kind = BUG_FIX), // 1.8 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index f5c947904e1..03f9909815a 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -790,7 +790,7 @@ internal open class KotlinAndroidPlugin( } class KotlinConfigurationTools internal constructor( - @Suppress("EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR") + @Suppress("EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_WARNING", "EXPOSED_PROPERTY_TYPE_IN_CONSTRUCTOR_ERROR") val kotlinTasksProvider: KotlinTasksProvider )