[FIR] Report deprecations in qualified expressions
This commit is contained in:
committed by
TeamCityServer
parent
98bd6f5d3e
commit
8a0941a85a
@@ -254,7 +254,12 @@ class FirCallResolver(
|
||||
referencedSymbol,
|
||||
nameReference.source,
|
||||
qualifiedAccess.typeArguments,
|
||||
diagnostic
|
||||
diagnostic,
|
||||
nonFatalDiagnostics = extractNonFatalDiagnostics(
|
||||
nameReference.source,
|
||||
qualifiedAccess.explicitReceiver,
|
||||
referencedSymbol
|
||||
)
|
||||
)
|
||||
}
|
||||
referencedSymbol is FirTypeParameterSymbol && referencedSymbol.fir.isReified -> {
|
||||
@@ -276,6 +281,17 @@ class FirCallResolver(
|
||||
return resultExpression
|
||||
}
|
||||
|
||||
private fun extractNonFatalDiagnostics(
|
||||
source: FirSourceElement?,
|
||||
explicitReceiver: FirExpression?,
|
||||
symbol: FirClassLikeSymbol<*>
|
||||
): List<ConeDiagnostic> {
|
||||
val prevDiagnostics = (explicitReceiver as? FirResolvedQualifier)?.nonFatalDiagnostics ?: emptyList()
|
||||
return symbol.fir.deprecation?.forUseSite()?.let {
|
||||
prevDiagnostics + ConeDeprecated(source, symbol, it)
|
||||
} ?: prevDiagnostics
|
||||
}
|
||||
|
||||
fun resolveCallableReference(
|
||||
constraintSystemBuilder: ConstraintSystemBuilder,
|
||||
resolvedCallableReferenceAtom: ResolvedCallableReferenceAtom,
|
||||
|
||||
@@ -114,7 +114,8 @@ fun BodyResolveComponents.buildResolvedQualifierForClass(
|
||||
sourceElement: FirSourceElement? = null,
|
||||
// TODO: Clarify if we actually need type arguments for qualifier?
|
||||
typeArgumentsForQualifier: List<FirTypeProjection> = emptyList(),
|
||||
diagnostic: ConeDiagnostic? = null
|
||||
diagnostic: ConeDiagnostic? = null,
|
||||
nonFatalDiagnostics: List<ConeDiagnostic> = emptyList()
|
||||
): FirResolvedQualifier {
|
||||
val classId = regularClass.classId
|
||||
|
||||
@@ -130,6 +131,7 @@ fun BodyResolveComponents.buildResolvedQualifierForClass(
|
||||
relativeClassFqName = classId.relativeClassName
|
||||
typeArguments.addAll(typeArgumentsForQualifier)
|
||||
symbol = regularClass
|
||||
this.nonFatalDiagnostics.addAll(nonFatalDiagnostics)
|
||||
}.build().apply {
|
||||
resultType = if (classId.isLocal) {
|
||||
typeForQualifierByDeclaration(regularClass.fir, resultType, session)
|
||||
|
||||
+5
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.diagnostics
|
||||
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.declarations.Deprecation
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
@@ -147,6 +148,10 @@ class ConeUnsupportedDynamicType() : ConeDiagnostic() {
|
||||
override val reason: String get() = "Dynamic types are not supported in this context"
|
||||
}
|
||||
|
||||
class ConeDeprecated(val source: FirSourceElement?, val symbol: FirBasedSymbol<*>, val deprecation: Deprecation) : ConeDiagnostic() {
|
||||
override val reason: String get() = "Deprecated: ${deprecation.message}"
|
||||
}
|
||||
|
||||
private fun describeSymbol(symbol: FirBasedSymbol<*>): String {
|
||||
return when (symbol) {
|
||||
is FirClassLikeSymbol<*> -> symbol.classId.asString()
|
||||
|
||||
Reference in New Issue
Block a user