[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.analysis.diagnostics.toFirDiagnostics
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
@@ -89,11 +88,7 @@ internal interface KtFirAnalysisSessionComponent {
} }
fun FirQualifiedAccess.createConeSubstitutorFromTypeArguments(): ConeSubstitutor? { fun FirQualifiedAccess.createConeSubstitutorFromTypeArguments(): ConeSubstitutor? {
val symbol = when (val calleeReference = calleeReference) { val symbol = calleeReference.toResolvedCallableSymbol() ?: return null
is FirResolvedNamedReference -> calleeReference.resolvedSymbol as? FirCallableSymbol<*>
is FirErrorNamedReference -> calleeReference.candidateSymbol as? FirCallableSymbol<*>
else -> null
} ?: return null
return createConeSubstitutorFromTypeArguments(symbol) return createConeSubstitutorFromTypeArguments(symbol)
} }
@@ -336,8 +336,7 @@ internal class KtFirCallResolver(
resolveFragmentOfCall: Boolean resolveFragmentOfCall: Boolean
): KtCall? { ): KtCall? {
val targetSymbol = candidate?.symbol val targetSymbol = candidate?.symbol
?: (fir.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol ?: fir.calleeReference.toResolvedBaseSymbol()
?: (fir.calleeReference as? FirNamedReference)?.candidateSymbol
?: return null ?: return null
if (targetSymbol !is FirCallableSymbol<*>) return null if (targetSymbol !is FirCallableSymbol<*>) return null
if (targetSymbol is FirErrorFunctionSymbol || targetSymbol is FirErrorPropertySymbol) 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<*>? private val FirQualifiedAccessExpression.referencedCallableSymbol: FirCallableSymbol<*>?
get() { get() {
return toResolvedCallableSymbol() return toResolvedCallableSymbol()
?: (calleeReference as? FirNamedReference)?.candidateSymbol as? FirCallableSymbol<*>
} }
/** /**
@@ -544,14 +544,7 @@ private class ElementsToShortenCollector(
private fun findUnambiguousReferencedCallableId(namedReference: FirNamedReference): FirCallableSymbol<*>? { private fun findUnambiguousReferencedCallableId(namedReference: FirNamedReference): FirCallableSymbol<*>? {
val unambiguousSymbol = when (namedReference) { val unambiguousSymbol = when (namedReference) {
is FirResolvedNamedReference -> namedReference.resolvedSymbol is FirResolvedNamedReference -> namedReference.resolvedSymbol
is FirErrorNamedReference -> { is FirErrorNamedReference -> getSingleUnambiguousCandidate(namedReference)
val candidateSymbol = namedReference.candidateSymbol
if (candidateSymbol !is FirErrorFunctionSymbol) {
candidateSymbol
} else {
getSingleUnambiguousCandidate(namedReference)
}
}
else -> null else -> null
} }
@@ -6,25 +6,30 @@
package org.jetbrains.kotlin.fir.resolve.calls package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.KtSourceElement 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.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference 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.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@OptIn(FirImplementationDetail::class)
open class FirNamedReferenceWithCandidate( open class FirNamedReferenceWithCandidate(
source: KtSourceElement?, override val source: KtSourceElement?,
name: Name, override val name: Name,
val candidate: Candidate val candidate: Candidate
) : FirSimpleNamedReference(source, name, candidate.symbol) { ) : FirNamedReferenceWithCandidateBase() {
override val candidateSymbol: FirBasedSymbol<*> override val candidateSymbol: FirBasedSymbol<*>
get() = candidate.symbol get() = candidate.symbol
open val isError: Boolean get() = false 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( class FirErrorReferenceWithCandidate(
@@ -42,8 +47,6 @@ class FirPropertyWithExplicitBackingFieldResolvedNamedReference(
override val resolvedSymbol: FirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
val hasVisibleBackingField: Boolean, val hasVisibleBackingField: Boolean,
) : FirResolvedNamedReference() { ) : FirResolvedNamedReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyWithExplicitBackingFieldResolvedNamedReference { 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.KtFakeSourceElementKind
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fakeElement import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.* 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.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.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
@@ -401,7 +397,6 @@ class FirCallCompletionResultsWriterTransformer(
return when (calleeReference.candidateSymbol) { return when (calleeReference.candidateSymbol) {
is FirErrorPropertySymbol, is FirErrorFunctionSymbol -> buildErrorNamedReference { is FirErrorPropertySymbol, is FirErrorFunctionSymbol -> buildErrorNamedReference {
source = calleeReference.source source = calleeReference.source
candidateSymbol = calleeReference.candidateSymbol
this.diagnostic = diagnostic this.diagnostic = diagnostic
} }
else -> buildResolvedErrorReference { else -> buildResolvedErrorReference {
@@ -417,8 +412,7 @@ class FirCallCompletionResultsWriterTransformer(
variableAssignment: FirVariableAssignment, variableAssignment: FirVariableAssignment,
data: ExpectedArgumentType?, data: ExpectedArgumentType?,
): FirStatement { ): FirStatement {
val calleeReference = variableAssignment.calleeReference as? FirNamedReferenceWithCandidate val calleeReference = variableAssignment.calleeReference as? FirNamedReferenceWithCandidate ?: return variableAssignment
?: return variableAssignment
// Initialize lValueTypeRef // Initialize lValueTypeRef
val qualifiedTransform = prepareQualifiedTransform(variableAssignment, calleeReference) val qualifiedTransform = prepareQualifiedTransform(variableAssignment, calleeReference)
@@ -54,6 +54,13 @@ internal object StoreNameReference : FirDefaultTransformer<FirNamedReference>()
return data return data
} }
override fun transformNamedReferenceWithCandidateSymbol(
namedReferenceWithCandidateSymbol: FirNamedReferenceWithCandidateSymbol,
data: FirNamedReference
): FirReference {
return data
}
override fun transformThisReference(thisReference: FirThisReference, data: FirNamedReference): FirReference { override fun transformThisReference(thisReference: FirThisReference, data: FirNamedReference): FirReference {
return data return data
} }
@@ -78,6 +85,13 @@ internal object StoreCalleeReference : FirTransformer<FirNamedReference>() {
return data return data
} }
override fun transformNamedReferenceWithCandidateSymbol(
namedReferenceWithCandidateSymbol: FirNamedReferenceWithCandidateSymbol,
data: FirNamedReference
): FirReference {
return data
}
override fun transformResolvedNamedReference( override fun transformResolvedNamedReference(
resolvedNamedReference: FirResolvedNamedReference, resolvedNamedReference: FirResolvedNamedReference,
data: FirNamedReference data: FirNamedReference
@@ -386,6 +386,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
) { ) {
storeTypeFromCallee(functionCall) storeTypeFromCallee(functionCall)
} }
if (calleeReference is FirNamedReferenceWithCandidate) return functionCall
if (calleeReference !is FirSimpleNamedReference) { 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. // 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. // 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 return functionCall
} }
if (calleeReference is FirNamedReferenceWithCandidate) return functionCall
functionCall.transformAnnotations(transformer, data) functionCall.transformAnnotations(transformer, data)
functionCall.replaceLambdaArgumentInvocationKinds(session) functionCall.replaceLambdaArgumentInvocationKinds(session)
functionCall.transformTypeArguments(transformer, ResolutionMode.ContextIndependent) functionCall.transformTypeArguments(transformer, ResolutionMode.ContextIndependent)
@@ -455,11 +455,7 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
private fun FirFunctionCall.transformToIntegerOperatorCallOrApproximateItIfNeeded(resolutionMode: ResolutionMode): FirFunctionCall { private fun FirFunctionCall.transformToIntegerOperatorCallOrApproximateItIfNeeded(resolutionMode: ResolutionMode): FirFunctionCall {
if (!explicitReceiver.isIntegerLiteralOrOperatorCall()) return this if (!explicitReceiver.isIntegerLiteralOrOperatorCall()) return this
val resolvedSymbol = when (val reference = calleeReference) { val resolvedSymbol = calleeReference.toResolvedFunctionSymbol() ?: return this
is FirResolvedNamedReference -> reference.resolvedSymbol
is FirErrorNamedReference -> reference.candidateSymbol
else -> null
} ?: return this
if (!resolvedSymbol.isWrappedIntegerOperator()) return this if (!resolvedSymbol.isWrappedIntegerOperator()) return this
val arguments = this.argumentList.arguments val arguments = this.argumentList.arguments
@@ -1223,7 +1219,6 @@ open class FirExpressionsResolveTransformer(transformer: FirAbstractBodyResolveT
// TODO: Use source of operator for callee reference source // TODO: Use source of operator for callee reference source
this.source = source this.source = source
this.name = name this.name = name
candidateSymbol = null
} }
origin = FirFunctionCallOrigin.Operator 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.FirElement
import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.expressions.* 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.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.FirThisReference 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.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
@@ -55,7 +55,7 @@ internal val FirResolvable.symbol: FirBasedSymbol<*>?
get() = when (val reference = calleeReference) { get() = when (val reference = calleeReference) {
is FirThisReference -> reference.boundSymbol is FirThisReference -> reference.boundSymbol
is FirResolvedNamedReference -> reference.resolvedSymbol is FirResolvedNamedReference -> reference.resolvedSymbol
is FirSimpleNamedReference -> reference.candidateSymbol is FirNamedReferenceWithCandidateBase -> reference.candidateSymbol
else -> null else -> null
} }
@@ -41,7 +41,7 @@ internal class FirComponentCallImpl(
override val componentIndex: Int, override val componentIndex: Int,
) : FirComponentCall() { ) : FirComponentCall() {
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) 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 val origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Operator
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { 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.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement 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.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirBackingFieldReference : FirResolvedNamedReference() { abstract class FirBackingFieldReference : FirResolvedNamedReference() {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBackingFieldSymbol abstract override val resolvedSymbol: FirBackingFieldSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitBackingFieldReference(this, data) 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.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement 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.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirDelegateFieldReference : FirResolvedNamedReference() { abstract class FirDelegateFieldReference : FirResolvedNamedReference() {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirDelegateFieldSymbol abstract override val resolvedSymbol: FirDelegateFieldSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDelegateFieldReference(this, data) 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.FirElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirErrorNamedReference : FirNamedReference(), FirDiagnosticHolder { abstract class FirErrorNamedReference : FirNamedReference(), FirDiagnosticHolder {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val diagnostic: ConeDiagnostic abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorNamedReference(this, data) 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.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirNamedReference : FirReference() { abstract class FirNamedReference : FirReference() {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract val name: Name abstract val name: Name
abstract val candidateSymbol: FirBasedSymbol<*>?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitNamedReference(this, data) 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 class FirResolvedCallableReference : FirResolvedNamedReference() {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBasedSymbol<*> abstract override val resolvedSymbol: FirBasedSymbol<*>
abstract val inferredTypeArguments: List<ConeKotlinType> abstract val inferredTypeArguments: List<ConeKotlinType>
abstract val mappedArguments: CallableReferenceMappedArguments abstract val mappedArguments: CallableReferenceMappedArguments
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedErrorReference : FirResolvedNamedReference(), FirDiagnosticHolder { abstract class FirResolvedErrorReference : FirResolvedNamedReference(), FirDiagnosticHolder {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract override val resolvedSymbol: FirBasedSymbol<*> abstract override val resolvedSymbol: FirBasedSymbol<*>
abstract override val diagnostic: ConeDiagnostic abstract override val diagnostic: ConeDiagnostic
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.*
abstract class FirResolvedNamedReference : FirNamedReference() { abstract class FirResolvedNamedReference : FirNamedReference() {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: FirBasedSymbol<*>?
abstract val resolvedSymbol: FirBasedSymbol<*> abstract val resolvedSymbol: FirBasedSymbol<*>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedNamedReference(this, data) 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.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.references.impl.FirBackingFieldReferenceImpl 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.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -25,13 +24,11 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirBackingFieldReferenceBuilder { class FirBackingFieldReferenceBuilder {
var source: KtSourceElement? = null var source: KtSourceElement? = null
var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var resolvedSymbol: FirBackingFieldSymbol lateinit var resolvedSymbol: FirBackingFieldSymbol
fun build(): FirBackingFieldReference { fun build(): FirBackingFieldReference {
return FirBackingFieldReferenceImpl( return FirBackingFieldReferenceImpl(
source, source,
candidateSymbol,
resolvedSymbol, resolvedSymbol,
) )
} }
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.references.impl.FirDelegateFieldReferenceImpl 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.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -25,13 +24,11 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirDelegateFieldReferenceBuilder { class FirDelegateFieldReferenceBuilder {
var source: KtSourceElement? = null var source: KtSourceElement? = null
var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var resolvedSymbol: FirDelegateFieldSymbol lateinit var resolvedSymbol: FirDelegateFieldSymbol
fun build(): FirDelegateFieldReference { fun build(): FirDelegateFieldReference {
return FirDelegateFieldReferenceImpl( return FirDelegateFieldReferenceImpl(
source, source,
candidateSymbol,
resolvedSymbol, resolvedSymbol,
) )
} }
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl 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.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -25,13 +24,11 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirErrorNamedReferenceBuilder { class FirErrorNamedReferenceBuilder {
var source: KtSourceElement? = null var source: KtSourceElement? = null
var candidateSymbol: FirBasedSymbol<*>? = null
lateinit var diagnostic: ConeDiagnostic lateinit var diagnostic: ConeDiagnostic
fun build(): FirErrorNamedReference { fun build(): FirErrorNamedReference {
return FirErrorNamedReferenceImpl( return FirErrorNamedReferenceImpl(
source, source,
candidateSymbol,
diagnostic, diagnostic,
) )
} }
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference 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.fir.visitors.*
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -26,14 +25,12 @@ import org.jetbrains.kotlin.name.Name
class FirSimpleNamedReferenceBuilder { class FirSimpleNamedReferenceBuilder {
var source: KtSourceElement? = null var source: KtSourceElement? = null
lateinit var name: Name lateinit var name: Name
var candidateSymbol: FirBasedSymbol<*>? = null
@OptIn(FirImplementationDetail::class) @OptIn(FirImplementationDetail::class)
fun build(): FirNamedReference { fun build(): FirNamedReference {
return FirSimpleNamedReference( return FirSimpleNamedReference(
source, source,
name, name,
candidateSymbol,
) )
} }
@@ -9,7 +9,6 @@ package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference 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.fir.symbols.impl.FirBackingFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirBackingFieldReferenceImpl( internal class FirBackingFieldReferenceImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override val candidateSymbol: FirBasedSymbol<*>?,
override val resolvedSymbol: FirBackingFieldSymbol, override val resolvedSymbol: FirBackingFieldSymbol,
) : FirBackingFieldReference() { ) : FirBackingFieldReference() {
override val name: Name get() = Name.identifier("\$field") 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.KtSourceElement
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference 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.fir.symbols.impl.FirDelegateFieldSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirDelegateFieldReferenceImpl( internal class FirDelegateFieldReferenceImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override val candidateSymbol: FirBasedSymbol<*>?,
override val resolvedSymbol: FirDelegateFieldSymbol, override val resolvedSymbol: FirDelegateFieldSymbol,
) : FirDelegateFieldReference() { ) : FirDelegateFieldReference() {
override val name: Name get() = Name.identifier("\$delegate") 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.KtSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +20,6 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirErrorNamedReferenceImpl( internal class FirErrorNamedReferenceImpl(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override val candidateSymbol: FirBasedSymbol<*>?,
override val diagnostic: ConeDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirErrorNamedReference() { ) : FirErrorNamedReference() {
override val name: Name = Name.special("<${diagnostic.reason}>") override val name: Name = Name.special("<${diagnostic.reason}>")
@@ -24,8 +24,6 @@ class FirPropertyFromParameterResolvedNamedReference @FirImplementationDetail co
override val name: Name, override val name: Name,
override val resolvedSymbol: FirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() { ) : FirResolvedNamedReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyFromParameterResolvedNamedReference { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyFromParameterResolvedNamedReference {
@@ -27,8 +27,6 @@ internal class FirResolvedCallableReferenceImpl(
override val inferredTypeArguments: MutableList<ConeKotlinType>, override val inferredTypeArguments: MutableList<ConeKotlinType>,
override val mappedArguments: CallableReferenceMappedArguments, override val mappedArguments: CallableReferenceMappedArguments,
) : FirResolvedCallableReference() { ) : FirResolvedCallableReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedCallableReferenceImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedCallableReferenceImpl {
@@ -25,8 +25,6 @@ internal class FirResolvedErrorReferenceImpl(
override val resolvedSymbol: FirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
override val diagnostic: ConeDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirResolvedErrorReference() { ) : FirResolvedErrorReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedErrorReferenceImpl { override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedErrorReferenceImpl {
@@ -23,8 +23,6 @@ internal class FirResolvedNamedReferenceImpl(
override val name: Name, override val name: Name,
override val resolvedSymbol: FirBasedSymbol<*>, override val resolvedSymbol: FirBasedSymbol<*>,
) : FirResolvedNamedReference() { ) : FirResolvedNamedReference() {
override val candidateSymbol: FirBasedSymbol<*>? get() = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedNamedReferenceImpl { 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.KtSourceElement
import org.jetbrains.kotlin.fir.FirImplementationDetail import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -19,10 +18,9 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY * DO NOT MODIFY IT MANUALLY
*/ */
open class FirSimpleNamedReference @FirImplementationDetail constructor( class FirSimpleNamedReference @FirImplementationDetail constructor(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override val name: Name, override val name: Name,
override val candidateSymbol: FirBasedSymbol<*>?,
) : FirNamedReference() { ) : FirNamedReference() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {} 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.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference 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.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference 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 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 visitSuperReference(superReference: FirSuperReference, data: D): R = visitReference(superReference, data)
override fun visitThisReference(thisReference: FirThisReference, data: D): R = visitReference(thisReference, 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.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference 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.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -262,6 +263,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
override fun visitNamedReference(namedReference: FirNamedReference) = visitReference(namedReference) override fun visitNamedReference(namedReference: FirNamedReference) = visitReference(namedReference)
override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) = visitNamedReference(namedReferenceWithCandidateBase)
override fun visitSuperReference(superReference: FirSuperReference) = visitReference(superReference) override fun visitSuperReference(superReference: FirSuperReference) = visitReference(superReference)
override fun visitThisReference(thisReference: FirThisReference) = visitReference(thisReference) 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.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference 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.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -633,6 +634,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(namedReference, data) return transformElement(namedReference, data)
} }
open fun transformNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: D): FirReference {
return transformElement(namedReferenceWithCandidateBase, data)
}
open fun transformErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): FirReference { open fun transformErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): FirReference {
return transformElement(errorNamedReference, data) return transformElement(errorNamedReference, data)
} }
@@ -1201,6 +1206,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformNamedReference(namedReference, data) 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 { final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): FirReference {
return transformErrorNamedReference(errorNamedReference, data) 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.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference 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.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference 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 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 visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): R = visitElement(errorNamedReference, data)
open fun visitSuperReference(superReference: FirSuperReference, data: D): R = visitElement(superReference, 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.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference 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.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -632,6 +633,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(namedReference) visitElement(namedReference)
} }
open fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) {
visitElement(namedReferenceWithCandidateBase)
}
open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) { open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
visitElement(errorNamedReference) visitElement(errorNamedReference)
} }
@@ -1200,6 +1205,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitNamedReference(namedReference) visitNamedReference(namedReference)
} }
final override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: Nothing?) {
visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase)
}
final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: Nothing?) { final override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: Nothing?) {
visitErrorNamedReference(errorNamedReference) visitErrorNamedReference(errorNamedReference)
} }
@@ -782,12 +782,15 @@ class FirRenderer(
} }
override fun visitNamedReference(namedReference: FirNamedReference) { override fun visitNamedReference(namedReference: FirNamedReference) {
val symbol = namedReference.candidateSymbol print("${namedReference.name}#")
when { }
namedReference is FirErrorNamedReference -> print("<${namedReference.diagnostic.reason}>#")
symbol != null -> print("R?C|${symbol.render()}|") override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) {
else -> print("${namedReference.name}#") print("R?C|${namedReferenceWithCandidateBase.candidateSymbol.render()}|")
} }
override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
print("<${errorNamedReference.diagnostic.reason}>#")
} }
override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference) { override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference) {
@@ -1063,10 +1066,6 @@ class FirRenderer(
binaryLogicExpression.rightOperand.accept(this) binaryLogicExpression.rightOperand.accept(this)
} }
override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
visitNamedReference(errorNamedReference)
}
override fun visitEffectDeclaration(effectDeclaration: FirEffectDeclaration) { override fun visitEffectDeclaration(effectDeclaration: FirEffectDeclaration) {
contractRenderer?.render(effectDeclaration) contractRenderer?.render(effectDeclaration)
} }
@@ -152,6 +152,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val wrappedDelegateExpression by element(Expression, wrappedExpression) val wrappedDelegateExpression by element(Expression, wrappedExpression)
val namedReference by element(Reference, reference) val namedReference by element(Reference, reference)
val namedReferenceWithCandidateBase by element(Reference, namedReference)
val errorNamedReference by element(Reference, namedReference, diagnosticHolder) val errorNamedReference by element(Reference, namedReference, diagnosticHolder)
val superReference by element(Reference, reference) val superReference by element(Reference, reference)
val thisReference by element(Reference, reference) val thisReference by element(Reference, reference)
@@ -111,7 +111,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(callableReferenceAccess) impl(callableReferenceAccess)
impl(componentCall) { impl(componentCall) {
default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"), null)") default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"))")
useTypes(simpleNamedReferenceType, nameType) useTypes(simpleNamedReferenceType, nameType)
optInToInternals() optInToInternals()
} }
@@ -404,27 +404,22 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
} }
} }
impl(resolvedNamedReference) { impl(resolvedNamedReference)
defaultNull("candidateSymbol", withGetter = true)
}
impl(resolvedNamedReference, "FirPropertyFromParameterResolvedNamedReference") { impl(resolvedNamedReference, "FirPropertyFromParameterResolvedNamedReference") {
defaultNull("candidateSymbol", withGetter = true)
publicImplementation() publicImplementation()
} }
impl(resolvedErrorReference) { impl(resolvedErrorReference)
defaultNull("candidateSymbol", withGetter = true)
}
impl(resolvedCallableReference) { impl(resolvedCallableReference)
defaultNull("candidateSymbol", withGetter = true)
}
impl(namedReference, "FirSimpleNamedReference") { impl(namedReference, "FirSimpleNamedReference") {
kind = OpenClass publicImplementation()
} }
noImpl(namedReferenceWithCandidateBase)
impl(delegateFieldReference) { impl(delegateFieldReference) {
default("name") { default("name") {
value = "Name.identifier(\"\\\$delegate\")" value = "Name.identifier(\"\\\$delegate\")"
@@ -620,7 +620,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
namedReference.configure { namedReference.configure {
+name +name
+field("candidateSymbol", firBasedSymbolType, "*", nullable = true) }
namedReferenceWithCandidateBase.configure {
+field("candidateSymbol", firBasedSymbolType, "*")
} }
resolvedNamedReference.configure { resolvedNamedReference.configure {
@@ -67,7 +67,6 @@ class FirAssignmentPluginAssignAltererExtension(
calleeReference = buildSimpleNamedReference { calleeReference = buildSimpleNamedReference {
source = variableAssignment.source source = variableAssignment.source
name = ASSIGN_METHOD name = ASSIGN_METHOD
candidateSymbol = null
} }
origin = FirFunctionCallOrigin.Regular origin = FirFunctionCallOrigin.Regular
} }