FIR: introduce helpers to get resolved reference / symbol

This commit is contained in:
Mikhail Glukhikh
2021-12-07 09:44:47 +03:00
parent 852475337b
commit f8b3eb0801
31 changed files with 71 additions and 79 deletions
@@ -14,6 +14,9 @@ import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.types.FirDynamicTypeRef
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
@@ -69,3 +72,6 @@ val FirFile.packageFqName: FqName
val FirElement.psi: PsiElement? get() = (source as? KtPsiSourceElement)?.psi
val FirElement.realPsi: PsiElement? get() = (source as? KtRealPsiSourceElement)?.psi
val FirReference.resolved: FirResolvedNamedReference? get() = this as? FirResolvedNamedReference
val FirReference.resolvedSymbol: FirBasedSymbol<*>? get() = resolved?.resolvedSymbol
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.declarations.utils
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolvedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.coneTypeSafe
@@ -39,8 +39,7 @@ val FirClass.delegateFields: List<FirField>
val FirQualifiedAccess.referredPropertySymbol: FirPropertySymbol?
get() {
val reference = calleeReference as? FirResolvedNamedReference ?: return null
return reference.resolvedSymbol as? FirPropertySymbol
return calleeReference.resolvedSymbol as? FirPropertySymbol
}
inline val FirDeclaration.isJava: Boolean
@@ -16,6 +16,8 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolved
import org.jetbrains.kotlin.fir.resolvedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
@@ -56,7 +58,7 @@ inline val FirCall.argumentMapping: LinkedHashMap<FirExpression, FirValueParamet
}
fun FirExpression.toResolvedCallableReference(): FirResolvedNamedReference? {
return toReference() as? FirResolvedNamedReference
return toReference()?.resolved
}
fun FirExpression.toReference(): FirReference? {
@@ -69,7 +71,7 @@ fun FirExpression.toResolvedCallableSymbol(): FirCallableSymbol<*>? {
}
fun FirReference.toResolvedCallableSymbol(): FirCallableSymbol<*>? {
return (this as? FirResolvedNamedReference)?.resolvedSymbol as? FirCallableSymbol<*>
return this.resolvedSymbol as? FirCallableSymbol<*>
}
fun buildErrorLoop(source: KtSourceElement?, diagnostic: ConeDiagnostic): FirErrorLoop {
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolvedSymbol
import org.jetbrains.kotlin.fir.symbols.ensureResolved
import org.jetbrains.kotlin.name.*
@@ -63,7 +64,7 @@ class FirConstructorSymbol(
val resolvedDelegatedConstructor: FirConstructorSymbol?
get() {
val delegatedConstructorCall = resolvedDelegatedConstructorCall ?: return null
return (delegatedConstructorCall.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol as? FirConstructorSymbol
return delegatedConstructorCall.calleeReference.resolvedSymbol as? FirConstructorSymbol
}
val resolvedDelegatedConstructorCall: FirDelegatedConstructorCall?