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 8f90d1d8683..edcc59922c5 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 @@ -8892,6 +8892,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedPropertyInheritance_before.kt"); } + @Test + @TestMetadata("duplicatedOverrideDeprecationOnProperty.kt") + public void testDuplicatedOverrideDeprecationOnProperty() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt"); + } + @Test @TestMetadata("functionUsage.kt") public void testFunctionUsage() 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 0eabb54558c..deaefcd4e49 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 @@ -8892,6 +8892,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedPropertyInheritance_before.kt"); } + @Test + @TestMetadata("duplicatedOverrideDeprecationOnProperty.kt") + public void testDuplicatedOverrideDeprecationOnProperty() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt"); + } + @Test @TestMetadata("functionUsage.kt") public void testFunctionUsage() 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 315ad7a7a48..20592ff1174 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 @@ -8892,6 +8892,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedPropertyInheritance_before.kt"); } + @Test + @TestMetadata("duplicatedOverrideDeprecationOnProperty.kt") + public void testDuplicatedOverrideDeprecationOnProperty() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt"); + } + @Test @TestMetadata("functionUsage.kt") public void testFunctionUsage() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecationInheritanceChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecationInheritanceChecker.kt index c5ed436e0f5..eb8e69f4b61 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecationInheritanceChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/DeprecationInheritanceChecker.kt @@ -7,13 +7,18 @@ package org.jetbrains.kotlin.resolve.checkers import org.jetbrains.kotlin.config.LanguageFeature.StopPropagatingDeprecationThroughOverrides import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration +import org.jetbrains.kotlin.psi.KtProperty object DeprecationInheritanceChecker : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { if (declaration !is KtNamedDeclaration) return + if (declaration is KtProperty && descriptor is PropertyAccessorDescriptor && descriptor.isDefault) { + return + } val deprecationResolver = context.deprecationResolver if (!deprecationResolver.areDeprecationsInheritedFromOverriden(descriptor)) return val (deprecations, message) = if (context.languageVersionSettings.supportsFeature(StopPropagatingDeprecationThroughOverrides)) { diff --git a/compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt b/compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt new file mode 100644 index 00000000000..242093efcb5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt @@ -0,0 +1,45 @@ +// FIR_IDENTICAL +// ISSUE: KT-51893 + +interface A { + @Deprecated("") + val a: String + + @Deprecated("") + val b: String + + @Deprecated("") + var c: String + + @Deprecated("") + var d: String + + @Deprecated("") + var e: String + + @Deprecated("") + var h: String +} + +object B : A { + override val a: String = "" + + override val b: String + get() = "" + + override var c: String = "" + + override var d: String = "" + get() = field + + override var e: String = "" + set(value) { + field = value + } + + override var h: String = "" + get() = field + set(value) { + field = value + } +} diff --git a/compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.txt b/compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.txt new file mode 100644 index 00000000000..1b9774bd0f1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.txt @@ -0,0 +1,26 @@ +package + +public interface A { + @kotlin.Deprecated(message = "") public abstract val a: kotlin.String + @kotlin.Deprecated(message = "") public abstract val b: kotlin.String + @kotlin.Deprecated(message = "") public abstract var c: kotlin.String + @kotlin.Deprecated(message = "") public abstract var d: kotlin.String + @kotlin.Deprecated(message = "") public abstract var e: kotlin.String + @kotlin.Deprecated(message = "") public abstract var h: kotlin.String + 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 +} + +public object B : A { + private constructor B() + public open override /*1*/ val a: kotlin.String = "" + public open override /*1*/ val b: kotlin.String + public open override /*1*/ var c: kotlin.String + public open override /*1*/ var d: kotlin.String + public open override /*1*/ var e: kotlin.String + public open override /*1*/ var h: kotlin.String + 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 +} 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 cef6872c6c2..7b31d61a296 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 @@ -8898,6 +8898,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedPropertyInheritance_before.kt"); } + @Test + @TestMetadata("duplicatedOverrideDeprecationOnProperty.kt") + public void testDuplicatedOverrideDeprecationOnProperty() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/duplicatedOverrideDeprecationOnProperty.kt"); + } + @Test @TestMetadata("functionUsage.kt") public void testFunctionUsage() throws Exception {