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