From 688c2cf74f978a01224096fff7e700ca42703b87 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 11 Jun 2019 12:11:18 +0300 Subject: [PATCH] Optimization: make FIR expression an abstract class NB: this commit does significant fir:tree refactoring. It provides some boost due to faster abstract class dispatching in JVM. --- .../kotlin/fir/builder/ConversionUtils.kt | 2 +- .../kotlin/fir/builder/RawFirBuilder.kt | 6 +- .../org/jetbrains/kotlin/fir/FirRenderer.kt | 5 +- .../fir/declarations/FirAnonymousFunction.kt | 11 +- .../fir/declarations/FirAnonymousObject.kt | 10 +- .../kotlin/fir/declarations/FirEnumEntry.kt | 7 +- .../impl/FirAnonymousFunctionImpl.kt | 24 +-- .../impl/FirAnonymousObjectImpl.kt | 13 +- .../fir/declarations/impl/FirEnumEntryImpl.kt | 62 ++++-- .../fir/expressions/FirAnnotationCall.kt | 14 +- .../kotlin/fir/expressions/FirArrayOfCall.kt | 8 +- .../kotlin/fir/expressions/FirArraySetCall.kt | 18 +- .../kotlin/fir/expressions/FirBlock.kt | 10 +- .../fir/expressions/FirBreakExpression.kt | 8 +- .../kotlin/fir/expressions/FirCall.kt | 11 +- .../expressions/FirCallableReferenceAccess.kt | 7 +- .../FirClassReferenceExpression.kt | 10 +- .../fir/expressions/FirConstExpression.kt | 13 +- .../fir/expressions/FirContinueExpression.kt | 8 +- .../FirDelegatedConstructorCall.kt | 14 +- .../fir/expressions/FirErrorExpression.kt | 10 +- .../kotlin/fir/expressions/FirExpression.kt | 12 +- .../kotlin/fir/expressions/FirFunctionCall.kt | 12 +- .../kotlin/fir/expressions/FirGetClassCall.kt | 8 +- .../kotlin/fir/expressions/FirJump.kt | 9 +- .../kotlin/fir/expressions/FirOperatorCall.kt | 10 +- .../FirQualifiedAccessExpression.kt | 13 +- .../fir/expressions/FirResolvedQualifier.kt | 13 +- .../fir/expressions/FirReturnExpression.kt | 9 +- .../expressions/FirStringConcatenationCall.kt | 8 +- .../fir/expressions/FirThrowExpression.kt | 9 +- .../fir/expressions/FirTryExpression.kt | 14 +- .../fir/expressions/FirTypeOperatorCall.kt | 11 +- .../expressions/FirUncheckedNotNullCast.kt | 8 +- .../kotlin/fir/expressions/FirVariable.kt | 1 - .../fir/expressions/FirWhenExpression.kt | 15 +- .../expressions/FirWhenSubjectExpression.kt | 10 +- .../FirWrappedArgumentExpression.kt | 5 +- .../fir/expressions/impl/FirAbstractLoop.kt | 4 +- .../impl/FirAbstractQualifiedAccess.kt | 4 +- ...tStatement.kt => FirAnnotatedStatement.kt} | 2 +- .../expressions/impl/FirAnnotationCallImpl.kt | 4 +- .../expressions/impl/FirArrayOfCallImpl.kt | 2 +- .../expressions/impl/FirArraySetCallImpl.kt | 44 ++-- .../fir/expressions/impl/FirBlockImpl.kt | 4 +- .../impl/FirBreakExpressionImpl.kt | 2 +- ...ractCall.kt => FirCallWithArgumentList.kt} | 15 +- .../impl/FirCallableReferenceAccessImpl.kt | 17 +- .../impl/FirClassReferenceExpressionImpl.kt | 4 +- .../impl/FirConstExpressionImpl.kt | 2 +- .../impl/FirContinueExpressionImpl.kt | 2 +- .../impl/FirDelegatedConstructorCallImpl.kt | 7 +- .../impl/FirElseIfTrueCondition.kt | 13 +- .../impl/FirEmptyExpressionBlock.kt | 2 +- .../impl/FirErrorExpressionImpl.kt | 2 +- .../fir/expressions/impl/FirExpressionStub.kt | 3 +- .../expressions/impl/FirFunctionCallImpl.kt | 3 +- .../expressions/impl/FirGetClassCallImpl.kt | 2 +- ...{FirAbstractLoopJump.kt => FirLoopJump.kt} | 14 +- .../impl/FirModifiableQualifiedAccess.kt | 21 +- ...nBasedCall.kt => FirOperationBasedCall.kt} | 19 +- .../expressions/impl/FirOperatorCallImpl.kt | 3 +- .../impl/FirQualifiedAccessExpressionImpl.kt | 19 +- .../impl/FirResolvedQualifierImpl.kt | 2 +- .../impl/FirReturnExpressionImpl.kt | 8 +- .../impl/FirSingleExpressionBlock.kt | 4 +- .../impl/FirStringConcatenationCallImpl.kt | 12 +- .../impl/FirThrowExpressionImpl.kt | 8 +- .../expressions/impl/FirTryExpressionImpl.kt | 9 +- .../impl/FirTypeOperatorCallImpl.kt | 4 +- .../impl/FirUncheckedNotNullCastImpl.kt | 4 +- .../fir/expressions/impl/FirUnitExpression.kt | 13 +- ... => FirUnknownTypeCallWithArgumentList.kt} | 7 +- ...ression.kt => FirUnknownTypeExpression.kt} | 11 +- .../expressions/impl/FirWhenExpressionImpl.kt | 4 +- .../impl/FirWhenSubjectExpressionImpl.kt | 2 +- .../fir/visitors/FirTransformerGenerated.kt | 196 +++++++++++------- .../fir/visitors/FirVisitorGenerated.kt | 170 ++++++++------- .../fir/visitors/FirVisitorVoidGenerated.kt | 196 +++++++++++------- 79 files changed, 839 insertions(+), 463 deletions(-) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/{FirAbstractStatement.kt => FirAnnotatedStatement.kt} (92%) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/{FirAbstractCall.kt => FirCallWithArgumentList.kt} (66%) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/{FirAbstractLoopJump.kt => FirLoopJump.kt} (61%) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/{FirAbstractOperationBasedCall.kt => FirOperationBasedCall.kt} (56%) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/{FirAbstractBlock.kt => FirUnknownTypeCallWithArgumentList.kt} (80%) rename compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/{FirAbstractExpression.kt => FirUnknownTypeExpression.kt} (71%) diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 1ffe0552d21..5a3df688a7c 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -474,7 +474,7 @@ internal fun generateTemporaryVariable( session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression ): FirVariable = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer) -private fun FirModifiableQualifiedAccess.initializeLValue( +private fun FirModifiableQualifiedAccess<*>.initializeLValue( session: FirSession, left: KtExpression?, convertQualified: KtQualifiedExpression.() -> FirQualifiedAccess? diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index a41d4ac83f6..f7e46fa5317 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -314,7 +314,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { } } - private fun KtCallElement.extractArgumentsTo(container: FirAbstractCall) { + private fun KtCallElement.extractArgumentsTo(container: FirCallWithArgumentList) { for (argument in this.valueArguments) { val argumentExpression = argument.toFirExpression() container.arguments += when (argument) { @@ -1124,7 +1124,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { } } - private fun FirAbstractLoopJump.bindLabel(expression: KtExpressionWithLabel): FirAbstractLoopJump { + private fun FirLoopJump.bindLabel(expression: KtExpressionWithLabel): FirLoopJump { val labelName = expression.getLabelName() target = FirLoopTarget(labelName) val lastLoop = firLoops.lastOrNull() @@ -1301,7 +1301,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { val selector = expression.selectorExpression ?: return FirErrorExpressionImpl(session, expression, "Qualified expression without selector") val firSelector = selector.toFirExpression("Incorrect selector expression") - if (firSelector is FirModifiableQualifiedAccess) { + if (firSelector is FirModifiableQualifiedAccess<*>) { firSelector.safe = expression is KtSafeQualifiedExpression firSelector.explicitReceiver = expression.receiverExpression.toFirExpression("Incorrect receiver expression") } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index ed97bb44f4f..13ad60446a2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub +import org.jetbrains.kotlin.fir.expressions.impl.FirLoopJump import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol @@ -587,8 +588,8 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { whileLoop.block.accept(this) } - private fun visitLoopJump(jump: FirJump) { - val target = jump.target + override fun visitLoopJump(loopJump: FirLoopJump) { + val target = loopJump.target val labeledElement = target.labeledElement print("@@@[") labeledElement.condition.accept(this) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt index a267ff2f34c..6af35fc3869 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt @@ -5,14 +5,19 @@ package org.jetbrains.kotlin.fir.declarations +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirLabeledElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirAnonymousFunction : @VisitedSupertype FirFunction, FirExpression, FirTypedDeclaration, FirLabeledElement { - val receiverTypeRef: FirTypeRef? +abstract class FirAnonymousFunction( + session: FirSession, + psi: PsiElement? +) : @VisitedSupertype FirFunction, FirUnknownTypeExpression(session, psi), FirTypedDeclaration, FirLabeledElement { + abstract val receiverTypeRef: FirTypeRef? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousFunction(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt index 9f0d6a39ae6..b2f32735b4e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousObject.kt @@ -5,12 +5,18 @@ package org.jetbrains.kotlin.fir.declarations +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirAnonymousObject : @VisitedSupertype FirClass, FirExpression { +abstract class FirAnonymousObject( + session: FirSession, + psi: PsiElement? +) : @VisitedSupertype FirClass, FirUnknownTypeExpression(session, psi) { override val classKind: ClassKind get() = ClassKind.OBJECT @@ -19,6 +25,6 @@ interface FirAnonymousObject : @VisitedSupertype FirClass, FirExpression { override fun acceptChildren(visitor: FirVisitor, data: D) { super.acceptChildren(visitor, data) - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt index b73a50a91c8..e9c0a4a8e0c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirEnumEntry.kt @@ -5,13 +5,18 @@ package org.jetbrains.kotlin.fir.declarations +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.BaseTransformedType +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.expressions.FirCall import org.jetbrains.kotlin.fir.visitors.FirVisitor @BaseTransformedType -interface FirEnumEntry : @VisitedSupertype FirRegularClass, FirCall { +abstract class FirEnumEntry( + session: FirSession, + psi: PsiElement? +) : @VisitedSupertype FirRegularClass, FirCall(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitEnumEntry(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt index 5b8f64bf335..2efd5b1d38c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt @@ -6,13 +6,11 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirLabel -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction -import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.declarations.FirValueParameter +import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirAnonymousFunctionImpl( @@ -20,21 +18,21 @@ class FirAnonymousFunctionImpl( psi: PsiElement?, override var returnTypeRef: FirTypeRef, override var receiverTypeRef: FirTypeRef? -) : FirAbstractFunction(session, psi), FirAnonymousFunction, FirModifiableFunction { - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) - +) : FirAnonymousFunction(session, psi), FirModifiableFunction { override var label: FirLabel? = null - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } + override val valueParameters = mutableListOf() + + override var body: FirBlock? = null override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) returnTypeRef = returnTypeRef.transformSingle(transformer, data) receiverTypeRef = receiverTypeRef?.transformSingle(transformer, data) label = label?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + valueParameters.transformInplace(transformer, data) + body = body?.transformSingle(transformer, data) + + return super.transformChildren(transformer, data) } override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt index 2975f9536c0..bf201c7d4d0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousObjectImpl.kt @@ -11,35 +11,26 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor class FirAnonymousObjectImpl( session: FirSession, psi: PsiElement? -) : FirAbstractAnnotatedDeclaration(session, psi), FirAnonymousObject, FirModifiableClass { - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) - +) : FirAnonymousObject(session, psi), FirModifiableClass { override val superTypeRefs = mutableListOf() override val declarations = mutableListOf() - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } - override fun accept(visitor: FirVisitor, data: D): R { return super.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) superTypeRefs.transformInplace(transformer, data) declarations.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt index f8a210cd417..7e737496fb0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirEnumEntryImpl.kt @@ -10,8 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirEnumEntry -import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -21,40 +20,63 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitEnumTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull class FirEnumEntryImpl( session: FirSession, psi: PsiElement?, - symbol: FirClassSymbol, - name: Name -) : FirClassImpl( - session, - psi, - symbol, - name, - visibility = Visibilities.UNKNOWN, - modality = Modality.FINAL, - isExpect = false, - isActual = false, - classKind = ClassKind.ENUM_ENTRY, - isInner = false, - isCompanion = false, - isData = false, - isInline = false -), FirEnumEntry { + override val symbol: FirClassSymbol, + override val name: Name +) : FirEnumEntry(session, psi), FirModifiableClass { + init { + symbol.bind(this) + } + + override var status = FirDeclarationStatusImpl(session, Visibilities.UNKNOWN, Modality.FINAL) + + override val classKind: ClassKind + get() = ClassKind.ENUM_ENTRY + + override val typeParameters = mutableListOf() + + override val superTypeRefs = mutableListOf() + + override val declarations = mutableListOf() + + override val companionObject: FirRegularClass? + get() = null + override var typeRef: FirTypeRef = FirImplicitEnumTypeRef(session, null) override val arguments = mutableListOf() + override fun replaceSupertypes(newSupertypes: List): FirRegularClass { + superTypeRefs.clear() + superTypeRefs.addAll(newSupertypes) + return this + } + override fun replaceTypeRef(newTypeRef: FirTypeRef) { typeRef = newTypeRef } + fun addDeclaration(declaration: FirDeclaration) { + declarations += declaration + } + override fun transformChildren(transformer: FirTransformer, data: D): FirRegularClass { + superTypeRefs.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + status = status.transformSingle(transformer, data) + + declarations.firstIsInstanceOrNull()?.typeParameters?.transformInplace(transformer, data) + // Transform declarations in last turn + declarations.transformInplace(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) arguments.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) as FirRegularClass } override fun transformArguments(transformer: FirTransformer, data: D): FirCall { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt index 3bdb03d50fa..023bf35b64a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAnnotationCall.kt @@ -5,8 +5,10 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget -import org.jetbrains.kotlin.fir.BaseTransformedType +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -14,12 +16,14 @@ import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.FqName -@BaseTransformedType -interface FirAnnotationCall : FirCall { - val annotationTypeRef: FirTypeRef +abstract class FirAnnotationCall( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeCallWithArgumentList(session, psi) { + abstract val annotationTypeRef: FirTypeRef // May be should be not-null (with correct default target) - val useSiteTarget: AnnotationUseSiteTarget? + abstract val useSiteTarget: AnnotationUseSiteTarget? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnnotationCall(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt index 9b571c897ab..a14c8d6a30f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArrayOfCall.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirArrayOfCall : FirCall { +abstract class FirArrayOfCall( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeCallWithArgumentList(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitArrayOfCall(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt index 4d0d1b6adad..bb02635a6cd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt @@ -5,12 +5,17 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirArraySetCall : @VisitedSupertype FirCall, FirAssignment { +abstract class FirArraySetCall( + session: FirSession, + psi: PsiElement? +) : @VisitedSupertype FirCall(session, psi), FirAssignment { // NB: arguments of this thing are indexes AND rvalue - val indexes: List + abstract val indexes: List override val arguments get() = indexes + rValue @@ -18,11 +23,8 @@ interface FirArraySetCall : @VisitedSupertype FirCall, FirAssignment { visitor.visitArraySetCall(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - for (index in indexes) { - index.accept(visitor, data) - } - acceptAnnotations(visitor, data) - typeRef.accept(visitor, data) - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) + calleeReference.accept(visitor, data) + rValue.accept(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt index 5c6037b2f10..5e0b49d97f1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBlock.kt @@ -5,10 +5,16 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirBlock : FirExpression { - val statements: List +abstract class FirBlock( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val statements: List override fun accept(visitor: FirVisitor, data: D): R = visitor.visitBlock(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt index 6585f735815..63ad1d8a5b1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirBreakExpression.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirLoopJump import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirBreakExpression : FirJump { +abstract class FirBreakExpression( + session: FirSession, + psi: PsiElement? +) : FirLoopJump(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitBreakExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt index 2dea4989307..7ec0581640a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCall.kt @@ -5,13 +5,18 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.BaseTransformedType +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor @BaseTransformedType -interface FirCall : FirExpression { - val arguments: List +abstract class FirCall( + session: FirSession, + psi: PsiElement? +) : FirExpression(session, psi) { + abstract val arguments: List override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCall(this, data) @@ -23,5 +28,5 @@ interface FirCall : FirExpression { super.acceptChildren(visitor, data) } - fun transformArguments(transformer: FirTransformer, data: D): FirCall + abstract fun transformArguments(transformer: FirTransformer, data: D): FirCall } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt index 3bee89d0e80..10902df7dcd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt @@ -5,9 +5,14 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirCallableReferenceAccess : FirQualifiedAccessExpression { +abstract class FirCallableReferenceAccess( + session: FirSession, + psi: PsiElement? +) : FirQualifiedAccessExpression(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCallableReferenceAccess(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt index 7b46904f834..9a9aad218b1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirClassReferenceExpression.kt @@ -5,11 +5,17 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirClassReferenceExpression : FirExpression { - val classTypeRef: FirTypeRef +abstract class FirClassReferenceExpression( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val classTypeRef: FirTypeRef override fun accept(visitor: FirVisitor, data: D): R = visitor.visitClassReferenceExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt index 32d89687d50..821070f17a6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirConstExpression.kt @@ -5,12 +5,19 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.ir.expressions.IrConstKind -interface FirConstExpression : FirExpression { - val kind: IrConstKind - val value: T +abstract class FirConstExpression( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val kind: IrConstKind + + abstract val value: T override fun accept(visitor: FirVisitor, data: D): R { return visitor.visitConstExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt index 297ec90e620..2a300284dbb 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirContinueExpression.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirLoopJump import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirContinueExpression : FirJump { +abstract class FirContinueExpression( + session: FirSession, + psi: PsiElement? +) : FirLoopJump(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitContinueExpression(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt index 0e0065b8942..aae24390fac 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt @@ -5,15 +5,21 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype +import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirDelegatedConstructorCall : @VisitedSupertype FirCall, FirQualifiedAccess { +abstract class FirDelegatedConstructorCall( + session: FirSession, + psi: PsiElement? +) : @VisitedSupertype FirCallWithArgumentList(session, psi), FirQualifiedAccess { // Do we need 'constructedType: FirType' here? - val constructedTypeRef: FirTypeRef + abstract val constructedTypeRef: FirTypeRef - val isThis: Boolean + abstract val isThis: Boolean val isSuper: Boolean get() = !isThis @@ -24,6 +30,6 @@ interface FirDelegatedConstructorCall : @VisitedSupertype FirCall, FirQualifiedA override fun acceptChildren(visitor: FirVisitor, data: D) { constructedTypeRef.accept(visitor, data) calleeReference.accept(visitor, data) - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt index 043db644031..66c145bd217 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirErrorExpression.kt @@ -5,10 +5,16 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirErrorExpression : FirExpression { - val reason: String +abstract class FirErrorExpression( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val reason: String override fun accept(visitor: FirVisitor, data: D): R { return visitor.visitErrorExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt index 435a764b25c..f7429942ce9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirExpression.kt @@ -5,15 +5,21 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirResolvedCallableReference +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirAnnotatedStatement import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirExpression : FirStatement { - val typeRef: FirTypeRef +abstract class FirExpression( + session: FirSession, + psi: PsiElement? +) : FirAnnotatedStatement(session, psi) { + abstract val typeRef: FirTypeRef - fun replaceTypeRef(newTypeRef: FirTypeRef) + abstract fun replaceTypeRef(newTypeRef: FirTypeRef) override fun accept(visitor: FirVisitor, data: D): R = visitor.visitExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt index 18000ddd6f9..d155b7c970b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt @@ -9,27 +9,25 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirNamedReference import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractCall +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer import org.jetbrains.kotlin.fir.visitors.FirVisitor abstract class FirFunctionCall( session: FirSession, psi: PsiElement? -) : FirAbstractCall(session, psi), @VisitedSupertype FirCall, FirQualifiedAccess, FirTypeProjectionContainer { +) : @VisitedSupertype FirUnknownTypeCallWithArgumentList(session, psi), FirQualifiedAccess, FirTypeProjectionContainer { abstract override val calleeReference: FirNamedReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFunctionCall(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - for (argument in arguments) { - argument.accept(visitor, data) - } + calleeReference.accept(visitor, data) + explicitReceiver?.accept(visitor, data) for (typeArgument in typeArguments) { typeArgument.accept(visitor, data) } - typeRef.accept(visitor, data) - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt index 119e35773a1..f43c20de1e7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirGetClassCall.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirGetClassCall : FirCall { +abstract class FirGetClassCall( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeCallWithArgumentList(session, psi) { val argument: FirExpression get() = arguments.first() override fun accept(visitor: FirVisitor, data: D): R = diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt index b2187f3e8c4..407a073b135 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirJump.kt @@ -5,12 +5,17 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirTarget import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirJump : FirExpression { - val target: FirTarget +abstract class FirJump( + session: FirSession, + psi: PsiElement? +) : FirExpression(session, psi) { + abstract val target: FirTarget override fun accept(visitor: FirVisitor, data: D): R = visitor.visitJump(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt index 3363e24e0a5..ae11f2af733 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperatorCall.kt @@ -5,10 +5,16 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirOperatorCall : FirCall { - val operation: FirOperation +abstract class FirOperatorCall( + session: FirSession, + psi: PsiElement? +) : FirCallWithArgumentList(session, psi) { + abstract val operation: FirOperation override fun accept(visitor: FirVisitor, data: D): R = visitor.visitOperatorCall(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt index f780e83c386..7186d1aa511 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt @@ -5,15 +5,22 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.VisitedSupertype +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirQualifiedAccessExpression : @VisitedSupertype FirQualifiedAccess, FirExpression { +abstract class FirQualifiedAccessExpression( + session: FirSession, + psi: PsiElement? +) : FirQualifiedAccess, @VisitedSupertype FirUnknownTypeExpression(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccessExpression(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - typeRef.accept(visitor, data) + calleeReference.accept(visitor, data) + explicitReceiver?.accept(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt index 2334d5d5ab0..6f93d8f6de5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirResolvedQualifier.kt @@ -5,16 +5,23 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -interface FirResolvedQualifier : FirExpression { +abstract class FirResolvedQualifier( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val packageFqName: FqName + + abstract val relativeClassFqName: FqName? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitResolvedQualifier(this, data) - val packageFqName: FqName - val relativeClassFqName: FqName? val classId get() = relativeClassFqName?.let { ClassId(packageFqName, it, false) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt index 1d9672d2776..58bfff4ec03 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt @@ -5,11 +5,16 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirReturnExpression : FirJump { - val result: FirExpression +abstract class FirReturnExpression( + session: FirSession, + psi: PsiElement? +) : FirJump(session, psi) { + abstract val result: FirExpression override fun accept(visitor: FirVisitor, data: D): R = visitor.visitReturnExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt index c982f0f0142..33f4d061a79 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirStringConcatenationCall.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirCallWithArgumentList import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirStringConcatenationCall : FirCall { +abstract class FirStringConcatenationCall( + session: FirSession, + psi: PsiElement? +) : FirCallWithArgumentList(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitStringConcatenationCall(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt index 077fd6c8ede..e0adbba79da 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirThrowExpression.kt @@ -5,10 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirThrowExpression : FirExpression { - val exception: FirExpression +abstract class FirThrowExpression( + session: FirSession, + psi: PsiElement? +) : FirExpression(session, psi) { + abstract val exception: FirExpression override fun accept(visitor: FirVisitor, data: D): R = visitor.visitThrowExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt index d233453f35e..37f5724b0c7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTryExpression.kt @@ -5,14 +5,20 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirTryExpression : FirExpression { - val tryBlock: FirBlock +abstract class FirTryExpression( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val tryBlock: FirBlock - val catches: List + abstract val catches: List - val finallyBlock: FirBlock? + abstract val finallyBlock: FirBlock? override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTryExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt index 396b888bb17..74f0e9c3da4 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirTypeOperatorCall.kt @@ -5,14 +5,21 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirOperationBasedCall import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor // is/!is/as/as? -interface FirTypeOperatorCall : FirOperatorCall { +abstract class FirTypeOperatorCall( + session: FirSession, + psi: PsiElement?, + operation: FirOperation +) : FirOperationBasedCall(session, psi, operation) { val argument: FirExpression get() = arguments.first() - val conversionTypeRef: FirTypeRef + abstract val conversionTypeRef: FirTypeRef override fun accept(visitor: FirVisitor, data: D): R = visitor.visitTypeOperatorCall(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt index 48c2e05ae91..394124848e5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirUncheckedNotNullCast.kt @@ -5,9 +5,15 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeCallWithArgumentList import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirUncheckedNotNullCast : FirCall { +abstract class FirUncheckedNotNullCast( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeCallWithArgumentList(session, psi) { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitUncheckedNotNullCast(this, data) val expression: FirExpression get() = arguments[0] diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt index 82b7c6e2a96..2d9543dd600 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariable.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.visitors.FirVisitor diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt index 95d7a75b1b1..3601c60914b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenExpression.kt @@ -5,20 +5,25 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirWhenExpression : FirExpression { - val subject: FirExpression? +abstract class FirWhenExpression( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val subject: FirExpression? // when (val subjectVariable = subject()) { ... } - val subjectVariable: FirVariable? + abstract val subjectVariable: FirVariable? - val branches: List + abstract val branches: List override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWhenExpression(this, data) - override fun acceptChildren(visitor: FirVisitor, data: D) { subjectVariable?.accept(visitor, data) ?: subject?.accept(visitor, data) for (branch in branches) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt index c7d0ee11302..3ea365f3ad2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWhenSubjectExpression.kt @@ -5,11 +5,17 @@ package org.jetbrains.kotlin.fir.expressions +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirWhenSubject +import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirWhenSubjectExpression : FirExpression { - val whenSubject: FirWhenSubject +abstract class FirWhenSubjectExpression( + session: FirSession, + psi: PsiElement? +) : FirUnknownTypeExpression(session, psi) { + abstract val whenSubject: FirWhenSubject override fun accept(visitor: FirVisitor, data: D): R = visitor.visitWhenSubjectExpression(this, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt index 103ce9d769d..b8695e8b70c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirWrappedArgumentExpression.kt @@ -7,14 +7,13 @@ package org.jetbrains.kotlin.fir.expressions import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.impl.FirAbstractStatement import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.visitors.FirVisitor abstract class FirWrappedArgumentExpression( session: FirSession, psi: PsiElement? -) : FirAbstractStatement(session, psi), FirExpression { +) : FirExpression(session, psi) { abstract val expression: FirExpression open val isSpread: Boolean @@ -32,6 +31,6 @@ abstract class FirWrappedArgumentExpression( override fun acceptChildren(visitor: FirVisitor, data: D) { expression.accept(visitor, data) - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt index ce8e35031c0..1627b424cc1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoop.kt @@ -16,7 +16,7 @@ abstract class FirAbstractLoop( session: FirSession, psi: PsiElement?, override var condition: FirExpression -) : FirAbstractStatement(session, psi), FirLoop { +) : FirAnnotatedStatement(session, psi), FirLoop { override lateinit var block: FirBlock override var label: FirLabel? = null @@ -25,6 +25,6 @@ abstract class FirAbstractLoop( condition = condition.transformSingle(transformer, data) block = block.transformSingle(transformer, data) label = label?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt index 454f332a49b..1b4e3b83c07 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt @@ -15,7 +15,7 @@ abstract class FirAbstractQualifiedAccess( session: FirSession, psi: PsiElement?, final override var safe: Boolean = false -) : FirAbstractStatement(session, psi), FirModifiableQualifiedAccess { +) : FirAnnotatedStatement(session, psi), FirModifiableQualifiedAccess { final override lateinit var calleeReference: FirReference final override var explicitReceiver: FirExpression? = null @@ -23,7 +23,7 @@ abstract class FirAbstractQualifiedAccess( override fun transformChildren(transformer: FirTransformer, data: D): FirElement { calleeReference = calleeReference.transformSingle(transformer, data) explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractStatement.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt similarity index 92% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractStatement.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt index ec24cf0a376..a9529670e42 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractStatement.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotatedStatement.kt @@ -9,7 +9,7 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirStatement -abstract class FirAbstractStatement( +abstract class FirAnnotatedStatement( session: FirSession, psi: PsiElement? ) : FirAbstractAnnotatedElement(session, psi), FirStatement \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt index 0bef696d1dc..622092ea53f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationCallImpl.kt @@ -19,10 +19,10 @@ class FirAnnotationCallImpl( psi: PsiElement?, override val useSiteTarget: AnnotationUseSiteTarget?, override var annotationTypeRef: FirTypeRef -) : FirAbstractCall(session, psi), FirAnnotationCall { +) : FirAnnotationCall(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { annotationTypeRef = annotationTypeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt index 572e40db185..41cba74b35f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArrayOfCallImpl.kt @@ -12,4 +12,4 @@ import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall class FirArrayOfCallImpl( session: FirSession, psi: PsiElement? -) : FirAbstractCall(session, psi), FirArrayOfCall \ No newline at end of file +) : FirArrayOfCall(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt index 12994e66484..4b6385edd3d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt @@ -6,22 +6,30 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer -import org.jetbrains.kotlin.fir.visitors.FirVisitor class FirArraySetCallImpl( session: FirSession, psi: PsiElement?, - value: FirExpression, - operation: FirOperation -) : FirAbstractAssignment(session, psi, value, operation, false), FirArraySetCall { + override var rValue: FirExpression, + override val operation: FirOperation +) : FirArraySetCall(session, psi), FirModifiableQualifiedAccess { + override lateinit var calleeReference: FirReference + + override var lValue: FirReference + get() = calleeReference + set(value) { + calleeReference = value + } + + override var explicitReceiver: FirExpression? + get() = null + set(_) {} + override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) override fun replaceTypeRef(newTypeRef: FirTypeRef) { @@ -30,14 +38,9 @@ class FirArraySetCallImpl( override val indexes = mutableListOf() - override fun accept(visitor: FirVisitor, data: D): R = - super.accept(visitor, data) - - override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) - indexes.transformInplace(transformer, data) - - return super.transformChildren(transformer, data) + override fun transformRValue(transformer: FirTransformer, data: D): FirAssignment { + rValue = rValue.transformSingle(transformer, data) + return this } override fun transformArguments(transformer: FirTransformer, data: D): FirCall { @@ -45,4 +48,13 @@ class FirArraySetCallImpl( indexes.transformInplace(transformer, data) return this } + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + calleeReference = calleeReference.transformSingle(transformer, data) + rValue = rValue.transformSingle(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + indexes.transformInplace(transformer, data) + + return super.transformChildren(transformer, data) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt index 10d243e83bf..4f396eb368a 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBlockImpl.kt @@ -16,11 +16,11 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirBlockImpl( session: FirSession, psi: PsiElement? -) : FirAbstractBlock(session, psi), FirBlock { +) : FirBlock(session, psi) { override val statements = mutableListOf() override fun transformChildren(transformer: FirTransformer, data: D): FirElement { statements.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt index 7f512ad0d89..b6a642eb323 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirBreakExpressionImpl.kt @@ -12,4 +12,4 @@ import org.jetbrains.kotlin.fir.expressions.FirBreakExpression class FirBreakExpressionImpl( session: FirSession, psi: PsiElement? -) : FirAbstractLoopJump(session, psi), FirBreakExpression \ No newline at end of file +) : FirBreakExpression(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt similarity index 66% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractCall.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt index b6285d217fc..00b0b44220e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallWithArgumentList.kt @@ -1,29 +1,32 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2019 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.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirCall import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.transformInplace import org.jetbrains.kotlin.fir.visitors.FirTransformer -abstract class FirAbstractCall( +abstract class FirCallWithArgumentList( session: FirSession, psi: PsiElement? -) : FirAbstractExpression(session, psi), FirCall { - final override val arguments = mutableListOf() +) : FirCall(session, psi) { + override val arguments = mutableListOf() override fun transformChildren(transformer: FirTransformer, data: D): FirElement { arguments.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } override fun transformArguments(transformer: FirTransformer, data: D): FirCall { arguments.transformInplace(transformer, data) return this } + } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt index 838d2749c18..1bd8fcb8c59 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt @@ -7,26 +7,25 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirCallableReferenceAccessImpl( session: FirSession, psi: PsiElement? -) : FirAbstractQualifiedAccess(session, psi), FirCallableReferenceAccess { - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) +) : FirCallableReferenceAccess(session, psi), FirModifiableQualifiedAccess { + override lateinit var calleeReference: FirReference - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } + override var explicitReceiver: FirExpression? = null override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) + calleeReference = calleeReference.transformSingle(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt index 4fb6c69a5fb..6d532c1af9f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirClassReferenceExpressionImpl.kt @@ -17,9 +17,9 @@ class FirClassReferenceExpressionImpl( session: FirSession, psi: PsiElement?, override var classTypeRef: FirTypeRef -) : FirAbstractExpression(session, psi), FirClassReferenceExpression { +) : FirClassReferenceExpression(session, psi) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { classTypeRef = classTypeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt index aecf632553c..78acad5b1a7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirConstExpressionImpl.kt @@ -15,7 +15,7 @@ class FirConstExpressionImpl( psi: PsiElement?, override val kind: IrConstKind, override val value: T -) : FirAbstractExpression(session, psi), FirConstExpression +) : FirConstExpression(session, psi) fun FirConstExpressionImpl(session: FirSession, psi: PsiElement?, kind: IrConstKind, value: T?, errorReason: String) = value?.let { FirConstExpressionImpl(session, psi, kind, it) } ?: FirErrorExpressionImpl(session, psi, errorReason) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt index 4383ce9092f..b347e7f9283 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirContinueExpressionImpl.kt @@ -12,4 +12,4 @@ import org.jetbrains.kotlin.fir.expressions.FirContinueExpression class FirContinueExpressionImpl( session: FirSession, psi: PsiElement? -) : FirAbstractLoopJump(session, psi), FirContinueExpression \ No newline at end of file +) : FirContinueExpression(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt index d377756beeb..472757f370b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt @@ -23,7 +23,7 @@ class FirDelegatedConstructorCallImpl( psi: PsiElement?, override var constructedTypeRef: FirTypeRef, override val isThis: Boolean -) : FirAbstractCall(session, psi), FirDelegatedConstructorCall { +) : FirDelegatedConstructorCall(session, psi) { override var calleeReference: FirReference = if (isThis) FirExplicitThisReference(session, psi, null) else FirExplicitSuperReference(session, psi, constructedTypeRef) @@ -35,8 +35,9 @@ class FirDelegatedConstructorCallImpl( override fun transformChildren(transformer: FirTransformer, data: D): FirElement { constructedTypeRef = constructedTypeRef.transformSingle(transformer, data) calleeReference = calleeReference.transformSingle(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { @@ -44,4 +45,6 @@ class FirDelegatedConstructorCallImpl( } override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(session, psi) + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt index 11691cf935c..59020312090 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirElseIfTrueCondition.kt @@ -6,15 +6,26 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer // Representation of "dummy" condition at else branch class FirElseIfTrueCondition( session: FirSession, psi: PsiElement? -) : FirAbstractExpression(session, psi) { +) : FirExpression(session, psi) { override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(session, psi) + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt index a07fd71f2b7..39124ca6ef6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirEmptyExpressionBlock.kt @@ -11,6 +11,6 @@ import org.jetbrains.kotlin.fir.expressions.FirStatement class FirEmptyExpressionBlock( session: FirSession -) : FirAbstractBlock(session, null), FirBlock { +) : FirBlock(session, null) { override val statements: List = listOf() } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt index a1f38f41531..65d833b3074 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirErrorExpressionImpl.kt @@ -13,4 +13,4 @@ class FirErrorExpressionImpl( session: FirSession, psi: PsiElement?, override val reason: String -) : FirAbstractExpression(session, psi), FirErrorExpression \ No newline at end of file +) : FirErrorExpression(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt index 91f5a8a73f4..3296cf7d2fa 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionStub.kt @@ -7,9 +7,8 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.FirExpression class FirExpressionStub( session: FirSession, psi: PsiElement? -) : FirAbstractExpression(session, psi) \ No newline at end of file +) : FirUnknownTypeExpression(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt index 31672d4f2d5..81a4888ccf7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.* -import org.jetbrains.kotlin.fir.expressions.FirCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess @@ -18,7 +17,7 @@ class FirFunctionCallImpl( session: FirSession, psi: PsiElement?, override var safe: Boolean = false -) : FirFunctionCall(session, psi), FirModifiableQualifiedAccess { +) : FirFunctionCall(session, psi), FirModifiableQualifiedAccess { override val typeArguments = mutableListOf() override lateinit var calleeReference: FirNamedReference diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt index 5c0c4c9e0fe..9be05bbaa66 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirGetClassCallImpl.kt @@ -12,4 +12,4 @@ import org.jetbrains.kotlin.fir.expressions.FirGetClassCall class FirGetClassCallImpl( session: FirSession, psi: PsiElement? -) : FirAbstractCall(session, psi), FirGetClassCall \ No newline at end of file +) : FirGetClassCall(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt similarity index 61% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt index 6c4ab435355..0424b1edb16 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractLoopJump.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirLoopJump.kt @@ -6,18 +6,28 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirTarget import org.jetbrains.kotlin.fir.expressions.FirJump import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer -abstract class FirAbstractLoopJump( +abstract class FirLoopJump( session: FirSession, psi: PsiElement? -) : FirAbstractExpression(session, psi), FirJump { +) : FirJump(session, psi) { override lateinit var target: FirTarget override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(session, psi) + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt index 5a6012eea3c..315c9f06f5c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt @@ -5,15 +5,28 @@ package org.jetbrains.kotlin.fir.expressions.impl +import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess +import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.visitors.FirTransformer + +interface FirModifiableQualifiedAccess : FirQualifiedAccess { + override var calleeReference: C -interface FirModifiableQualifiedAccess : FirQualifiedAccess { override var safe: Boolean - get() = super.safe + get() = false set(_) {} override var explicitReceiver: FirExpression? - get() = super.explicitReceiver - set(_) {} + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + + override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractOperationBasedCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt similarity index 56% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractOperationBasedCall.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt index 5f3afa26d80..2983afd99ff 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractOperationBasedCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperationBasedCall.kt @@ -6,20 +6,33 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirOperation +import org.jetbrains.kotlin.fir.expressions.FirOperatorCall +import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.visitors.FirTransformer -abstract class FirAbstractOperationBasedCall( +abstract class FirOperationBasedCall( session: FirSession, psi: PsiElement?, - val operation: FirOperation -) : FirAbstractCall(session, psi) { + final override val operation: FirOperation +) : FirOperatorCall(session, psi) { override var typeRef: FirTypeRef = if (operation in FirOperation.BOOLEANS) { FirImplicitBooleanTypeRef(session, null) } else { FirImplicitTypeRefImpl(session, null) } + + override fun replaceTypeRef(newTypeRef: FirTypeRef) { + typeRef = newTypeRef + } + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt index e21444f5721..9c0ac651973 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirOperatorCallImpl.kt @@ -8,10 +8,9 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirOperation -import org.jetbrains.kotlin.fir.expressions.FirOperatorCall class FirOperatorCallImpl( session: FirSession, psi: PsiElement?, operation: FirOperation -) : FirAbstractOperationBasedCall(session, psi, operation), FirOperatorCall \ No newline at end of file +) : FirOperationBasedCall(session, psi, operation) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt index f1cfeaa5d4d..340d0c12247 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt @@ -7,27 +7,26 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirQualifiedAccessExpressionImpl( session: FirSession, psi: PsiElement?, - safe: Boolean = false -) : FirAbstractQualifiedAccess(session, psi, safe), FirQualifiedAccessExpression { - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) + override var safe: Boolean = false +) : FirModifiableQualifiedAccess, FirQualifiedAccessExpression(session, psi) { + override lateinit var calleeReference: FirReference - override fun replaceTypeRef(newTypeRef: FirTypeRef) { - typeRef = newTypeRef - } + override var explicitReceiver: FirExpression? = null override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - typeRef = typeRef.transformSingle(transformer, data) + calleeReference = calleeReference.transformSingle(transformer, data) + explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt index c0cb372aa8d..581b129fb10 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirResolvedQualifierImpl.kt @@ -16,7 +16,7 @@ class FirResolvedQualifierImpl( psi: PsiElement?, override val packageFqName: FqName, override val relativeClassFqName: FqName? -) : FirResolvedQualifier, FirAbstractExpression(session, psi) { +) : FirResolvedQualifier(session, psi) { constructor(session: FirSession, psi: PsiElement?, classId: ClassId) : this( session, psi, diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt index f120a0eff1c..2f1499b79b5 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt @@ -12,20 +12,22 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirReturnExpression import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirReturnExpressionImpl( session: FirSession, psi: PsiElement?, override var result: FirExpression -) : FirAbstractExpression(session, psi), FirReturnExpression { +) : FirReturnExpression(session, psi) { override lateinit var target: FirTarget override fun transformChildren(transformer: FirTransformer, data: D): FirElement { result = result.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) } override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(session, psi) + + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt index 946f64cbe9d..52e39e9dd82 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirSingleExpressionBlock.kt @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirSingleExpressionBlock( session: FirSession, private var statement: FirStatement -) : FirAbstractBlock(session, statement.psi), FirBlock { +) : FirBlock(session, statement.psi) { override val statements get() = listOf(statement) override fun transformChildren(transformer: FirTransformer, data: D): FirElement { statement = statement.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt index 5794f47dbd6..0ee6620b53e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirStringConcatenationCallImpl.kt @@ -6,14 +6,24 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirStringConcatenationCall +import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirStringConcatenationCallImpl( session: FirSession, psi: PsiElement? -) : FirAbstractCall(session, psi), FirStringConcatenationCall { +) : FirStringConcatenationCall(session, psi) { + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + override var typeRef: FirTypeRef = FirImplicitStringTypeRef(session, psi) + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt index 741c4901b2e..ca5f2acb7d6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirThrowExpressionImpl.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirAbstractElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirExpression @@ -20,10 +19,13 @@ class FirThrowExpressionImpl( session: FirSession, psi: PsiElement?, override var exception: FirExpression -) : FirAbstractExpression(session, psi), FirThrowExpression { +) : FirThrowExpression(session, psi) { + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { exception = exception.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) } override var typeRef: FirTypeRef = FirImplicitNothingTypeRef(session, psi) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt index b0d122a6113..4d19a137d52 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTryExpressionImpl.kt @@ -6,10 +6,13 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirCatch import org.jetbrains.kotlin.fir.expressions.FirTryExpression +import org.jetbrains.kotlin.fir.transformInplace +import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirTryExpressionImpl( @@ -17,13 +20,13 @@ class FirTryExpressionImpl( psi: PsiElement?, override var tryBlock: FirBlock, override var finallyBlock: FirBlock? -) : FirAbstractExpression(session, psi), FirTryExpression { +) : FirTryExpression(session, psi) { override val catches = mutableListOf() override fun transformChildren(transformer: FirTransformer, data: D): FirElement { tryBlock = tryBlock.transformSingle(transformer, data) finallyBlock = finallyBlock?.transformSingle(transformer, data) catches.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt index 74817d4ccb1..a67a2cd0e25 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirTypeOperatorCallImpl.kt @@ -19,9 +19,9 @@ class FirTypeOperatorCallImpl( psi: PsiElement?, operation: FirOperation, override var conversionTypeRef: FirTypeRef -) : FirAbstractOperationBasedCall(session, psi, operation), FirTypeOperatorCall { +) : FirTypeOperatorCall(session, psi, operation) { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { conversionTypeRef = conversionTypeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUncheckedNotNullCastImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUncheckedNotNullCastImpl.kt index 783873411e7..14fd1f5289d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUncheckedNotNullCastImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUncheckedNotNullCastImpl.kt @@ -9,14 +9,12 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirUncheckedNotNullCast -import org.jetbrains.kotlin.fir.expressions.FirOperation -import org.jetbrains.kotlin.fir.types.FirTypeRef class FirUncheckedNotNullCastImpl( session: FirSession, psi: PsiElement?, expression: FirExpression -) : FirAbstractCall(session, psi), FirUncheckedNotNullCast { +) : FirUncheckedNotNullCast(session, psi) { init { arguments += expression } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt index ff8b4322cee..6dfee5b67f9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnitExpression.kt @@ -6,13 +6,24 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef +import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirUnitExpression( session: FirSession, psi: PsiElement? -) : FirAbstractExpression(session, psi) { +) : FirExpression(session, psi) { + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} + override var typeRef: FirTypeRef = FirImplicitUnitTypeRef(session, psi) + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + typeRef = typeRef.transformSingle(transformer, data) + return super.transformChildren(transformer, data) + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractBlock.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt similarity index 80% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractBlock.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt index c5081c0824c..8d5957e1367 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractBlock.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeCallWithArgumentList.kt @@ -8,16 +8,15 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer -abstract class FirAbstractBlock( +abstract class FirUnknownTypeCallWithArgumentList( session: FirSession, psi: PsiElement? -) : FirAbstractAnnotatedElement(session, psi), FirBlock { +) : FirCallWithArgumentList(session, psi) { override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) override fun replaceTypeRef(newTypeRef: FirTypeRef) { @@ -27,6 +26,6 @@ abstract class FirAbstractBlock( override fun transformChildren(transformer: FirTransformer, data: D): FirElement { typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt similarity index 71% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractExpression.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt index bc02219d6fc..53adab95bba 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirUnknownTypeExpression.kt @@ -10,24 +10,23 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.transformSingle -import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl import org.jetbrains.kotlin.fir.visitors.FirTransformer -abstract class FirAbstractExpression( +abstract class FirUnknownTypeExpression( session: FirSession, psi: PsiElement? -) : FirAbstractStatement(session, psi), FirExpression { - override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) +) : FirExpression(session, psi) { + final override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(session, null) - override fun replaceTypeRef(newTypeRef: FirTypeRef) { + final override fun replaceTypeRef(newTypeRef: FirTypeRef) { typeRef = newTypeRef } override fun transformChildren(transformer: FirTransformer, data: D): FirElement { typeRef = typeRef.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt index b0a23a761cc..ce0479a6952 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenExpressionImpl.kt @@ -18,7 +18,7 @@ class FirWhenExpressionImpl( psiElement: PsiElement?, override var subject: FirExpression? = null, override var subjectVariable: FirVariable? = null -) : FirAbstractExpression(session, psiElement), FirWhenExpression { +) : FirWhenExpression(session, psiElement) { override val branches = mutableListOf() override fun transformChildren(transformer: FirTransformer, data: D): FirElement { @@ -28,6 +28,6 @@ class FirWhenExpressionImpl( subject = subject?.transformSingle(transformer, data) } branches.transformInplace(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt index 88030724b4a..57a0c5367f7 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirWhenSubjectExpressionImpl.kt @@ -14,4 +14,4 @@ class FirWhenSubjectExpressionImpl( session: FirSession, psi: PsiElement?, override val whenSubject: FirWhenSubject -) : FirAbstractExpression(session, psi), FirWhenSubjectExpression \ No newline at end of file +) : FirWhenSubjectExpression(session, psi) \ No newline at end of file diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index fc716d58424..d49a4c5d14d 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -172,52 +172,60 @@ abstract class FirTransformer : FirVisitor { - return transformStatement(klass, data) - } - - open fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: D): CompositeTransformResult { - return transformClass(anonymousObject, data) - } - - open fun transformModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult { - return transformClass(modifiableClass, data) - } - - open fun transformErrorStatement(errorStatement: FirErrorStatement, data: D): CompositeTransformResult { - return transformStatement(errorStatement, data) + open fun transformAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: D): CompositeTransformResult { + return transformStatement(annotatedStatement, data) } open fun transformExpression(expression: FirExpression, data: D): CompositeTransformResult { - return transformStatement(expression, data) - } - - open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult { - return transformExpression(block, data) + return transformAnnotatedStatement(expression, data) } open fun transformCall(call: FirCall, data: D): CompositeTransformResult { return transformExpression(call, data) } - open fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { - return transformCall(annotationCall, data) - } - - open fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): CompositeTransformResult { - return transformCall(arrayOfCall, data) - } - open fun transformArraySetCall(arraySetCall: FirArraySetCall, data: D): CompositeTransformResult { return transformCall(arraySetCall, data) } + open fun transformCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: D): CompositeTransformResult { + return transformCall(callWithArgumentList, data) + } + open fun transformDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): CompositeTransformResult { - return transformCall(delegatedConstructorCall, data) + return transformCallWithArgumentList(delegatedConstructorCall, data) + } + + open fun transformOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { + return transformCallWithArgumentList(operatorCall, data) + } + + open fun transformOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: D): CompositeTransformResult { + return transformOperatorCall(operationBasedCall, data) + } + + open fun transformTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): CompositeTransformResult { + return transformOperationBasedCall(typeOperatorCall, data) + } + + open fun transformStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): CompositeTransformResult { + return transformCallWithArgumentList(stringConcatenationCall, data) + } + + open fun transformUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: D): CompositeTransformResult { + return transformCallWithArgumentList(unknownTypeCallWithArgumentList, data) + } + + open fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { + return transformUnknownTypeCallWithArgumentList(annotationCall, data) + } + + open fun transformArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): CompositeTransformResult { + return transformUnknownTypeCallWithArgumentList(arrayOfCall, data) } open fun transformFunctionCall(functionCall: FirFunctionCall, data: D): CompositeTransformResult { - return transformCall(functionCall, data) + return transformUnknownTypeCallWithArgumentList(functionCall, data) } open fun transformComponentCall(componentCall: FirComponentCall, data: D): CompositeTransformResult { @@ -225,71 +233,79 @@ abstract class FirTransformer : FirVisitor { - return transformCall(getClassCall, data) - } - - open fun transformOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { - return transformCall(operatorCall, data) - } - - open fun transformTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): CompositeTransformResult { - return transformOperatorCall(typeOperatorCall, data) - } - - open fun transformStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): CompositeTransformResult { - return transformCall(stringConcatenationCall, data) + return transformUnknownTypeCallWithArgumentList(getClassCall, data) } open fun transformUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): CompositeTransformResult { - return transformCall(uncheckedNotNullCast, data) - } - - open fun transformClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult { - return transformExpression(classReferenceExpression, data) - } - - open fun transformConstExpression(constExpression: FirConstExpression, data: D): CompositeTransformResult { - return transformExpression(constExpression, data) - } - - open fun transformErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult { - return transformExpression(errorExpression, data) + return transformUnknownTypeCallWithArgumentList(uncheckedNotNullCast, data) } open fun transformJump(jump: FirJump, data: D): CompositeTransformResult { return transformExpression(jump, data) } + open fun transformLoopJump(loopJump: FirLoopJump, data: D): CompositeTransformResult { + return transformJump(loopJump, data) + } + open fun transformBreakExpression(breakExpression: FirBreakExpression, data: D): CompositeTransformResult { - return transformJump(breakExpression, data) + return transformLoopJump(breakExpression, data) } open fun transformContinueExpression(continueExpression: FirContinueExpression, data: D): CompositeTransformResult { - return transformJump(continueExpression, data) + return transformLoopJump(continueExpression, data) } open fun transformReturnExpression(returnExpression: FirReturnExpression, data: D): CompositeTransformResult { return transformJump(returnExpression, data) } - open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult { - return transformExpression(resolvedQualifier, data) - } - open fun transformThrowExpression(throwExpression: FirThrowExpression, data: D): CompositeTransformResult { return transformExpression(throwExpression, data) } + open fun transformUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: D): CompositeTransformResult { + return transformExpression(unknownTypeExpression, data) + } + + open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(block, data) + } + + open fun transformClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(classReferenceExpression, data) + } + + open fun transformConstExpression(constExpression: FirConstExpression, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(constExpression, data) + } + + open fun transformErrorExpression(errorExpression: FirErrorExpression, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(errorExpression, data) + } + + open fun transformQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(qualifiedAccessExpression, data) + } + + open fun transformCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { + return transformQualifiedAccessExpression(callableReferenceAccess, data) + } + + open fun transformResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(resolvedQualifier, data) + } + open fun transformTryExpression(tryExpression: FirTryExpression, data: D): CompositeTransformResult { - return transformExpression(tryExpression, data) + return transformUnknownTypeExpression(tryExpression, data) } open fun transformWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult { - return transformExpression(whenExpression, data) + return transformUnknownTypeExpression(whenExpression, data) } open fun transformWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): CompositeTransformResult { - return transformExpression(whenSubjectExpression, data) + return transformUnknownTypeExpression(whenSubjectExpression, data) } open fun transformWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): CompositeTransformResult { @@ -308,6 +324,22 @@ abstract class FirTransformer : FirVisitor { + return transformStatement(klass, data) + } + + open fun transformAnonymousObject(anonymousObject: FirAnonymousObject, data: D): CompositeTransformResult { + return transformClass(anonymousObject, data) + } + + open fun transformModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult { + return transformClass(modifiableClass, data) + } + + open fun transformErrorStatement(errorStatement: FirErrorStatement, data: D): CompositeTransformResult { + return transformStatement(errorStatement, data) + } + open fun transformLoop(loop: FirLoop, data: D): CompositeTransformResult { return transformStatement(loop, data) } @@ -332,18 +364,10 @@ abstract class FirTransformer : FirVisitor { + open fun transformModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): CompositeTransformResult { return transformQualifiedAccess(modifiableQualifiedAccess, data) } - open fun transformQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { - return transformQualifiedAccess(qualifiedAccessExpression, data) - } - - open fun transformCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { - return transformQualifiedAccessExpression(callableReferenceAccess, data) - } - open fun transformTargetElement(targetElement: E, data: D): CompositeTransformResult { return transformElement(targetElement, data) } @@ -408,6 +432,10 @@ abstract class FirTransformer : FirVisitor { + return transformAnnotatedStatement(annotatedStatement, data) + } + final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { return transformAnnotationCall(annotationCall, data) } @@ -448,6 +476,10 @@ abstract class FirTransformer : FirVisitor { + return transformCallWithArgumentList(callWithArgumentList, data) + } + final override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: D): CompositeTransformResult { return transformCallableDeclaration(callableDeclaration, data) } @@ -600,6 +632,10 @@ abstract class FirTransformer : FirVisitor { + return transformLoopJump(loopJump, data) + } + final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: D): CompositeTransformResult { return transformMemberDeclaration(memberDeclaration, data) } @@ -612,7 +648,7 @@ abstract class FirTransformer : FirVisitor { + final override fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): CompositeTransformResult { return transformModifiableQualifiedAccess(modifiableQualifiedAccess, data) } @@ -632,6 +668,10 @@ abstract class FirTransformer : FirVisitor { + return transformOperationBasedCall(operationBasedCall, data) + } + final override fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): CompositeTransformResult { return transformOperatorCall(operatorCall, data) } @@ -764,6 +804,14 @@ abstract class FirTransformer : FirVisitor { + return transformUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList, data) + } + + final override fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: D): CompositeTransformResult { + return transformUnknownTypeExpression(unknownTypeExpression, data) + } + final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult { return transformUserTypeRef(userTypeRef, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index cff04ac8bb8..00f56e7eebf 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -172,52 +172,60 @@ abstract class FirVisitor { return visitElement(statement, data) } - open fun visitClass(klass: FirClass, data: D): R { - return visitStatement(klass, data) - } - - open fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): R { - return visitClass(anonymousObject, data) - } - - open fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): R { - return visitClass(modifiableClass, data) - } - - open fun visitErrorStatement(errorStatement: FirErrorStatement, data: D): R { - return visitStatement(errorStatement, data) + open fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: D): R { + return visitStatement(annotatedStatement, data) } open fun visitExpression(expression: FirExpression, data: D): R { - return visitStatement(expression, data) - } - - open fun visitBlock(block: FirBlock, data: D): R { - return visitExpression(block, data) + return visitAnnotatedStatement(expression, data) } open fun visitCall(call: FirCall, data: D): R { return visitExpression(call, data) } - open fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): R { - return visitCall(annotationCall, data) - } - - open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): R { - return visitCall(arrayOfCall, data) - } - open fun visitArraySetCall(arraySetCall: FirArraySetCall, data: D): R { return visitCall(arraySetCall, data) } + open fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: D): R { + return visitCall(callWithArgumentList, data) + } + open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: D): R { - return visitCall(delegatedConstructorCall, data) + return visitCallWithArgumentList(delegatedConstructorCall, data) + } + + open fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): R { + return visitCallWithArgumentList(operatorCall, data) + } + + open fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: D): R { + return visitOperatorCall(operationBasedCall, data) + } + + open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): R { + return visitOperationBasedCall(typeOperatorCall, data) + } + + open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): R { + return visitCallWithArgumentList(stringConcatenationCall, data) + } + + open fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: D): R { + return visitCallWithArgumentList(unknownTypeCallWithArgumentList, data) + } + + open fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): R { + return visitUnknownTypeCallWithArgumentList(annotationCall, data) + } + + open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: D): R { + return visitUnknownTypeCallWithArgumentList(arrayOfCall, data) } open fun visitFunctionCall(functionCall: FirFunctionCall, data: D): R { - return visitCall(functionCall, data) + return visitUnknownTypeCallWithArgumentList(functionCall, data) } open fun visitComponentCall(componentCall: FirComponentCall, data: D): R { @@ -225,71 +233,79 @@ abstract class FirVisitor { } open fun visitGetClassCall(getClassCall: FirGetClassCall, data: D): R { - return visitCall(getClassCall, data) - } - - open fun visitOperatorCall(operatorCall: FirOperatorCall, data: D): R { - return visitCall(operatorCall, data) - } - - open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): R { - return visitOperatorCall(typeOperatorCall, data) - } - - open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: D): R { - return visitCall(stringConcatenationCall, data) + return visitUnknownTypeCallWithArgumentList(getClassCall, data) } open fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast, data: D): R { - return visitCall(uncheckedNotNullCast, data) - } - - open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): R { - return visitExpression(classReferenceExpression, data) - } - - open fun visitConstExpression(constExpression: FirConstExpression, data: D): R { - return visitExpression(constExpression, data) - } - - open fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): R { - return visitExpression(errorExpression, data) + return visitUnknownTypeCallWithArgumentList(uncheckedNotNullCast, data) } open fun visitJump(jump: FirJump, data: D): R { return visitExpression(jump, data) } + open fun visitLoopJump(loopJump: FirLoopJump, data: D): R { + return visitJump(loopJump, data) + } + open fun visitBreakExpression(breakExpression: FirBreakExpression, data: D): R { - return visitJump(breakExpression, data) + return visitLoopJump(breakExpression, data) } open fun visitContinueExpression(continueExpression: FirContinueExpression, data: D): R { - return visitJump(continueExpression, data) + return visitLoopJump(continueExpression, data) } open fun visitReturnExpression(returnExpression: FirReturnExpression, data: D): R { return visitJump(returnExpression, data) } - open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R { - return visitExpression(resolvedQualifier, data) - } - open fun visitThrowExpression(throwExpression: FirThrowExpression, data: D): R { return visitExpression(throwExpression, data) } + open fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: D): R { + return visitExpression(unknownTypeExpression, data) + } + + open fun visitBlock(block: FirBlock, data: D): R { + return visitUnknownTypeExpression(block, data) + } + + open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: D): R { + return visitUnknownTypeExpression(classReferenceExpression, data) + } + + open fun visitConstExpression(constExpression: FirConstExpression, data: D): R { + return visitUnknownTypeExpression(constExpression, data) + } + + open fun visitErrorExpression(errorExpression: FirErrorExpression, data: D): R { + return visitUnknownTypeExpression(errorExpression, data) + } + + open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R { + return visitUnknownTypeExpression(qualifiedAccessExpression, data) + } + + open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R { + return visitQualifiedAccessExpression(callableReferenceAccess, data) + } + + open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: D): R { + return visitUnknownTypeExpression(resolvedQualifier, data) + } + open fun visitTryExpression(tryExpression: FirTryExpression, data: D): R { - return visitExpression(tryExpression, data) + return visitUnknownTypeExpression(tryExpression, data) } open fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): R { - return visitExpression(whenExpression, data) + return visitUnknownTypeExpression(whenExpression, data) } open fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: D): R { - return visitExpression(whenSubjectExpression, data) + return visitUnknownTypeExpression(whenSubjectExpression, data) } open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): R { @@ -308,6 +324,22 @@ abstract class FirVisitor { return visitWrappedArgumentExpression(spreadArgumentExpression, data) } + open fun visitClass(klass: FirClass, data: D): R { + return visitStatement(klass, data) + } + + open fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): R { + return visitClass(anonymousObject, data) + } + + open fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): R { + return visitClass(modifiableClass, data) + } + + open fun visitErrorStatement(errorStatement: FirErrorStatement, data: D): R { + return visitStatement(errorStatement, data) + } + open fun visitLoop(loop: FirLoop, data: D): R { return visitStatement(loop, data) } @@ -332,18 +364,10 @@ abstract class FirVisitor { return visitAssignment(variableAssignment, data) } - open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): R { + open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): R { return visitQualifiedAccess(modifiableQualifiedAccess, data) } - open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R { - return visitQualifiedAccess(qualifiedAccessExpression, data) - } - - open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R { - return visitQualifiedAccessExpression(callableReferenceAccess, data) - } - open fun visitTargetElement(targetElement: FirTargetElement, data: D): R { return visitElement(targetElement, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index caceb2d1678..e197510a61b 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -172,52 +172,60 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(statement, null) } - open fun visitClass(klass: FirClass) { - visitStatement(klass, null) - } - - open fun visitAnonymousObject(anonymousObject: FirAnonymousObject) { - visitClass(anonymousObject, null) - } - - open fun visitModifiableClass(modifiableClass: FirModifiableClass) { - visitClass(modifiableClass, null) - } - - open fun visitErrorStatement(errorStatement: FirErrorStatement) { - visitStatement(errorStatement, null) + open fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement) { + visitStatement(annotatedStatement, null) } open fun visitExpression(expression: FirExpression) { - visitStatement(expression, null) - } - - open fun visitBlock(block: FirBlock) { - visitExpression(block, null) + visitAnnotatedStatement(expression, null) } open fun visitCall(call: FirCall) { visitExpression(call, null) } - open fun visitAnnotationCall(annotationCall: FirAnnotationCall) { - visitCall(annotationCall, null) - } - - open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall) { - visitCall(arrayOfCall, null) - } - open fun visitArraySetCall(arraySetCall: FirArraySetCall) { visitCall(arraySetCall, null) } + open fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList) { + visitCall(callWithArgumentList, null) + } + open fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) { - visitCall(delegatedConstructorCall, null) + visitCallWithArgumentList(delegatedConstructorCall, null) + } + + open fun visitOperatorCall(operatorCall: FirOperatorCall) { + visitCallWithArgumentList(operatorCall, null) + } + + open fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall) { + visitOperatorCall(operationBasedCall, null) + } + + open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall) { + visitOperationBasedCall(typeOperatorCall, null) + } + + open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall) { + visitCallWithArgumentList(stringConcatenationCall, null) + } + + open fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList) { + visitCallWithArgumentList(unknownTypeCallWithArgumentList, null) + } + + open fun visitAnnotationCall(annotationCall: FirAnnotationCall) { + visitUnknownTypeCallWithArgumentList(annotationCall, null) + } + + open fun visitArrayOfCall(arrayOfCall: FirArrayOfCall) { + visitUnknownTypeCallWithArgumentList(arrayOfCall, null) } open fun visitFunctionCall(functionCall: FirFunctionCall) { - visitCall(functionCall, null) + visitUnknownTypeCallWithArgumentList(functionCall, null) } open fun visitComponentCall(componentCall: FirComponentCall) { @@ -225,71 +233,79 @@ abstract class FirVisitorVoid : FirVisitor() { } open fun visitGetClassCall(getClassCall: FirGetClassCall) { - visitCall(getClassCall, null) - } - - open fun visitOperatorCall(operatorCall: FirOperatorCall) { - visitCall(operatorCall, null) - } - - open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall) { - visitOperatorCall(typeOperatorCall, null) - } - - open fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall) { - visitCall(stringConcatenationCall, null) + visitUnknownTypeCallWithArgumentList(getClassCall, null) } open fun visitUncheckedNotNullCast(uncheckedNotNullCast: FirUncheckedNotNullCast) { - visitCall(uncheckedNotNullCast, null) - } - - open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression) { - visitExpression(classReferenceExpression, null) - } - - open fun visitConstExpression(constExpression: FirConstExpression) { - visitExpression(constExpression, null) - } - - open fun visitErrorExpression(errorExpression: FirErrorExpression) { - visitExpression(errorExpression, null) + visitUnknownTypeCallWithArgumentList(uncheckedNotNullCast, null) } open fun visitJump(jump: FirJump) { visitExpression(jump, null) } + open fun visitLoopJump(loopJump: FirLoopJump) { + visitJump(loopJump, null) + } + open fun visitBreakExpression(breakExpression: FirBreakExpression) { - visitJump(breakExpression, null) + visitLoopJump(breakExpression, null) } open fun visitContinueExpression(continueExpression: FirContinueExpression) { - visitJump(continueExpression, null) + visitLoopJump(continueExpression, null) } open fun visitReturnExpression(returnExpression: FirReturnExpression) { visitJump(returnExpression, null) } - open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) { - visitExpression(resolvedQualifier, null) - } - open fun visitThrowExpression(throwExpression: FirThrowExpression) { visitExpression(throwExpression, null) } + open fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression) { + visitExpression(unknownTypeExpression, null) + } + + open fun visitBlock(block: FirBlock) { + visitUnknownTypeExpression(block, null) + } + + open fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression) { + visitUnknownTypeExpression(classReferenceExpression, null) + } + + open fun visitConstExpression(constExpression: FirConstExpression) { + visitUnknownTypeExpression(constExpression, null) + } + + open fun visitErrorExpression(errorExpression: FirErrorExpression) { + visitUnknownTypeExpression(errorExpression, null) + } + + open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression) { + visitUnknownTypeExpression(qualifiedAccessExpression, null) + } + + open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess) { + visitQualifiedAccessExpression(callableReferenceAccess, null) + } + + open fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) { + visitUnknownTypeExpression(resolvedQualifier, null) + } + open fun visitTryExpression(tryExpression: FirTryExpression) { - visitExpression(tryExpression, null) + visitUnknownTypeExpression(tryExpression, null) } open fun visitWhenExpression(whenExpression: FirWhenExpression) { - visitExpression(whenExpression, null) + visitUnknownTypeExpression(whenExpression, null) } open fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression) { - visitExpression(whenSubjectExpression, null) + visitUnknownTypeExpression(whenSubjectExpression, null) } open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression) { @@ -308,6 +324,22 @@ abstract class FirVisitorVoid : FirVisitor() { visitWrappedArgumentExpression(spreadArgumentExpression, null) } + open fun visitClass(klass: FirClass) { + visitStatement(klass, null) + } + + open fun visitAnonymousObject(anonymousObject: FirAnonymousObject) { + visitClass(anonymousObject, null) + } + + open fun visitModifiableClass(modifiableClass: FirModifiableClass) { + visitClass(modifiableClass, null) + } + + open fun visitErrorStatement(errorStatement: FirErrorStatement) { + visitStatement(errorStatement, null) + } + open fun visitLoop(loop: FirLoop) { visitStatement(loop, null) } @@ -332,18 +364,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitAssignment(variableAssignment, null) } - open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess) { + open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess) { visitQualifiedAccess(modifiableQualifiedAccess, null) } - open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression) { - visitQualifiedAccess(qualifiedAccessExpression, null) - } - - open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess) { - visitQualifiedAccessExpression(callableReferenceAccess, null) - } - open fun visitTargetElement(targetElement: FirTargetElement) { visitElement(targetElement, null) } @@ -408,6 +432,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(whenBranch, null) } + final override fun visitAnnotatedStatement(annotatedStatement: FirAnnotatedStatement, data: Nothing?) { + visitAnnotatedStatement(annotatedStatement) + } + final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) { visitAnnotationCall(annotationCall) } @@ -448,6 +476,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitCall(call) } + final override fun visitCallWithArgumentList(callWithArgumentList: FirCallWithArgumentList, data: Nothing?) { + visitCallWithArgumentList(callWithArgumentList) + } + final override fun visitCallableDeclaration(callableDeclaration: FirCallableDeclaration, data: Nothing?) { visitCallableDeclaration(callableDeclaration) } @@ -600,6 +632,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitLoop(loop) } + final override fun visitLoopJump(loopJump: FirLoopJump, data: Nothing?) { + visitLoopJump(loopJump) + } + final override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration, data: Nothing?) { visitMemberDeclaration(memberDeclaration) } @@ -612,7 +648,7 @@ abstract class FirVisitorVoid : FirVisitor() { visitModifiableFunction(modifiableFunction) } - final override fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: Nothing?) { + final override fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: Nothing?) { visitModifiableQualifiedAccess(modifiableQualifiedAccess) } @@ -632,6 +668,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitNamedReference(namedReference) } + final override fun visitOperationBasedCall(operationBasedCall: FirOperationBasedCall, data: Nothing?) { + visitOperationBasedCall(operationBasedCall) + } + final override fun visitOperatorCall(operatorCall: FirOperatorCall, data: Nothing?) { visitOperatorCall(operatorCall) } @@ -764,6 +804,14 @@ abstract class FirVisitorVoid : FirVisitor() { visitUncheckedNotNullCast(uncheckedNotNullCast) } + final override fun visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList: FirUnknownTypeCallWithArgumentList, data: Nothing?) { + visitUnknownTypeCallWithArgumentList(unknownTypeCallWithArgumentList) + } + + final override fun visitUnknownTypeExpression(unknownTypeExpression: FirUnknownTypeExpression, data: Nothing?) { + visitUnknownTypeExpression(unknownTypeExpression) + } + final override fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: Nothing?) { visitUserTypeRef(userTypeRef) }