[FIR] Partial implementation of DEPRECATION(_ERROR) diagnostics
No support for inheritance deprecations and deprecations in qualifier's parts
This commit is contained in:
committed by
teamcityserver
parent
9fad55d551
commit
de3f31cf78
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+7
@@ -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?) {
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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? {
|
||||
|
||||
+2
@@ -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
|
||||
|
||||
+1
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user