[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"); 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 @Test
@TestMetadata("deprecatedError.kt") @TestMetadata("deprecatedError.kt")
public void testDeprecatedError() throws Exception { public void testDeprecatedError() throws Exception {
@@ -9362,6 +9368,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); 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 @Test
@TestMetadata("deprecatedHidden.kt") @TestMetadata("deprecatedHidden.kt")
public void testDeprecatedHidden() throws Exception { public void testDeprecatedHidden() throws Exception {
@@ -9350,6 +9350,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); 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 @Test
@TestMetadata("deprecatedError.kt") @TestMetadata("deprecatedError.kt")
public void testDeprecatedError() throws Exception { public void testDeprecatedError() throws Exception {
@@ -9362,6 +9368,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); 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 @Test
@TestMetadata("deprecatedHidden.kt") @TestMetadata("deprecatedHidden.kt")
public void testDeprecatedHidden() throws Exception { public void testDeprecatedHidden() throws Exception {
@@ -9350,6 +9350,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); 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 @Test
@TestMetadata("deprecatedError.kt") @TestMetadata("deprecatedError.kt")
public void testDeprecatedError() throws Exception { public void testDeprecatedError() throws Exception {
@@ -9362,6 +9368,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); 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 @Test
@TestMetadata("deprecatedHidden.kt") @TestMetadata("deprecatedHidden.kt")
public void testDeprecatedHidden() throws Exception { public void testDeprecatedHidden() throws Exception {
@@ -9356,6 +9356,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedConstructor.kt"); 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 @Test
@TestMetadata("deprecatedError.kt") @TestMetadata("deprecatedError.kt")
public void testDeprecatedError() throws Exception { public void testDeprecatedError() throws Exception {
@@ -9368,6 +9374,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); 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 @Test
@TestMetadata("deprecatedHidden.kt") @TestMetadata("deprecatedHidden.kt")
public void testDeprecatedHidden() throws Exception { public void testDeprecatedHidden() throws Exception {
@@ -387,7 +387,6 @@ abstract class AbstractFirStatusResolveTransformer(
data: FirResolvedDeclarationStatus? data: FirResolvedDeclarationStatus?
): FirStatement = whileAnalysing(session, constructor) { ): FirStatement = whileAnalysing(session, constructor) {
constructor.transformStatus(this, statusResolver.resolveStatus(constructor, containingClass, isLocal = false)) constructor.transformStatus(this, statusResolver.resolveStatus(constructor, containingClass, isLocal = false))
calculateDeprecations(constructor)
return transformDeclaration(constructor, data) as FirStatement return transformDeclaration(constructor, data) as FirStatement
} }
@@ -397,7 +396,6 @@ abstract class AbstractFirStatusResolveTransformer(
): FirStatement = whileAnalysing(session, simpleFunction) { ): FirStatement = whileAnalysing(session, simpleFunction) {
val resolvedStatus = statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false) val resolvedStatus = statusResolver.resolveStatus(simpleFunction, containingClass, isLocal = false)
simpleFunction.transformStatus(this, resolvedStatus) simpleFunction.transformStatus(this, resolvedStatus)
calculateDeprecations(simpleFunction)
return transformDeclaration(simpleFunction, data) as FirStatement return transformDeclaration(simpleFunction, data) as FirStatement
} }
@@ -429,7 +427,6 @@ abstract class AbstractFirStatusResolveTransformer(
) )
} }
calculateDeprecations(property)
return property return property
} }
@@ -438,7 +435,6 @@ abstract class AbstractFirStatusResolveTransformer(
data: FirResolvedDeclarationStatus? data: FirResolvedDeclarationStatus?
): FirStatement = whileAnalysing(session, field) { ): FirStatement = whileAnalysing(session, field) {
field.transformStatus(this, statusResolver.resolveStatus(field, containingClass, isLocal = false)) field.transformStatus(this, statusResolver.resolveStatus(field, containingClass, isLocal = false))
calculateDeprecations(field)
return transformDeclaration(field, data) as FirField return transformDeclaration(field, data) as FirField
} }
@@ -451,7 +447,6 @@ abstract class AbstractFirStatusResolveTransformer(
data: FirResolvedDeclarationStatus? data: FirResolvedDeclarationStatus?
): FirStatement = whileAnalysing(session, enumEntry) { ): FirStatement = whileAnalysing(session, enumEntry) {
enumEntry.transformStatus(this, statusResolver.resolveStatus(enumEntry, containingClass, isLocal = false)) enumEntry.transformStatus(this, statusResolver.resolveStatus(enumEntry, containingClass, isLocal = false))
calculateDeprecations(enumEntry)
return transformDeclaration(enumEntry, data) as FirEnumEntry return transformDeclaration(enumEntry, data) as FirEnumEntry
} }
@@ -459,7 +454,6 @@ abstract class AbstractFirStatusResolveTransformer(
valueParameter: FirValueParameter, valueParameter: FirValueParameter,
data: FirResolvedDeclarationStatus? data: FirResolvedDeclarationStatus?
): FirStatement { ): FirStatement {
calculateDeprecations(valueParameter)
return transformDeclaration(valueParameter, data) as FirStatement return transformDeclaration(valueParameter, data) as FirStatement
} }
@@ -473,10 +467,4 @@ abstract class AbstractFirStatusResolveTransformer(
override fun transformBlock(block: FirBlock, data: FirResolvedDeclarationStatus?): FirStatement { override fun transformBlock(block: FirBlock, data: FirResolvedDeclarationStatus?): FirStatement {
return block 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 result
} }
} }
@@ -148,6 +149,7 @@ open class FirTypeResolveTransformer(
enumEntry.transformReturnTypeRef(this, data) enumEntry.transformReturnTypeRef(this, data)
enumEntry.transformTypeParameters(this, data) enumEntry.transformTypeParameters(this, data)
enumEntry.transformAnnotations(this, data) enumEntry.transformAnnotations(this, data)
calculateDeprecations(enumEntry)
enumEntry enumEntry
} }
@@ -192,6 +194,7 @@ open class FirTypeResolveTransformer(
property.removeDuplicateAnnotationsOfPrimaryConstructorElement() property.removeDuplicateAnnotationsOfPrimaryConstructorElement()
} }
calculateDeprecations(property)
property property
} }
} }
@@ -205,6 +208,7 @@ open class FirTypeResolveTransformer(
override fun transformField(field: FirField, data: Any?): FirField = whileAnalysing(session, field) { override fun transformField(field: FirField, data: Any?): FirField = whileAnalysing(session, field) {
withScopeCleanup { withScopeCleanup {
field.transformReturnTypeRef(this, data).transformAnnotations(this, data) field.transformReturnTypeRef(this, data).transformAnnotations(this, data)
calculateDeprecations(field)
field field
} }
} }
@@ -218,6 +222,7 @@ open class FirTypeResolveTransformer(
simpleFunction.addTypeParametersScope() simpleFunction.addTypeParametersScope()
transformDeclaration(simpleFunction, data).also { transformDeclaration(simpleFunction, data).also {
unboundCyclesInTypeParametersSupertypes(it as FirTypeParametersOwner) unboundCyclesInTypeParametersSupertypes(it as FirTypeParametersOwner)
calculateDeprecations(simpleFunction)
} }
} }
} as FirSimpleFunction } as FirSimpleFunction
@@ -282,6 +287,7 @@ open class FirTypeResolveTransformer(
valueParameter.transformReturnTypeRef(this, data) valueParameter.transformReturnTypeRef(this, data)
valueParameter.transformAnnotations(this, data) valueParameter.transformAnnotations(this, data)
valueParameter.transformVarargTypeToArrayType() valueParameter.transformVarargTypeToArrayType()
calculateDeprecations(valueParameter)
valueParameter valueParameter
} }
} }
@@ -457,4 +463,10 @@ open class FirTypeResolveTransformer(
AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER in it.useSiteTargetsFromMetaAnnotation(session) == isParameter 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? { fun getDeprecation(apiVersion: ApiVersion): DeprecationsPerUseSite? {
if (!canBeDeprecated()) return null if (!canBeDeprecated()) return null
lazyResolveToPhase(FirResolvePhase.STATUS)
lazyResolveToPhase(FirResolvePhase.TYPES)
return fir.deprecationsProvider.getDeprecationsInfo(apiVersion) return fir.deprecationsProvider.getDeprecationsInfo(apiVersion)
} }
@@ -85,6 +86,7 @@ abstract class FirCallableSymbol<D : FirCallableDeclaration> : FirBasedSymbol<D>
else -> lazyResolveToPhase(FirResolvePhase.TYPES) else -> lazyResolveToPhase(FirResolvePhase.TYPES)
} }
} }
override fun toString(): String = "${this::class.simpleName} $callableId" 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"); 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 @Test
@TestMetadata("deprecatedError.kt") @TestMetadata("deprecatedError.kt")
public void testDeprecatedError() throws Exception { public void testDeprecatedError() throws Exception {
@@ -9368,6 +9374,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/deprecated/deprecatedErrorBuilder.kt"); 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 @Test
@TestMetadata("deprecatedHidden.kt") @TestMetadata("deprecatedHidden.kt")
public void testDeprecatedHidden() throws Exception { public void testDeprecatedHidden() throws Exception {