[FIR] Add FirPropertyAccessExpression that inherits FirQualifiedAccessExpression

This commit is contained in:
Ivan Kochurkin
2021-08-11 19:02:13 +03:00
parent 0fb398d45e
commit 8d764fa50e
56 changed files with 201 additions and 101 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
@@ -112,6 +113,10 @@ object FirFunctionParameterChecker : FirFunctionChecker() {
)
}
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) {
visitQualifiedAccessExpression(propertyAccessExpression)
}
})
}
}
@@ -110,6 +110,10 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
checkReceiversOfQualifiedAccessExpression(qualifiedAccessExpression, targetSymbol, data)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: CheckerContext) {
visitQualifiedAccessExpression(propertyAccessExpression, data)
}
override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: CheckerContext) {
val propertySymbol = variableAssignment.calleeReference.toResolvedCallableSymbol() as? FirPropertySymbol ?: return
val setterSymbol = propertySymbol.setterSymbol ?: return
@@ -200,6 +200,10 @@ abstract class AbstractDiagnosticCollectorVisitor(
visitWithQualifiedAccessOrAnnotationCall(qualifiedAccessExpression)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: Nothing?) {
visitWithQualifiedAccessOrAnnotationCall(propertyAccessExpression)
}
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) {
visitWithQualifiedAccessOrAnnotationCall(annotationCall)
}
@@ -37,6 +37,10 @@ class ExpressionCheckersDiagnosticComponent(
checkers.allQualifiedAccessExpressionCheckers.check(qualifiedAccessExpression, data, reporter)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: CheckerContext) {
checkers.allQualifiedAccessExpressionCheckers.check(propertyAccessExpression, data, reporter)
}
override fun visitFunctionCall(functionCall: FirFunctionCall, data: CheckerContext) {
checkers.allFunctionCallCheckers.check(functionCall, data, reporter)
}
@@ -80,6 +80,10 @@ internal object FirToConstantValueTransformer : FirDefaultVisitor<ConstantValue<
return EnumValue(outerClassId, enumEntry.name)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: Nothing?): ConstantValue<*>? {
return visitQualifiedAccessExpression(propertyAccessExpression, data)
}
override fun visitFunctionCall(
functionCall: FirFunctionCall,
data: Nothing?
@@ -61,6 +61,8 @@ class Fir2IrImplicitCastInserter(
override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: IrElement): IrElement = data
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: IrElement): IrElement = data
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: IrElement): IrElement = data
override fun visitGetClassCall(getClassCall: FirGetClassCall, data: IrElement): IrElement = data
@@ -383,6 +383,10 @@ class Fir2IrVisitor(
return callGenerator.convertToIrCall(qualifiedAccessExpression, qualifiedAccessExpression.typeRef, explicitReceiverExpression)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: Any?): IrElement {
return visitQualifiedAccessExpression(propertyAccessExpression, data)
}
// Note that this mimics psi2ir [StatementGenerator#isThisForClassPhysicallyAvailable].
private fun isThisForClassPhysicallyAvailable(irClass: IrClass): Boolean {
var lastClass = conversionScope.lastClass()
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.modality
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
import org.jetbrains.kotlin.fir.java.declarations.FirJavaClass
import org.jetbrains.kotlin.fir.java.declarations.FirJavaField
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
@@ -304,7 +304,7 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String):
val name = Name.identifier(value)
val firEnumEntry = firElement.collectEnumEntries().find { it.name == name }
return if (firEnumEntry != null) buildQualifiedAccessExpression {
return if (firEnumEntry != null) buildPropertyAccessExpression {
calleeReference = buildResolvedNamedReference {
this.name = name
resolvedSymbol = firEnumEntry.symbol
@@ -314,7 +314,7 @@ internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String):
it.isStatic && it.modality == Modality.FINAL && it.name == name
}
if (firStaticProperty != null) {
buildQualifiedAccessExpression {
buildPropertyAccessExpression {
calleeReference = buildResolvedNamedReference {
this.name = name
resolvedSymbol = firStaticProperty.symbol
@@ -645,7 +645,7 @@ class ExpressionsConverter(
context.calleeNamesForLambda.removeLast()
}
} else {
FirQualifiedAccessExpressionBuilder().apply {
FirPropertyAccessExpressionBuilder().apply {
this.source = source
this.calleeReference = calleeReference
}
@@ -971,7 +971,7 @@ class ExpressionsConverter(
} else {
nameSource.fakeElement(FirFakeSourceElementKind.ReferenceInAtomicQualifiedAccess)
}
return buildQualifiedAccessExpression {
return buildPropertyAccessExpression {
val rawText = referenceExpression.asText
if (rawText.isUnderscore) {
nonFatalDiagnostics.add(ConeUnderscoreUsageWithoutBackticks(nameSource))
@@ -1350,7 +1350,7 @@ class ExpressionsConverter(
}
}
return buildQualifiedAccessExpression {
return buildPropertyAccessExpression {
source = superExpression.toFirSourceElement()
calleeReference = buildExplicitSuperReference {
labelName = label
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
import org.jetbrains.kotlin.fir.declarations.utils.isFromVararg
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.Modifier
import org.jetbrains.kotlin.fir.references.builder.buildPropertyFromParameterResolvedNamedReference
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
@@ -54,7 +54,7 @@ class ValueParameter(
origin = FirDeclarationOrigin.Source
returnTypeRef = type.copyWithNewSourceKind(FirFakeSourceElementKind.PropertyFromParameter)
this.name = name
initializer = buildQualifiedAccessExpression {
initializer = buildPropertyAccessExpression {
source = propertySource
calleeReference = buildPropertyFromParameterResolvedNamedReference {
source = propertySource
@@ -496,7 +496,7 @@ open class RawFirBuilder(
returnTypeRef = type.copyWithNewSourceKind(FirFakeSourceElementKind.PropertyFromParameter)
receiverTypeRef = null
name = propertyName
initializer = buildQualifiedAccessExpression {
initializer = buildPropertyAccessExpression {
source = propertySource
calleeReference = buildPropertyFromParameterResolvedNamedReference {
source = propertySource
@@ -2150,7 +2150,7 @@ open class RawFirBuilder(
val (calleeReference, explicitReceiver, isImplicitInvoke) = splitToCalleeAndReceiver(expression.calleeExpression, source)
val result: FirQualifiedAccessBuilder = if (expression.valueArgumentList == null && expression.lambdaArguments.isEmpty()) {
FirQualifiedAccessExpressionBuilder().apply {
FirPropertyAccessExpressionBuilder().apply {
this.source = source
this.calleeReference = calleeReference
}
@@ -2236,7 +2236,7 @@ open class RawFirBuilder(
override fun visitSuperExpression(expression: KtSuperExpression, data: Unit): FirElement {
val superType = expression.superTypeQualifier
val theSource = expression.toFirSourceElement()
return buildQualifiedAccessExpression {
return buildPropertyAccessExpression {
this.source = theSource
calleeReference = buildExplicitSuperReference {
source = theSource.fakeElement(FirFakeSourceElementKind.ReferenceInAtomicQualifiedAccess)
@@ -1091,7 +1091,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
classTypeRefWithCorrectSourceKind: FirTypeRef,
firPropertyReturnTypeRefWithCorrectSourceKind: FirTypeRef
) =
buildQualifiedAccessExpression {
buildPropertyAccessExpression {
source = parameterSource
typeRef = firPropertyReturnTypeRefWithCorrectSourceKind
dispatchReceiver = buildThisReceiverExpression {
@@ -1185,7 +1185,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
containingClassForStaticMemberAttr = currentDispatchReceiverType.lookupTag
}
private fun FirVariable.toQualifiedAccess(): FirQualifiedAccessExpression = buildQualifiedAccessExpression {
private fun FirVariable.toQualifiedAccess(): FirQualifiedAccessExpression = buildPropertyAccessExpression {
calleeReference = buildResolvedNamedReference {
source = this@toQualifiedAccess.source?.fakeElement(FirFakeSourceElementKind.ReferenceInAtomicQualifiedAccess)
name = this@toQualifiedAccess.name
@@ -254,7 +254,7 @@ fun generateAccessExpression(
name: Name,
diagnostic: ConeDiagnostic? = null
): FirQualifiedAccessExpression =
buildQualifiedAccessExpression {
buildPropertyAccessExpression {
this.source = qualifiedSource
calleeReference = buildSimpleNamedReference {
this.source = if (calleeReferenceSource == qualifiedSource)
@@ -269,7 +269,7 @@ fun generateAccessExpression(
}
fun generateResolvedAccessExpression(source: FirSourceElement?, variable: FirVariable): FirQualifiedAccessExpression =
buildQualifiedAccessExpression {
buildPropertyAccessExpression {
this.source = source
calleeReference = buildResolvedNamedReference {
this.source = source
@@ -362,7 +362,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
else -> buildConstExpression(null, ConstantValueKind.Null, null)
}
fun delegateAccess() = buildQualifiedAccessExpression {
fun delegateAccess() = buildPropertyAccessExpression {
source = fakeSource
calleeReference = buildDelegateFieldReference {
resolvedSymbol = delegateFieldSymbol
@@ -481,7 +481,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
argumentList = buildArgumentList {
arguments += thisRef()
arguments += propertyRef()
arguments += buildQualifiedAccessExpression {
arguments += buildPropertyAccessExpression {
calleeReference = buildResolvedNamedReference {
source = fakeSource
name = DELEGATED_SETTER_PARAM
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildResolvedReifiedParameterReference
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.references.builder.buildBackingFieldReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
@@ -287,7 +286,7 @@ class FirCallResolver(
nameReference.source,
qualifiedAccess.explicitReceiver,
referencedSymbol,
(qualifiedAccess as? FirQualifiedAccessExpressionImpl)?.nonFatalDiagnostics
(qualifiedAccess as? FirPropertyAccessExpression)?.nonFatalDiagnostics
)
)
}
@@ -124,12 +124,10 @@ class CandidateFactory private constructor(
fun PostponedArgumentsAnalyzerContext.addSubsystemFromExpression(statement: FirStatement) {
when (statement) {
is FirFunctionCall,
is FirQualifiedAccessExpression,
is FirWhenExpression,
is FirTryExpression,
is FirCheckNotNullCall,
is FirCallableReferenceAccess,
is FirElvisExpression
-> (statement as FirResolvable).candidate()?.let { addOtherSystem(it.system.asReadOnlyStorage()) }
@@ -8,10 +8,9 @@ package org.jetbrains.kotlin.fir.resolve.calls.tower
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirPropertyAccessExpressionBuilder
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
@@ -278,7 +277,7 @@ private fun BodyResolveComponents.createExplicitReceiverForInvokeByCallable(
extensionReceiverExpression: FirExpression,
symbol: FirCallableSymbol<*>
): FirExpression {
return FirQualifiedAccessExpressionBuilder().apply {
return FirPropertyAccessExpressionBuilder().apply {
calleeReference = FirNamedReferenceWithCandidate(
null,
symbol.callableId.callableName,
@@ -170,6 +170,13 @@ class FirCallCompletionResultsWriterTransformer(
return result
}
override fun transformPropertyAccessExpression(
propertyAccessExpression: FirPropertyAccessExpression,
data: ExpectedArgumentType?
): FirStatement {
return transformQualifiedAccessExpression(propertyAccessExpression, data)
}
override fun transformFunctionCall(functionCall: FirFunctionCall, data: ExpectedArgumentType?): FirStatement {
val calleeReference = functionCall.calleeReference as? FirNamedReferenceWithCandidate
?: return functionCall
@@ -406,6 +413,10 @@ class FirCallCompletionResultsWriterTransformer(
session.lookupTracker?.recordTypeResolveAsLookup(resolvedTypeRef, qualifiedAccessExpression.source, null)
return qualifiedAccessExpression
}
override fun transformPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: Any?): FirStatement {
return transformQualifiedAccessExpression(propertyAccessExpression, data)
}
}
private fun FirTypeRef.substitute(candidate: Candidate): ConeKotlinType =
@@ -103,6 +103,13 @@ open class FirBodyResolveTransformer(
return expressionsTransformer.transformQualifiedAccessExpression(qualifiedAccessExpression, data)
}
override fun transformPropertyAccessExpression(
propertyAccessExpression: FirPropertyAccessExpression,
data: ResolutionMode
): FirStatement {
return expressionsTransformer.transformQualifiedAccessExpression(propertyAccessExpression, data)
}
override fun transformFunctionCall(functionCall: FirFunctionCall, data: ResolutionMode): FirStatement {
return expressionsTransformer.transformFunctionCall(functionCall, data)
}
@@ -153,6 +153,13 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
return result
}
override fun transformPropertyAccessExpression(
propertyAccessExpression: FirPropertyAccessExpression,
data: ResolutionMode
): FirStatement {
return transformQualifiedAccessExpression(propertyAccessExpression, data)
}
protected open fun resolveQualifiedAccessAndSelectCandidate(qualifiedAccessExpression: FirQualifiedAccessExpression): FirStatement {
return callResolver.resolveVariableAccessAndSelectCandidate(qualifiedAccessExpression)
}
@@ -138,6 +138,13 @@ class ConeEffectExtractor(
return toValueParameterReference(type, index, name)
}
override fun visitPropertyAccessExpression(
propertyAccessExpression: FirPropertyAccessExpression,
data: Nothing?
): ConeContractDescriptionElement? {
return visitQualifiedAccessExpression(propertyAccessExpression, data)
}
private fun toValueParameterReference(
type: ConeKotlinType,
index: Int,
@@ -43,7 +43,6 @@ class FirIntegerOperatorCall @FirImplementationDetail constructor(
explicitReceiver,
dispatchReceiver,
extensionReceiver,
mutableListOf(),
argumentList,
calleeReference,
FirFunctionCallOrigin.Operator
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -28,7 +27,6 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val calleeReference: FirNamedReference
abstract val hasQuestionMarkAtLHS: Boolean
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -27,7 +26,6 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override val typeArguments: List<FirTypeProjection>
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract override val origin: FirFunctionCallOrigin
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -30,7 +29,6 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract val originalExpression: FirQualifiedAccessExpression
abstract val typesFromSmartCast: Collection<ConeKotlinType>
abstract val originalType: FirTypeRef
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -30,7 +29,6 @@ abstract class FirExpressionWithSmartcastToNull : FirExpressionWithSmartcast() {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val isStable: Boolean
abstract override val originalExpression: FirQualifiedAccessExpression
abstract override val typesFromSmartCast: Collection<ConeKotlinType>
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -28,7 +27,6 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract val origin: FirFunctionCallOrigin
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -28,7 +27,6 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract override val origin: FirFunctionCallOrigin
@@ -0,0 +1,61 @@
/*
* Copyright 2010-2021 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.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val calleeReference: FirReference
abstract override val typeArguments: List<FirTypeProjection>
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract val nonFatalDiagnostics: List<ConeDiagnostic>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitPropertyAccessExpression(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformPropertyAccessExpression(this, data) as E
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
}
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -28,7 +27,6 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract val nonFatalDiagnostics: List<ConeDiagnostic>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccessExpression(this, data)
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
@@ -28,7 +27,6 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val calleeReference: FirThisReference
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReceiverExpression(this, data)
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions.builder
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -35,7 +34,6 @@ interface FirAbstractFunctionCallBuilder : FirQualifiedAccessBuilder, FirCallBui
abstract override var source: FirSourceElement?
abstract override var argumentList: FirArgumentList
abstract var typeRef: FirTypeRef
abstract val nonFatalDiagnostics: MutableList<ConeDiagnostic>
abstract var calleeReference: FirNamedReference
abstract var origin: FirFunctionCallOrigin
override fun build(): FirFunctionCall
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -39,7 +38,6 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotati
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
lateinit var calleeReference: FirNamedReference
var hasQuestionMarkAtLHS: Boolean = false
@@ -52,7 +50,6 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotati
explicitReceiver,
dispatchReceiver,
extensionReceiver,
nonFatalDiagnostics,
calleeReference,
hasQuestionMarkAtLHS,
)
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
@@ -42,7 +41,6 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F
val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
var dispatchReceiver: FirExpression = FirNoReceiverExpression
var extensionReceiver: FirExpression = FirNoReceiverExpression
val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList
lateinit var explicitReceiver: FirExpression
var componentIndex: Int by kotlin.properties.Delegates.notNull<Int>()
@@ -54,7 +52,6 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F
typeArguments,
dispatchReceiver,
extensionReceiver,
nonFatalDiagnostics,
argumentList,
explicitReceiver,
componentIndex,
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
@@ -42,7 +41,6 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference
override var origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Regular
@@ -57,7 +55,6 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
explicitReceiver,
dispatchReceiver,
extensionReceiver,
nonFatalDiagnostics,
argumentList,
calleeReference,
origin,
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
@@ -41,7 +40,6 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference
@@ -53,7 +51,6 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
explicitReceiver,
dispatchReceiver,
extensionReceiver,
nonFatalDiagnostics,
argumentList,
calleeReference,
)
@@ -13,11 +13,11 @@ import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirPropertyAccessExpressionImpl
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
@FirBuilderDsl
class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
class FirPropertyAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
@@ -42,8 +42,8 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota
val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
@OptIn(FirImplementationDetail::class)
override fun build(): FirQualifiedAccessExpression {
return FirQualifiedAccessExpressionImpl(
override fun build(): FirPropertyAccessExpression {
return FirPropertyAccessExpressionImpl(
source,
typeRef,
annotations,
@@ -59,9 +59,9 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota
}
@OptIn(ExperimentalContracts::class)
inline fun buildQualifiedAccessExpression(init: FirQualifiedAccessExpressionBuilder.() -> Unit): FirQualifiedAccessExpression {
inline fun buildPropertyAccessExpression(init: FirPropertyAccessExpressionBuilder.() -> Unit): FirPropertyAccessExpression {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
return FirQualifiedAccessExpressionBuilder().apply(init).build()
return FirPropertyAccessExpressionBuilder().apply(init).build()
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
@@ -36,7 +35,6 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
lateinit var calleeReference: FirThisReference
override fun build(): FirThisReceiverExpression {
@@ -45,7 +43,6 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
typeRef,
annotations,
typeArguments,
nonFatalDiagnostics,
calleeReference,
)
}
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -30,7 +29,6 @@ internal class FirCallableReferenceAccessImpl(
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
override var calleeReference: FirNamedReference,
override var hasQuestionMarkAtLHS: Boolean,
) : FirCallableReferenceAccess() {
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirComponentCall
@@ -34,7 +33,6 @@ internal class FirComponentCallImpl(
override val typeArguments: MutableList<FirTypeProjection>,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
override var argumentList: FirArgumentList,
override var explicitReceiver: FirExpression,
override val componentIndex: Int,
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -32,7 +31,6 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference,
override val origin: FirFunctionCallOrigin,
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -32,7 +31,6 @@ internal class FirImplicitInvokeCallImpl(
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference,
) : FirImplicitInvokeCall() {
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
class FirQualifiedAccessExpressionImpl @FirImplementationDetail constructor(
class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
override var source: FirSourceElement?,
override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
@@ -31,7 +31,7 @@ class FirQualifiedAccessExpressionImpl @FirImplementationDetail constructor(
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
) : FirQualifiedAccessExpression() {
) : FirPropertyAccessExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
annotations.forEach { it.accept(visitor, data) }
@@ -46,7 +46,7 @@ class FirQualifiedAccessExpressionImpl @FirImplementationDetail constructor(
}
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
typeRef = typeRef.transform(transformer, data)
transformAnnotations(transformer, data)
transformCalleeReference(transformer, data)
@@ -61,32 +61,32 @@ class FirQualifiedAccessExpressionImpl @FirImplementationDetail constructor(
return this
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
annotations.transformInplace(transformer, data)
return this
}
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
calleeReference = calleeReference.transform(transformer, data)
return this
}
override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
typeArguments.transformInplace(transformer, data)
return this
}
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
explicitReceiver = explicitReceiver?.transform(transformer, data)
return this
}
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
return this
}
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpressionImpl {
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpressionImpl {
extensionReceiver = extensionReceiver.transform(transformer, data)
return this
}
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
@@ -28,7 +27,6 @@ internal class FirThisReceiverExpressionImpl(
override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
override val typeArguments: MutableList<FirTypeProjection>,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
override var calleeReference: FirThisReference,
) : FirThisReceiverExpression() {
override var explicitReceiver: FirExpression? = null
@@ -86,6 +86,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -463,6 +464,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(qualifiedAccessExpression, data)
}
open fun transformPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): FirStatement {
return transformElement(propertyAccessExpression, data)
}
open fun transformFunctionCall(functionCall: FirFunctionCall, data: D): FirStatement {
return transformElement(functionCall, data)
}
@@ -975,6 +980,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformQualifiedAccessExpression(qualifiedAccessExpression, data)
}
final override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): FirStatement {
return transformPropertyAccessExpression(propertyAccessExpression, data)
}
final override fun visitFunctionCall(functionCall: FirFunctionCall, data: D): FirStatement {
return transformFunctionCall(functionCall, data)
}
@@ -86,6 +86,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -302,6 +303,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R = visitElement(qualifiedAccessExpression, data)
open fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: D): R = visitElement(propertyAccessExpression, data)
open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R = visitElement(functionCall, data)
open fun visitImplicitInvokeCall(implicitInvokeCall: FirImplicitInvokeCall, data: D): R = visitElement(implicitInvokeCall, data)
@@ -86,6 +86,7 @@ import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall
@@ -462,6 +463,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(qualifiedAccessExpression)
}
open fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) {
visitElement(propertyAccessExpression)
}
open fun visitFunctionCall(functionCall: FirFunctionCall) {
visitElement(functionCall)
}
@@ -974,6 +979,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitQualifiedAccessExpression(qualifiedAccessExpression)
}
final override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression, data: Nothing?) {
visitPropertyAccessExpression(propertyAccessExpression)
}
final override fun visitFunctionCall(functionCall: FirFunctionCall, data: Nothing?) {
visitFunctionCall(functionCall)
}
@@ -1209,6 +1209,10 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
qualifiedAccessExpression.typeArguments.renderTypeArguments()
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) {
visitQualifiedAccessExpression(propertyAccessExpression)
}
override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression) {
visitQualifiedAccessExpression(thisReceiverExpression)
}
@@ -19,7 +19,7 @@ class FirExpressionWithSmartcastBuilder {
lateinit var smartcastStability: SmartcastStability
fun build(): FirExpressionWithSmartcast {
return FirExpressionWithSmartcastImpl(originalExpression, smartcastType, typesFromSmartCast, smartcastStability, listOf())
return FirExpressionWithSmartcastImpl(originalExpression, smartcastType, typesFromSmartCast, smartcastStability)
}
}
@@ -25,8 +25,7 @@ class FirExpressionWithSmartcastToNullBuilder {
smartcastType,
typesFromSmartCast,
smartcastStability,
smartcastTypeWithoutNullableNothing,
listOf()
smartcastTypeWithoutNullableNothing
)
}
}
@@ -26,8 +26,7 @@ internal class FirExpressionWithSmartcastImpl(
override var originalExpression: FirQualifiedAccessExpression,
override val smartcastType: FirTypeRef,
override val typesFromSmartCast: Collection<ConeKotlinType>,
override val smartcastStability: SmartcastStability,
override val nonFatalDiagnostics: List<ConeDiagnostic>
override val smartcastStability: SmartcastStability
) : FirExpressionWithSmartcast() {
init {
assert(originalExpression.typeRef is FirResolvedTypeRef)
@@ -27,8 +27,7 @@ class FirExpressionWithSmartcastToNullImpl(
override val smartcastType: FirTypeRef,
override val typesFromSmartCast: Collection<ConeKotlinType>,
override val smartcastStability: SmartcastStability,
override val smartcastTypeWithoutNullableNothing: FirTypeRef,
override val nonFatalDiagnostics: List<ConeDiagnostic>
override val smartcastTypeWithoutNullableNothing: FirTypeRef
) : FirExpressionWithSmartcastToNull() {
init {
assert(originalExpression.typeRef is FirResolvedTypeRef)
@@ -126,6 +126,11 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
useTypes(stubReferenceType)
}
builder(propertyAccessExpression) {
parents += qualifiedAccessBuilder
defaultNoReceivers()
}
builder(callableReferenceAccess) {
parents += qualifiedAccessBuilder
defaultNull("explicitReceiver")
@@ -188,11 +193,6 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
builder(implicitInvokeCall, init = configurationForFunctionCallBuilder)
builder(qualifiedAccessExpression) {
parents += qualifiedAccessBuilder
defaultNoReceivers()
}
builder(getClassCall) {
parents += callBuilder
}
@@ -342,7 +342,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val elementsWithDefaultTypeRef = listOf(
thisReceiverExpression,
callableReferenceAccess,
qualifiedAccessExpression,
propertyAccessExpression,
functionCall,
anonymousFunction,
whenExpression,
@@ -106,6 +106,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val errorFunction = element("ErrorFunction", Declaration, function, diagnosticHolder)
val errorProperty = element("ErrorProperty", Declaration, variable, diagnosticHolder)
val qualifiedAccessExpression = element("QualifiedAccessExpression", Expression, expression, qualifiedAccess)
val propertyAccessExpression = element("PropertyAccessExpression", Expression, qualifiedAccessExpression)
val functionCall = element("FunctionCall", Expression, qualifiedAccessExpression, call)
val implicitInvokeCall = element("ImplicitInvokeCall", Expression, functionCall)
val delegatedConstructorCall = element("DelegatedConstructorCall", Expression, resolvable, call)
@@ -169,7 +169,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
default("origin", "FirFunctionCallOrigin.Operator")
}
impl(qualifiedAccessExpression) {
impl(propertyAccessExpression) {
publicImplementation()
}
@@ -542,7 +542,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
"FirTypeProjectionWithVarianceImpl",
"FirCallableReferenceAccessImpl",
"FirThisReceiverExpressionImpl",
"FirQualifiedAccessExpressionImpl",
"FirPropertyAccessExpressionImpl",
"FirFunctionCallImpl",
"FirAnonymousFunctionImpl",
"FirWhenExpressionImpl",
@@ -192,7 +192,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("source", sourceElementType, nullable = true, withReplace = true)
}
qualifiedAccessExpression.configure {
propertyAccessExpression.configure {
+fieldList("nonFatalDiagnostics", coneDiagnosticType)
}
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
@@ -304,6 +305,10 @@ class FirResolveBench(val withProgress: Boolean, val listener: BenchListener? =
visitElement(qualifiedAccessExpression)
}
override fun visitPropertyAccessExpression(propertyAccessExpression: FirPropertyAccessExpression) {
visitQualifiedAccessExpression(propertyAccessExpression)
}
override fun visitTypeRef(typeRef: FirTypeRef) {
unresolvedTypes++