[FIR] Get rid of candidateSymbol in FirNamedReference

`candidateSymbol` has any reasonable meaning only for references with
  not completed candidate, so this property is moved from FirNamedReference
  to new node FirNamedReferenceWithCandidateSymbol, which has real
  implementation only in :resolve module (`FirNamedReferenceWithCandidate`)
This commit is contained in:
Dmitriy Novozhilov
2022-12-15 11:11:03 +02:00
committed by Space Team
parent 366edcfe3c
commit 4bddb27ca3
40 changed files with 113 additions and 107 deletions
@@ -24,8 +24,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.diagnostics.toFirDiagnostics
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
@@ -89,11 +88,7 @@ internal interface KtFirAnalysisSessionComponent {
}
fun FirQualifiedAccess.createConeSubstitutorFromTypeArguments(): ConeSubstitutor? {
val symbol = when (val calleeReference = calleeReference) {
is FirResolvedNamedReference -> calleeReference.resolvedSymbol as? FirCallableSymbol<*>
is FirErrorNamedReference -> calleeReference.candidateSymbol as? FirCallableSymbol<*>
else -> null
} ?: return null
val symbol = calleeReference.toResolvedCallableSymbol() ?: return null
return createConeSubstitutorFromTypeArguments(symbol)
}
@@ -336,8 +336,7 @@ internal class KtFirCallResolver(
resolveFragmentOfCall: Boolean
): KtCall? {
val targetSymbol = candidate?.symbol
?: (fir.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol
?: (fir.calleeReference as? FirNamedReference)?.candidateSymbol
?: fir.calleeReference.toResolvedBaseSymbol()
?: return null
if (targetSymbol !is FirCallableSymbol<*>) return null
if (targetSymbol is FirErrorFunctionSymbol || targetSymbol is FirErrorPropertySymbol) return null
@@ -267,7 +267,6 @@ private val FirPropertyAccessExpression.propertyReferenceName: Name?
private val FirQualifiedAccessExpression.referencedCallableSymbol: FirCallableSymbol<*>?
get() {
return toResolvedCallableSymbol()
?: (calleeReference as? FirNamedReference)?.candidateSymbol as? FirCallableSymbol<*>
}
/**
@@ -544,14 +544,7 @@ private class ElementsToShortenCollector(
private fun findUnambiguousReferencedCallableId(namedReference: FirNamedReference): FirCallableSymbol<*>? {
val unambiguousSymbol = when (namedReference) {
is FirResolvedNamedReference -> namedReference.resolvedSymbol
is FirErrorNamedReference -> {
val candidateSymbol = namedReference.candidateSymbol
if (candidateSymbol !is FirErrorFunctionSymbol) {
candidateSymbol
} else {
getSingleUnambiguousCandidate(namedReference)
}
}
is FirErrorNamedReference -> getSingleUnambiguousCandidate(namedReference)
else -> null
}
@@ -6,25 +6,30 @@
package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
@OptIn(FirImplementationDetail::class)
open class FirNamedReferenceWithCandidate(
source: KtSourceElement?,
name: Name,
override val source: KtSourceElement?,
override val name: Name,
val candidate: Candidate
) : FirSimpleNamedReference(source, name, candidate.symbol) {
) : FirNamedReferenceWithCandidateBase() {
override val candidateSymbol: FirBasedSymbol<*>
get() = candidate.symbol
open val isError: Boolean get() = false
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
return this
}
}
class FirErrorReferenceWithCandidate(
@@ -42,8 +47,6 @@ class FirPropertyWithExplicitBackingFieldResolvedNamedReference(
override val resolvedSymbol: FirBasedSymbol<*>,
val hasVisibleBackingField: Boolean,
) : FirResolvedNamedReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyWithExplicitBackingFieldResolvedNamedReference {
@@ -7,14 +7,10 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildReceiverParameterCopy
import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
import org.jetbrains.kotlin.fir.declarations.utils.visibility
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
@@ -401,7 +397,6 @@ class FirCallCompletionResultsWriterTransformer(
return when (calleeReference.candidateSymbol) {
is FirErrorPropertySymbol, is FirErrorFunctionSymbol -> buildErrorNamedReference {
source = calleeReference.source
candidateSymbol = calleeReference.candidateSymbol
this.diagnostic = diagnostic
}
else -> buildResolvedErrorReference {
@@ -417,8 +412,7 @@ class FirCallCompletionResultsWriterTransformer(
variableAssignment: FirVariableAssignment,
data: ExpectedArgumentType?,
): FirStatement {
val calleeReference = variableAssignment.calleeReference as? FirNamedReferenceWithCandidate
?: return variableAssignment
val calleeReference = variableAssignment.calleeReference as? FirNamedReferenceWithCandidate ?: return variableAssignment
// Initialize lValueTypeRef
val qualifiedTransform = prepareQualifiedTransform(variableAssignment, calleeReference)
@@ -54,6 +54,13 @@ internal object StoreNameReference : FirDefaultTransformer<FirNamedReference>()
return data
}
override fun transformNamedReferenceWithCandidateSymbol(
namedReferenceWithCandidateSymbol: FirNamedReferenceWithCandidateSymbol,
data: FirNamedReference
): FirReference {
return data
}
override fun transformThisReference(thisReference: FirThisReference, data: FirNamedReference): FirReference {
return data
}
@@ -78,6 +85,13 @@ internal object StoreCalleeReference : FirTransformer<FirNamedReference>() {
return data
}
override fun transformNamedReferenceWithCandidateSymbol(
namedReferenceWithCandidateSymbol: FirNamedReferenceWithCandidateSymbol,
data: FirNamedReference
): FirReference {
return data
}
override fun transformResolvedNamedReference(
resolvedNamedReference: FirResolvedNamedReference,
data: FirNamedReference
@@ -386,6 +386,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
) {
storeTypeFromCallee(functionCall)
}
if (calleeReference is FirNamedReferenceWithCandidate) return functionCall
if (calleeReference !is FirSimpleNamedReference) {
// The callee reference can be resolved as an error very early, e.g., `super` as a callee during raw FIR creation.
// We still need to visit/transform other parts, e.g., call arguments, to check if any other errors are there.
@@ -394,7 +395,6 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
}
return functionCall
}
if (calleeReference is FirNamedReferenceWithCandidate) return functionCall
functionCall.transformAnnotations(transformer, data)
functionCall.replaceLambdaArgumentInvocationKinds(session)
functionCall.transformTypeArguments(transformer, ResolutionMode.ContextIndependent)
@@ -455,11 +455,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
private fun FirFunctionCall.transformToIntegerOperatorCallOrApproximateItIfNeeded(resolutionMode: ResolutionMode): FirFunctionCall {
if (!explicitReceiver.isIntegerLiteralOrOperatorCall()) return this
val resolvedSymbol = when (val reference = calleeReference) {
is FirResolvedNamedReference -> reference.resolvedSymbol
is FirErrorNamedReference -> reference.candidateSymbol
else -> null
} ?: return this
val resolvedSymbol = calleeReference.toResolvedFunctionSymbol() ?: return this
if (!resolvedSymbol.isWrappedIntegerOperator()) return this
val arguments = this.argumentList.arguments
@@ -1223,7 +1219,6 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
// TODO: Use source of operator for callee reference source
this.source = source
this.name = name
candidateSymbol = null
}
origin = FirFunctionCallOrigin.Operator
}
@@ -8,9 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.dfa
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
@@ -55,7 +55,7 @@ internal val FirResolvable.symbol: FirBasedSymbol<*>?
get() = when (val reference = calleeReference) {
is FirThisReference -> reference.boundSymbol
is FirResolvedNamedReference -> reference.resolvedSymbol
is FirSimpleNamedReference -> reference.candidateSymbol
is FirNamedReferenceWithCandidateBase -> reference.candidateSymbol
else -> null
}
@@ -41,7 +41,7 @@ internal class FirComponentCallImpl(
override val componentIndex: Int,
) : FirComponentCall() {
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override var calleeReference: FirNamedReference = FirSimpleNamedReference(source, Name.identifier("component$componentIndex"), null)
override var calleeReference: FirNamedReference = FirSimpleNamedReference(source, Name.identifier("component$componentIndex"))
override val origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Operator
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirBackingFieldReference : FirResolvedNamedReference() {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBackingFieldSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitBackingFieldReference(this, data)
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirDelegateFieldReference : FirResolvedNamedReference() {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirDelegateFieldSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDelegateFieldReference(this, data)
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirErrorNamedReference : FirNamedReference(), FirDiagnosticHolder {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorNamedReference(this, data)
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirNamedReference : FirReference() {
abstract override val source: KtSourceElement?
abstract val name: Name
abstract val candidateSymbol: FirBasedSymbol<*>?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitNamedReference(this, data)
@@ -0,0 +1,29 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirNamedReferenceWithCandidateBase : FirNamedReference() {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract val candidateSymbol: FirBasedSymbol<*>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitNamedReferenceWithCandidateBase(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformNamedReferenceWithCandidateBase(this, data) as E
}
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedCallableReference : FirResolvedNamedReference() {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBasedSymbol<*>
abstract val inferredTypeArguments: List<ConeKotlinType>
abstract val mappedArguments: CallableReferenceMappedArguments
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedErrorReference : FirResolvedNamedReference(), FirDiagnosticHolder {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBasedSymbol<*>
abstract override val diagnostic: ConeDiagnostic
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedNamedReference : FirNamedReference() {
abstract override val source: KtSourceElement?
abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract val resolvedSymbol: FirBasedSymbol<*>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedNamedReference(this, data)
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.references.impl.FirBackingFieldReferenceImpl
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -25,13 +24,11 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl
class FirBackingFieldReferenceBuilder {
var source: KtSourceElement? = null
var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var resolvedSymbol: FirBackingFieldSymbol
fun build(): FirBackingFieldReference {
return FirBackingFieldReferenceImpl(
source,
candidateSymbol,
resolvedSymbol,
)
}
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.references.impl.FirDelegateFieldReferenceImpl
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -25,13 +24,11 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl
class FirDelegateFieldReferenceBuilder {
var source: KtSourceElement? = null
var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var resolvedSymbol: FirDelegateFieldSymbol
fun build(): FirDelegateFieldReference {
return FirDelegateFieldReferenceImpl(
source,
candidateSymbol,
resolvedSymbol,
)
}
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -25,13 +24,11 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl
class FirErrorNamedReferenceBuilder {
var source: KtSourceElement? = null
var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var diagnostic: ConeDiagnostic
fun build(): FirErrorNamedReference {
return FirErrorNamedReferenceImpl(
source,
candidateSymbol,
diagnostic,
)
}
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -26,14 +25,12 @@ import org.jetbrains.kotlin.name.Name
class FirSimpleNamedReferenceBuilder {
var source: KtSourceElement? = null
lateinit var name: Name
var candidateSymbol: FirBasedSymbol<*>? = null
@OptIn(FirImplementationDetail::class)
fun build(): FirNamedReference {
return FirSimpleNamedReference(
source,
name,
candidateSymbol,
)
}
@@ -9,7 +9,6 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirBackingFieldReferenceImpl(
override val source: KtSourceElement?,
override val candidateSymbol: FirBasedSymbol<*>?,
override val resolvedSymbol: FirBackingFieldSymbol,
) : FirBackingFieldReference() {
override val name: Name get() = Name.identifier("\$field")
@@ -9,7 +9,6 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirDelegateFieldReferenceImpl(
override val source: KtSourceElement?,
override val candidateSymbol: FirBasedSymbol<*>?,
override val resolvedSymbol: FirDelegateFieldSymbol,
) : FirDelegateFieldReference() {
override val name: Name get() = Name.identifier("\$delegate")
@@ -10,7 +10,6 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirErrorNamedReferenceImpl(
override val source: KtSourceElement?,
override val candidateSymbol: FirBasedSymbol<*>?,
override val diagnostic: ConeDiagnostic,
) : FirErrorNamedReference() {
override val name: Name = Name.special("<${diagnostic.reason}>")
@@ -24,8 +24,6 @@ class FirPropertyFromParameterResolvedNamedReference @FirImplementationDetail co
override val name: Name,
override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyFromParameterResolvedNamedReference {
@@ -27,8 +27,6 @@ internal class FirResolvedCallableReferenceImpl(
override val inferredTypeArguments: MutableList<ConeKotlinType>,
override val mappedArguments: CallableReferenceMappedArguments,
) : FirResolvedCallableReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedCallableReferenceImpl {
@@ -25,8 +25,6 @@ internal class FirResolvedErrorReferenceImpl(
override val resolvedSymbol: FirBasedSymbol<*>,
override val diagnostic: ConeDiagnostic,
) : FirResolvedErrorReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedErrorReferenceImpl {
@@ -23,8 +23,6 @@ internal class FirResolvedNamedReferenceImpl(
override val name: Name,
override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedNamedReferenceImpl {
@@ -10,7 +10,6 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -19,10 +18,9 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
open class FirSimpleNamedReference @FirImplementationDetail constructor(
class FirSimpleNamedReference @FirImplementationDetail constructor(
override val source: KtSourceElement?,
override val name: Name,
override val candidateSymbol: FirBasedSymbol<*>?,
) : FirNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
@@ -125,6 +125,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -262,6 +263,8 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
override fun visitNamedReference(namedReference: FirNamedReference, data: D): R = visitReference(namedReference, data)
override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: D): R = visitNamedReference(namedReferenceWithCandidateBase, data)
override fun visitSuperReference(superReference: FirSuperReference, data: D): R = visitReference(superReference, data)
override fun visitThisReference(thisReference: FirThisReference, data: D): R = visitReference(thisReference, data)
@@ -125,6 +125,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -262,6 +263,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
override fun visitNamedReference(namedReference: FirNamedReference) = visitReference(namedReference)
override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) = visitNamedReference(namedReferenceWithCandidateBase)
override fun visitSuperReference(superReference: FirSuperReference) = visitReference(superReference)
override fun visitThisReference(thisReference: FirThisReference) = visitReference(thisReference)
@@ -125,6 +125,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -633,6 +634,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(namedReference, data)
}
open fun transformNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: D): FirReference {
return transformElement(namedReferenceWithCandidateBase, data)
}
open fun transformErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): FirReference {
return transformElement(errorNamedReference, data)
}
@@ -1201,6 +1206,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformNamedReference(namedReference, data)
}
final override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: D): FirReference {
return transformNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase, data)
}
final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): FirReference {
return transformErrorNamedReference(errorNamedReference, data)
}
@@ -125,6 +125,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -394,6 +395,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitNamedReference(namedReference: FirNamedReference, data: D): R = visitElement(namedReference, data)
open fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: D): R = visitElement(namedReferenceWithCandidateBase, data)
open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): R = visitElement(errorNamedReference, data)
open fun visitSuperReference(superReference: FirSuperReference, data: D): R = visitElement(superReference, data)
@@ -125,6 +125,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.expressions.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -632,6 +633,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(namedReference)
}
open fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) {
visitElement(namedReferenceWithCandidateBase)
}
open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
visitElement(errorNamedReference)
}
@@ -1200,6 +1205,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitNamedReference(namedReference)
}
final override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: Nothing?) {
visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase)
}
final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: Nothing?) {
visitErrorNamedReference(errorNamedReference)
}
@@ -782,12 +782,15 @@ class FirRenderer(
}
override fun visitNamedReference(namedReference: FirNamedReference) {
val symbol = namedReference.candidateSymbol
when {
namedReference is FirErrorNamedReference -> print("<${namedReference.diagnostic.reason}>#")
symbol != null -> print("R?C|${symbol.render()}|")
else -> print("${namedReference.name}#")
}
print("${namedReference.name}#")
}
override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) {
print("R?C|${namedReferenceWithCandidateBase.candidateSymbol.render()}|")
}
override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
print("<${errorNamedReference.diagnostic.reason}>#")
}
override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference) {
@@ -1063,10 +1066,6 @@ class FirRenderer(
binaryLogicExpression.rightOperand.accept(this)
}
override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
visitNamedReference(errorNamedReference)
}
override fun visitEffectDeclaration(effectDeclaration: FirEffectDeclaration) {
contractRenderer?.render(effectDeclaration)
}
@@ -152,6 +152,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val wrappedDelegateExpression by element(Expression, wrappedExpression)
val namedReference by element(Reference, reference)
val namedReferenceWithCandidateBase by element(Reference, namedReference)
val errorNamedReference by element(Reference, namedReference, diagnosticHolder)
val superReference by element(Reference, reference)
val thisReference by element(Reference, reference)
@@ -111,7 +111,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(callableReferenceAccess)
impl(componentCall) {
default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"), null)")
default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"))")
useTypes(simpleNamedReferenceType, nameType)
optInToInternals()
}
@@ -404,27 +404,22 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
}
}
impl(resolvedNamedReference) {
defaultNull("candidateSymbol", withGetter = true)
}
impl(resolvedNamedReference)
impl(resolvedNamedReference, "FirPropertyFromParameterResolvedNamedReference") {
defaultNull("candidateSymbol", withGetter = true)
publicImplementation()
}
impl(resolvedErrorReference) {
defaultNull("candidateSymbol", withGetter = true)
}
impl(resolvedErrorReference)
impl(resolvedCallableReference) {
defaultNull("candidateSymbol", withGetter = true)
}
impl(resolvedCallableReference)
impl(namedReference, "FirSimpleNamedReference") {
kind = OpenClass
publicImplementation()
}
noImpl(namedReferenceWithCandidateBase)
impl(delegateFieldReference) {
default("name") {
value = "Name.identifier(\"\\\$delegate\")"
@@ -620,7 +620,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
namedReference.configure {
+name
+field("candidateSymbol", firBasedSymbolType, "*", nullable = true)
}
namedReferenceWithCandidateBase.configure {
+field("candidateSymbol", firBasedSymbolType, "*")
}
resolvedNamedReference.configure {
@@ -67,7 +67,6 @@ class FirAssignmentPluginAssignAltererExtension(
calleeReference = buildSimpleNamedReference {
source = variableAssignment.source
name = ASSIGN_METHOD
candidateSymbol = null
}
origin = FirFunctionCallOrigin.Regular
}