[FIR] DeprecationsProvider: make evaluation of deprecations on demand

This commit is contained in:
Arseniy Terekhov
2022-08-10 18:06:59 +03:00
committed by teamcity
parent 98ebad2d75
commit 25fc948d95
89 changed files with 517 additions and 326 deletions
@@ -185,7 +185,7 @@ abstract class FirJavaFacade(
}
}
firJavaClass.replaceSuperTypeRefs(enhancedSuperTypes)
firJavaClass.replaceDeprecation(firJavaClass.getDeprecationInfos(session.languageVersionSettings.apiVersion))
firJavaClass.replaceDeprecationsProvider(firJavaClass.getDeprecationsProvider())
return firJavaClass
}
@@ -50,7 +50,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
) : FirRegularClass() {
override val hasLazyNestedClassifiers: Boolean get() = true
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
override var deprecation: DeprecationsPerUseSite? = null
override var deprecationsProvider: DeprecationsProvider = UnresolvedDeprecationProvider
override val contextReceivers: List<FirContextReceiver>
get() = emptyList()
@@ -70,8 +70,8 @@ class FirJavaClass @FirImplementationDetail internal constructor(
resolvePhase = newResolvePhase
}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
deprecation = newDeprecation
override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) {
deprecationsProvider = newDeprecationsProvider
}
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {}
@@ -43,7 +43,7 @@ class FirJavaConstructor @FirImplementationDetail constructor(
override val dispatchReceiverType: ConeSimpleKotlinType?,
) : FirConstructor() {
override val receiverTypeRef: FirTypeRef? get() = null
override var deprecation: DeprecationsPerUseSite? = null
override var deprecationsProvider: DeprecationsProvider = UnresolvedDeprecationProvider
init {
symbol.bind(this)
@@ -134,8 +134,8 @@ class FirJavaConstructor @FirImplementationDetail constructor(
}
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
deprecation = newDeprecation
override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) {
deprecationsProvider = newDeprecationsProvider
}
override fun replaceContextReceivers(newContextReceivers: List<FirContextReceiver>) {
@@ -61,8 +61,8 @@ class FirJavaField @FirImplementationDetail constructor(
override val annotations: List<FirAnnotation> by lazy { annotationBuilder() }
override val deprecation: DeprecationsPerUseSite by lazy {
annotations.getDeprecationInfosFromAnnotations(moduleData.session.languageVersionSettings.apiVersion, fromJava = true)
override val deprecationsProvider: DeprecationsProvider by lazy {
annotations.getDeprecationsProviderFromAnnotations(true)
}
override val contextReceivers: List<FirContextReceiver>
@@ -145,8 +145,7 @@ class FirJavaField @FirImplementationDetail constructor(
}
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {}
override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) {}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirField {
return this
@@ -85,7 +85,7 @@ class FirJavaMethod @FirImplementationDetail constructor(
get() = emptyList()
//not used actually, because get 'enhanced' into regular FirSimpleFunction
override var deprecation: DeprecationsPerUseSite? = null
override var deprecationsProvider: DeprecationsProvider = UnresolvedDeprecationProvider
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
returnTypeRef.accept(visitor, data)
@@ -159,8 +159,8 @@ class FirJavaMethod @FirImplementationDetail constructor(
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {
}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
deprecation = newDeprecation
override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) {
deprecationsProvider = newDeprecationsProvider
}
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
@@ -207,7 +207,7 @@ class FirJavaMethodBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder,
lateinit var annotationBuilder: () -> List<FirAnnotation>
@Deprecated("Modification of 'deprecation' has no impact for FirJavaFunctionBuilder", level = DeprecationLevel.HIDDEN)
override var deprecation: DeprecationsPerUseSite?
override var deprecationsProvider: DeprecationsProvider
get() = throw IllegalStateException()
set(_) {
throw IllegalStateException()
@@ -63,8 +63,8 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
override val receiverTypeRef: FirTypeRef?
get() = null
override val deprecation: DeprecationsPerUseSite
get() = EmptyDeprecationsPerUseSite
override val deprecationsProvider: DeprecationsProvider
get() = EmptyDeprecationsProvider
override val initializer: FirExpression?
get() = null
@@ -168,7 +168,7 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {
}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
override fun replaceDeprecationsProvider(newDeprecationsProvider: DeprecationsProvider) {
}
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.ThreadSafeMutableState
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.getDeprecationInfos
import org.jetbrains.kotlin.fir.declarations.getDeprecationsProvider
import org.jetbrains.kotlin.fir.deserialization.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.java.FirJavaFacade
@@ -151,7 +151,7 @@ class JvmClassFileBasedSymbolProvider(
},
kotlinClass.byteContent,
)
symbol.fir.replaceDeprecation(symbol.fir.getDeprecationInfos(session.languageVersionSettings.apiVersion))
symbol.fir.replaceDeprecationsProvider(symbol.fir.getDeprecationsProvider())
}
private fun String?.toPath(): Path? {
@@ -168,7 +168,7 @@ class FirSignatureEnhancement(
delegateGetter = enhancedGetterSymbol.fir as FirSimpleFunction
delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction?
status = firElement.status
deprecation = getDeprecationsFromAccessors(delegateGetter, delegateSetter, session.languageVersionSettings.apiVersion)
deprecationsProvider = getDeprecationsProviderFromAccessors(delegateGetter, delegateSetter)
}.symbol
}
else -> {
@@ -320,7 +320,7 @@ class FirSignatureEnhancement(
else -> throw AssertionError("Unknown Java method to enhance: ${firMethod.render()}")
}.apply {
annotations += firMethod.annotations
deprecation = annotations.getDeprecationInfosFromAnnotations(session.languageVersionSettings.apiVersion, fromJava = true)
deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(true)
}.build()
return function.symbol
@@ -88,7 +88,7 @@ class JavaClassUseSiteMemberScope(
chooseModalityForAccessor(property, delegateGetter)
}
)
deprecation = getDeprecationsFromAccessors(delegateGetter, delegateSetter, session.languageVersionSettings.apiVersion)
deprecationsProvider = getDeprecationsProviderFromAccessors(delegateGetter, delegateSetter)
}.symbol
}
}