From 19dbe69651d8c63a55b643afe0cc2335e74962a0 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 28 Mar 2023 17:47:50 +0200 Subject: [PATCH] [FIR] move deprecations calculation on TYPES phase can be moved to COMPILER_REQUIRED_ANNOTATIONS phase in the future ^KT-57256 Fixed --- ...osticCompilerTestFE10TestdataTestGenerated.java | 12 ++++++++++++ ...iagnosticCompilerFE10TestDataTestGenerated.java | 12 ++++++++++++ ...ghtTreeOldFrontendDiagnosticsTestGenerated.java | 12 ++++++++++++ .../FirPsiOldFrontendDiagnosticsTestGenerated.java | 12 ++++++++++++ .../transformers/FirStatusResolveTransformer.kt | 12 ------------ .../transformers/FirTypeResolveTransformer.kt | 12 ++++++++++++ .../kotlin/fir/symbols/impl/FirCallableSymbol.kt | 4 +++- .../tests/deprecated/deprecatedEnumEntry.kt | 14 ++++++++++++++ .../tests/deprecated/deprecatedField.kt | 14 ++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 12 ++++++++++++ 10 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt create mode 100644 compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 02883b549ca..afd85c6f00c 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -9350,6 +9350,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); } + @Test + @TestMetadata("deprecatedEnumEntry.kt") + public void testDeprecatedEnumEntry() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt"); + } + @Test @TestMetadata("deprecatedError.kt") public void testDeprecatedError() throws Exception { @@ -9362,6 +9368,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); } + @Test + @TestMetadata("deprecatedField.kt") + public void testDeprecatedField() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt"); + } + @Test @TestMetadata("deprecatedHidden.kt") public void testDeprecatedHidden() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 13573d61689..2d53c749620 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -9350,6 +9350,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); } + @Test + @TestMetadata("deprecatedEnumEntry.kt") + public void testDeprecatedEnumEntry() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt"); + } + @Test @TestMetadata("deprecatedError.kt") public void testDeprecatedError() throws Exception { @@ -9362,6 +9368,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); } + @Test + @TestMetadata("deprecatedField.kt") + public void testDeprecatedField() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt"); + } + @Test @TestMetadata("deprecatedHidden.kt") public void testDeprecatedHidden() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 7b4d32bce4a..d989a995887 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -9350,6 +9350,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); } + @Test + @TestMetadata("deprecatedEnumEntry.kt") + public void testDeprecatedEnumEntry() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt"); + } + @Test @TestMetadata("deprecatedError.kt") public void testDeprecatedError() throws Exception { @@ -9362,6 +9368,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); } + @Test + @TestMetadata("deprecatedField.kt") + public void testDeprecatedField() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt"); + } + @Test @TestMetadata("deprecatedHidden.kt") public void testDeprecatedHidden() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index efd328b8d24..d1354f5c8c6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -9356,6 +9356,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); } + @Test + @TestMetadata("deprecatedEnumEntry.kt") + public void testDeprecatedEnumEntry() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt"); + } + @Test @TestMetadata("deprecatedError.kt") public void testDeprecatedError() throws Exception { @@ -9368,6 +9374,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); } + @Test + @TestMetadata("deprecatedField.kt") + public void testDeprecatedField() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt"); + } + @Test @TestMetadata("deprecatedHidden.kt") public void testDeprecatedHidden() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt index b38c305fe2b..ae74e2bca21 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirStatusResolveTransformer.kt @@ -387,7 +387,6 @@ abstract class AbstractFirStatusResolveTransformer( data: FirResolvedDeclarationStatus? ): FirStatement = whileAnalysing(session, constructor) { constructor.transformStatus(this, statusResolver.resolveStatus(constructor, containingClass, isLocal = false)) - calculateDeprecations(constructor) return transformDeclaration(constructor, data) as FirStatement } @@ -397,7 +396,6 @@ abstract class AbstractFirStatusResolveTransformer( ): FirStatement = whileAnalysing(session, simpleFunction) { val resolvedStatus = statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false) simpleFunction.transformStatus(this, resolvedStatus) - calculateDeprecations(simpleFunction) return transformDeclaration(simpleFunction, data) as FirStatement } @@ -429,7 +427,6 @@ abstract class AbstractFirStatusResolveTransformer( ) } - calculateDeprecations(property) return property } @@ -438,7 +435,6 @@ abstract class AbstractFirStatusResolveTransformer( data: FirResolvedDeclarationStatus? ): FirStatement = whileAnalysing(session, field) { field.transformStatus(this, statusResolver.resolveStatus(field, containingClass, isLocal = false)) - calculateDeprecations(field) return transformDeclaration(field, data) as FirField } @@ -451,7 +447,6 @@ abstract class AbstractFirStatusResolveTransformer( data: FirResolvedDeclarationStatus? ): FirStatement = whileAnalysing(session, enumEntry) { enumEntry.transformStatus(this, statusResolver.resolveStatus(enumEntry, containingClass, isLocal = false)) - calculateDeprecations(enumEntry) return transformDeclaration(enumEntry, data) as FirEnumEntry } @@ -459,7 +454,6 @@ abstract class AbstractFirStatusResolveTransformer( valueParameter: FirValueParameter, data: FirResolvedDeclarationStatus? ): FirStatement { - calculateDeprecations(valueParameter) return transformDeclaration(valueParameter, data) as FirStatement } @@ -473,10 +467,4 @@ abstract class AbstractFirStatusResolveTransformer( override fun transformBlock(block: FirBlock, data: FirResolvedDeclarationStatus?): FirStatement { return block } - - private fun calculateDeprecations(simpleFunction: FirCallableDeclaration) { - if (simpleFunction.deprecationsProvider is UnresolvedDeprecationProvider) { - simpleFunction.replaceDeprecationsProvider(simpleFunction.getDeprecationsProvider(session)) - } - } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index c80ea7f07a7..0f58f595892 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -133,6 +133,7 @@ open class FirTypeResolveTransformer( } } + calculateDeprecations(result) result } } @@ -148,6 +149,7 @@ open class FirTypeResolveTransformer( enumEntry.transformReturnTypeRef(this, data) enumEntry.transformTypeParameters(this, data) enumEntry.transformAnnotations(this, data) + calculateDeprecations(enumEntry) enumEntry } @@ -192,6 +194,7 @@ open class FirTypeResolveTransformer( property.removeDuplicateAnnotationsOfPrimaryConstructorElement() } + calculateDeprecations(property) property } } @@ -205,6 +208,7 @@ open class FirTypeResolveTransformer( override fun transformField(field: FirField, data: Any?): FirField = whileAnalysing(session, field) { withScopeCleanup { field.transformReturnTypeRef(this, data).transformAnnotations(this, data) + calculateDeprecations(field) field } } @@ -218,6 +222,7 @@ open class FirTypeResolveTransformer( simpleFunction.addTypeParametersScope() transformDeclaration(simpleFunction, data).also { unboundCyclesInTypeParametersSupertypes(it as FirTypeParametersOwner) + calculateDeprecations(simpleFunction) } } } as FirSimpleFunction @@ -282,6 +287,7 @@ open class FirTypeResolveTransformer( valueParameter.transformReturnTypeRef(this, data) valueParameter.transformAnnotations(this, data) valueParameter.transformVarargTypeToArrayType() + calculateDeprecations(valueParameter) valueParameter } } @@ -457,4 +463,10 @@ open class FirTypeResolveTransformer( AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER in it.useSiteTargetsFromMetaAnnotation(session) == isParameter }) } + + private fun calculateDeprecations(callableDeclaration: FirCallableDeclaration) { + if (callableDeclaration.deprecationsProvider is UnresolvedDeprecationProvider) { + callableDeclaration.replaceDeprecationsProvider(callableDeclaration.getDeprecationsProvider(session)) + } + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt index ac120c42144..0a43ea6463a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirCallableSymbol.kt @@ -68,7 +68,8 @@ abstract class FirCallableSymbol : FirBasedSymbol fun getDeprecation(apiVersion: ApiVersion): DeprecationsPerUseSite? { if (!canBeDeprecated()) return null - lazyResolveToPhase(FirResolvePhase.STATUS) + + lazyResolveToPhase(FirResolvePhase.TYPES) return fir.deprecationsProvider.getDeprecationsInfo(apiVersion) } @@ -85,6 +86,7 @@ abstract class FirCallableSymbol : FirBasedSymbol else -> lazyResolveToPhase(FirResolvePhase.TYPES) } } + override fun toString(): String = "${this::class.simpleName} $callableId" } diff --git a/compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt b/compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt new file mode 100644 index 00000000000..69473926dd6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt @@ -0,0 +1,14 @@ +// FIR_IDENTICAL + +// FILE: A.kt +enum class A { + @Deprecated("") + DeprecatedEntry, + RegularEntry +} + +// FILE: use.kt +fun use() { + A.DeprecatedEntry + A.RegularEntry +} diff --git a/compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt b/compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt new file mode 100644 index 00000000000..a4ee243299e --- /dev/null +++ b/compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt @@ -0,0 +1,14 @@ +// FIR_IDENTICAL + +// FILE: JavaClass.java +public class JavaClass { + @Deprecated + public int deprecatedField = 4; + public int regularField = 5; +} + +// FILE: use.kt +fun use(j: JavaClass) { + j.deprecatedField + j.regularField +} 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 d554da2c321..70a3c5c4953 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 @@ -9356,6 +9356,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); } + @Test + @TestMetadata("deprecatedEnumEntry.kt") + public void testDeprecatedEnumEntry() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedEnumEntry.kt"); + } + @Test @TestMetadata("deprecatedError.kt") public void testDeprecatedError() throws Exception { @@ -9368,6 +9374,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); } + @Test + @TestMetadata("deprecatedField.kt") + public void testDeprecatedField() throws Exception { + runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedField.kt"); + } + @Test @TestMetadata("deprecatedHidden.kt") public void testDeprecatedHidden() throws Exception {