[FIR] move deprecations calculation on TYPES phase

can be moved to COMPILER_REQUIRED_ANNOTATIONS phase in the future

^KT-57256 Fixed
This commit is contained in:
Dmitrii Gridin
2023-03-28 17:47:50 +02:00
committed by Space Team
parent f644eb7988
commit 19dbe69651
10 changed files with 103 additions and 13 deletions
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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))
}
}
}
@@ -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))
}
}
}
@@ -68,7 +68,8 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
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<D : FirCallableDeclaration> : FirBasedSymbol<D>
else -> lazyResolveToPhase(FirResolvePhase.TYPES)
}
}
override fun toString(): String = "${this::class.simpleName} $callableId"
}
@@ -0,0 +1,14 @@
// FIR_IDENTICAL
// FILE: A.kt
enum class A {
@Deprecated("")
DeprecatedEntry,
RegularEntry
}
// FILE: use.kt
fun use() {
A.<!DEPRECATION!>DeprecatedEntry<!>
A.RegularEntry
}
@@ -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.<!DEPRECATION!>deprecatedField<!>
j.regularField
}
@@ -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 {