[FIR] Partial implementation of DEPRECATION(_ERROR) diagnostics

No support for inheritance deprecations
and deprecations in qualifier's parts
This commit is contained in:
Andrey Zinovyev
2021-06-23 15:25:23 +03:00
committed by teamcityserver
parent 9fad55d551
commit de3f31cf78
188 changed files with 984 additions and 1052 deletions
@@ -212,6 +212,7 @@ class JavaSymbolProvider(
parentClassEffectiveVisibilityCache.remove(classSymbol)
firJavaClass.convertSuperTypes(javaClass, javaTypeParameterStack)
firJavaClass.addAnnotationsFrom(this@JavaSymbolProvider.session, javaClass, javaTypeParameterStack)
firJavaClass.replaceDeprecation(firJavaClass.getDeprecationInfos(session.languageVersionSettings.apiVersion))
return firJavaClass
}
@@ -47,6 +47,7 @@ class FirJavaClass @FirImplementationDetail internal constructor(
) : FirRegularClass() {
override val hasLazyNestedClassifiers: Boolean get() = true
override val controlFlowGraphReference: FirControlFlowGraphReference? get() = null
override var deprecation: DeprecationsPerUseSite? = null
init {
symbol.bind(this)
@@ -69,6 +70,10 @@ class FirJavaClass @FirImplementationDetail internal constructor(
resolvePhase = newResolvePhase
}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
deprecation = newDeprecation
}
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {}
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -41,6 +41,7 @@ class FirJavaConstructor @FirImplementationDetail constructor(
override val dispatchReceiverType: ConeKotlinType?,
) : FirConstructor() {
override val receiverTypeRef: FirTypeRef? get() = null
override var deprecation: DeprecationsPerUseSite? = null
init {
symbol.bind(this)
@@ -132,6 +133,9 @@ class FirJavaConstructor @FirImplementationDetail constructor(
}
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
deprecation = newDeprecation
}
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.FirFieldBuilder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -59,6 +60,9 @@ class FirJavaField @FirImplementationDetail constructor(
override val annotations: List<FirAnnotationCall> by lazy { annotationBuilder() }
override val deprecation: DeprecationsPerUseSite by lazy {
annotations.getDeprecationInfosFromAnnotations(moduleData.session.languageVersionSettings.apiVersion, fromJava = true)
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D): FirField {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
@@ -134,6 +138,8 @@ class FirJavaField @FirImplementationDetail constructor(
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {}
override fun <D> transformDelegate(transformer: FirTransformer<D>, data: D): FirField {
return this
}
@@ -84,6 +84,9 @@ class FirJavaMethod @FirImplementationDetail constructor(
override val annotations: List<FirAnnotationCall> by lazy { annotationBuilder() }
//not used actually, because get 'enhanced' into regular FirSimpleFunction
override var deprecation: DeprecationsPerUseSite? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
returnTypeRef.accept(visitor, data)
receiverTypeRef?.accept(visitor, data)
@@ -156,6 +159,10 @@ class FirJavaMethod @FirImplementationDetail constructor(
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {
}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
deprecation = newDeprecation
}
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
controlFlowGraphReference = newControlFlowGraphReference
}
@@ -194,6 +201,13 @@ class FirJavaMethodBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder,
override var resolvePhase: FirResolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
lateinit var annotationBuilder: () -> List<FirAnnotationCall>
@Deprecated("Modification of 'deprecation' has no impact for FirJavaFunctionBuilder", level = DeprecationLevel.HIDDEN)
override var deprecation: DeprecationsPerUseSite?
get() = throw IllegalStateException()
set(_) {
throw IllegalStateException()
}
@Deprecated("Modification of 'containerSource' has no impact for FirJavaFunctionBuilder", level = DeprecationLevel.HIDDEN)
override var containerSource: DeserializedContainerSource?
get() = throw IllegalStateException()
@@ -222,7 +236,7 @@ class FirJavaMethodBuilder : FirFunctionBuilder, FirTypeParametersOwnerBuilder,
status,
symbol,
annotationBuilder,
dispatchReceiverType,
dispatchReceiverType
)
}
}
@@ -63,6 +63,9 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
override val receiverTypeRef: FirTypeRef?
get() = null
override val deprecation: DeprecationsPerUseSite
get() = EmptyDeprecationsPerUseSite
override val initializer: FirExpression?
get() = null
@@ -155,6 +158,10 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
override fun replaceReceiverTypeRef(newReceiverTypeRef: FirTypeRef?) {
}
override fun replaceDeprecation(newDeprecation: DeprecationsPerUseSite?) {
}
override fun replaceInitializer(newInitializer: FirExpression?) {
}
@@ -13,10 +13,9 @@ import org.jetbrains.kotlin.fir.caches.*
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.deserialization.*
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.topLevelName
import org.jetbrains.kotlin.fir.resolve.providers.*
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.load.java.JavaClassFinder
@@ -140,6 +139,7 @@ class KotlinDeserializedJvmSymbolsProvider(
kotlinClass.byteContent,
)
(symbol.fir.annotations as MutableList<FirAnnotationCall>) += annotations
symbol.fir.replaceDeprecation(symbol.fir.getDeprecationInfos(session.languageVersionSettings.apiVersion))
}
private fun readClassFromClassFile(classId: ClassId, classFile: KotlinClassFinder.Result.ClassFileContent): FirRegularClassSymbol? {
@@ -149,6 +149,7 @@ class FirSignatureEnhancement(
delegateGetter = enhancedGetterSymbol.fir as FirSimpleFunction
delegateSetter = enhancedSetterSymbol?.fir as FirSimpleFunction?
status = firElement.status
deprecation = getDeprecationsFromAccessors(delegateGetter, delegateSetter, session.languageVersionSettings.apiVersion)
}.symbol
}
else -> {
@@ -294,6 +295,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)
}.build()
return function.symbol
@@ -77,6 +77,7 @@ class JavaClassUseSiteMemberScope(
delegateGetter = getterSymbol.fir
delegateSetter = setterSymbol?.fir
status = getterSymbol.fir.status.copy(newModality = chooseModalityForAccessor(property, delegateGetter))
deprecation = getDeprecationsFromAccessors(delegateGetter, delegateSetter, session.languageVersionSettings.apiVersion)
}.symbol
}
}