[FIR] Create additional nodes to replace operator call in some places
1. FirAssignmentOperatorStatement - represent assignment operations such as =, +=, -=, /=, %= 2. FirEqualityOperatorCall - represent boolean operations such as ==, !=, ===, !== #KT-38333 In Progress
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.expressions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirPureAbstractElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class FirAssignmentOperatorStatement : FirPureAbstractElement(), FirStatement {
|
||||||
|
abstract override val source: FirSourceElement?
|
||||||
|
abstract override val annotations: List<FirAnnotationCall>
|
||||||
|
abstract val operation: FirOperation
|
||||||
|
abstract val leftArgument: FirExpression
|
||||||
|
abstract val rightArgument: FirExpression
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitAssignmentOperatorStatement(this, data)
|
||||||
|
|
||||||
|
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatement
|
||||||
|
|
||||||
|
abstract fun <D> transformLeftArgument(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatement
|
||||||
|
|
||||||
|
abstract fun <D> transformRightArgument(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatement
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.expressions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class FirEqualityOperatorCall : FirExpression(), FirCall {
|
||||||
|
abstract override val source: FirSourceElement?
|
||||||
|
abstract override val typeRef: FirTypeRef
|
||||||
|
abstract override val annotations: List<FirAnnotationCall>
|
||||||
|
abstract override val argumentList: FirArgumentList
|
||||||
|
abstract val operation: FirOperation
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitEqualityOperatorCall(this, data)
|
||||||
|
|
||||||
|
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
|
||||||
|
|
||||||
|
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
|
||||||
|
|
||||||
|
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirEqualityOperatorCall
|
||||||
|
}
|
||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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.builder
|
||||||
|
|
||||||
|
import kotlin.contracts.*
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.impl.FirAssignmentOperatorStatementImpl
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
@FirBuilderDsl
|
||||||
|
class FirAssignmentOperatorStatementBuilder : FirAnnotationContainerBuilder {
|
||||||
|
override var source: FirSourceElement? = null
|
||||||
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
|
lateinit var operation: FirOperation
|
||||||
|
lateinit var leftArgument: FirExpression
|
||||||
|
lateinit var rightArgument: FirExpression
|
||||||
|
|
||||||
|
override fun build(): FirAssignmentOperatorStatement {
|
||||||
|
return FirAssignmentOperatorStatementImpl(
|
||||||
|
source,
|
||||||
|
annotations,
|
||||||
|
operation,
|
||||||
|
leftArgument,
|
||||||
|
rightArgument,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalContracts::class)
|
||||||
|
inline fun buildAssignmentOperatorStatement(init: FirAssignmentOperatorStatementBuilder.() -> Unit): FirAssignmentOperatorStatement {
|
||||||
|
contract {
|
||||||
|
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
|
return FirAssignmentOperatorStatementBuilder().apply(init).build()
|
||||||
|
}
|
||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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.builder
|
||||||
|
|
||||||
|
import kotlin.contracts.*
|
||||||
|
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.impl.FirEqualityOperatorCallImpl
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
@FirBuilderDsl
|
||||||
|
class FirEqualityOperatorCallBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
|
||||||
|
override var source: FirSourceElement? = null
|
||||||
|
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
|
||||||
|
lateinit var argumentList: FirArgumentList
|
||||||
|
lateinit var operation: FirOperation
|
||||||
|
|
||||||
|
override fun build(): FirEqualityOperatorCall {
|
||||||
|
return FirEqualityOperatorCallImpl(
|
||||||
|
source,
|
||||||
|
annotations,
|
||||||
|
argumentList,
|
||||||
|
operation,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Deprecated("Modification of 'typeRef' has no impact for FirEqualityOperatorCallBuilder", level = DeprecationLevel.HIDDEN)
|
||||||
|
override var typeRef: FirTypeRef
|
||||||
|
get() = throw IllegalStateException()
|
||||||
|
set(value) {
|
||||||
|
throw IllegalStateException()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalContracts::class)
|
||||||
|
inline fun buildEqualityOperatorCall(init: FirEqualityOperatorCallBuilder.() -> Unit): FirEqualityOperatorCall {
|
||||||
|
contract {
|
||||||
|
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||||
|
}
|
||||||
|
return FirEqualityOperatorCallBuilder().apply(init).build()
|
||||||
|
}
|
||||||
-1
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
|
|||||||
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirOperatorCallImpl
|
import org.jetbrains.kotlin.fir.expressions.impl.FirOperatorCallImpl
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
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.types.impl.FirImplicitTypeRefImpl
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
|||||||
+54
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
internal class FirAssignmentOperatorStatementImpl(
|
||||||
|
override val source: FirSourceElement?,
|
||||||
|
override val annotations: MutableList<FirAnnotationCall>,
|
||||||
|
override val operation: FirOperation,
|
||||||
|
override var leftArgument: FirExpression,
|
||||||
|
override var rightArgument: FirExpression,
|
||||||
|
) : FirAssignmentOperatorStatement() {
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
|
leftArgument.accept(visitor, data)
|
||||||
|
rightArgument.accept(visitor, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatementImpl {
|
||||||
|
transformAnnotations(transformer, data)
|
||||||
|
transformLeftArgument(transformer, data)
|
||||||
|
transformRightArgument(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatementImpl {
|
||||||
|
annotations.transformInplace(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformLeftArgument(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatementImpl {
|
||||||
|
leftArgument = leftArgument.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformRightArgument(transformer: FirTransformer<D>, data: D): FirAssignmentOperatorStatementImpl {
|
||||||
|
rightArgument = rightArgument.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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 org.jetbrains.kotlin.fir.FirSourceElement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file was generated automatically
|
||||||
|
* DO NOT MODIFY IT MANUALLY
|
||||||
|
*/
|
||||||
|
|
||||||
|
internal class FirEqualityOperatorCallImpl(
|
||||||
|
override val source: FirSourceElement?,
|
||||||
|
override val annotations: MutableList<FirAnnotationCall>,
|
||||||
|
override var argumentList: FirArgumentList,
|
||||||
|
override val operation: FirOperation,
|
||||||
|
) : FirEqualityOperatorCall() {
|
||||||
|
override var typeRef: FirTypeRef = FirImplicitBooleanTypeRef(null)
|
||||||
|
|
||||||
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
|
typeRef.accept(visitor, data)
|
||||||
|
annotations.forEach { it.accept(visitor, data) }
|
||||||
|
argumentList.accept(visitor, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirEqualityOperatorCallImpl {
|
||||||
|
typeRef = typeRef.transformSingle(transformer, data)
|
||||||
|
transformAnnotations(transformer, data)
|
||||||
|
argumentList = argumentList.transformSingle(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirEqualityOperatorCallImpl {
|
||||||
|
annotations.transformInplace(transformer, data)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||||
|
typeRef = newTypeRef
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
|
||||||
|
argumentList = newArgumentList
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-6
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.expressions.FirArgumentList
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
import org.jetbrains.kotlin.fir.expressions.FirOperation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
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.types.impl.FirImplicitTypeRefImpl
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
@@ -26,11 +25,7 @@ internal class FirOperatorCallImpl(
|
|||||||
override var argumentList: FirArgumentList,
|
override var argumentList: FirArgumentList,
|
||||||
override val operation: FirOperation,
|
override val operation: FirOperation,
|
||||||
) : FirOperatorCall() {
|
) : FirOperatorCall() {
|
||||||
override var typeRef: FirTypeRef = if (operation in FirOperation.BOOLEANS) {
|
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
|
||||||
FirImplicitBooleanTypeRef(null)
|
|
||||||
} else {
|
|
||||||
FirImplicitTypeRefImpl(null)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
typeRef.accept(visitor, data)
|
typeRef.accept(visitor, data)
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirComparisonExpression
|
import org.jetbrains.kotlin.fir.expressions.FirComparisonExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
||||||
@@ -400,6 +402,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(typeOperatorCall, data)
|
return transformElement(typeOperatorCall, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun transformAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformElement(assignmentOperatorStatement, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun transformEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformElement(equalityOperatorCall, data)
|
||||||
|
}
|
||||||
|
|
||||||
open fun transformWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult<FirStatement> {
|
open fun transformWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||||
return transformElement(whenExpression, data)
|
return transformElement(whenExpression, data)
|
||||||
}
|
}
|
||||||
@@ -896,6 +906,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformTypeOperatorCall(typeOperatorCall, data)
|
return transformTypeOperatorCall(typeOperatorCall, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformAssignmentOperatorStatement(assignmentOperatorStatement, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: D): CompositeTransformResult<FirStatement> {
|
||||||
|
return transformEqualityOperatorCall(equalityOperatorCall, data)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult<FirStatement> {
|
final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||||
return transformWhenExpression(whenExpression, data)
|
return transformWhenExpression(whenExpression, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirComparisonExpression
|
import org.jetbrains.kotlin.fir.expressions.FirComparisonExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
||||||
@@ -268,6 +270,10 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
|
|
||||||
open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): R = visitElement(typeOperatorCall, data)
|
open fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: D): R = visitElement(typeOperatorCall, data)
|
||||||
|
|
||||||
|
open fun visitAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement, data: D): R = visitElement(assignmentOperatorStatement, data)
|
||||||
|
|
||||||
|
open fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: D): R = visitElement(equalityOperatorCall, data)
|
||||||
|
|
||||||
open fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): R = visitElement(whenExpression, data)
|
open fun visitWhenExpression(whenExpression: FirWhenExpression, data: D): R = visitElement(whenExpression, data)
|
||||||
|
|
||||||
open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R = visitElement(whenBranch, data)
|
open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R = visitElement(whenBranch, data)
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirComparisonExpression
|
import org.jetbrains.kotlin.fir.expressions.FirComparisonExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
import org.jetbrains.kotlin.fir.expressions.FirWhenBranch
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee
|
||||||
@@ -398,6 +400,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(typeOperatorCall)
|
visitElement(typeOperatorCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement) {
|
||||||
|
visitElement(assignmentOperatorStatement)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall) {
|
||||||
|
visitElement(equalityOperatorCall)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitWhenExpression(whenExpression: FirWhenExpression) {
|
open fun visitWhenExpression(whenExpression: FirWhenExpression) {
|
||||||
visitElement(whenExpression)
|
visitElement(whenExpression)
|
||||||
}
|
}
|
||||||
@@ -894,6 +904,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitTypeOperatorCall(typeOperatorCall)
|
visitTypeOperatorCall(typeOperatorCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitAssignmentOperatorStatement(assignmentOperatorStatement: FirAssignmentOperatorStatement, data: Nothing?) {
|
||||||
|
visitAssignmentOperatorStatement(assignmentOperatorStatement)
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: Nothing?) {
|
||||||
|
visitEqualityOperatorCall(equalityOperatorCall)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Nothing?) {
|
final override fun visitWhenExpression(whenExpression: FirWhenExpression, data: Nothing?) {
|
||||||
visitWhenExpression(whenExpression)
|
visitWhenExpression(whenExpression)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -86,6 +86,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val operatorCall = element("OperatorCall", Expression, expression, call)
|
val operatorCall = element("OperatorCall", Expression, expression, call)
|
||||||
val comparisonExpression = element("ComparisonExpression", Expression, expression)
|
val comparisonExpression = element("ComparisonExpression", Expression, expression)
|
||||||
val typeOperatorCall = element("TypeOperatorCall", Expression, expression, call)
|
val typeOperatorCall = element("TypeOperatorCall", Expression, expression, call)
|
||||||
|
val assignmentOperatorStatement = element("AssignmentOperatorStatement", Expression, statement)
|
||||||
|
val equalityOperatorCall = element("EqualityOperatorCall", Expression, expression, call)
|
||||||
val whenExpression = element("WhenExpression", Expression, expression, resolvable)
|
val whenExpression = element("WhenExpression", Expression, expression, resolvable)
|
||||||
val whenBranch = element("WhenBranch", Expression)
|
val whenBranch = element("WhenBranch", Expression)
|
||||||
val qualifiedAccessWithoutCallee = element("QualifiedAccessWithoutCallee", Expression, statement)
|
val qualifiedAccessWithoutCallee = element("QualifiedAccessWithoutCallee", Expression, statement)
|
||||||
|
|||||||
+9
-9
@@ -226,15 +226,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl(operatorCall) {
|
impl(operatorCall) {
|
||||||
default("typeRef", """
|
default("typeRef", "FirImplicitTypeRefImpl(null)")
|
||||||
|if (operation in FirOperation.BOOLEANS) {
|
useTypes(implicitTypeRefType)
|
||||||
| FirImplicitBooleanTypeRef(null)
|
|
||||||
| } else {
|
|
||||||
| FirImplicitTypeRefImpl(null)
|
|
||||||
| }
|
|
||||||
""".trimMargin())
|
|
||||||
|
|
||||||
useTypes(implicitTypeRefType, implicitBooleanTypeRefType)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl(comparisonExpression) {
|
impl(comparisonExpression) {
|
||||||
@@ -244,6 +237,13 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
|
|
||||||
impl(typeOperatorCall)
|
impl(typeOperatorCall)
|
||||||
|
|
||||||
|
impl(assignmentOperatorStatement)
|
||||||
|
|
||||||
|
impl(equalityOperatorCall) {
|
||||||
|
default("typeRef", "FirImplicitBooleanTypeRef(null)")
|
||||||
|
useTypes(implicitBooleanTypeRefType)
|
||||||
|
}
|
||||||
|
|
||||||
impl(resolvedQualifier) {
|
impl(resolvedQualifier) {
|
||||||
isMutable("packageFqName", "relativeClassFqName", "isNullableLHSForCallableReference")
|
isMutable("packageFqName", "relativeClassFqName", "isNullableLHSForCallableReference")
|
||||||
default("classId") {
|
default("classId") {
|
||||||
|
|||||||
+10
@@ -222,6 +222,16 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
|||||||
needTransformOtherChildren()
|
needTransformOtherChildren()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assignmentOperatorStatement.configure {
|
||||||
|
+field("operation", operationType)
|
||||||
|
+field("leftArgument", expression).withTransform()
|
||||||
|
+field("rightArgument", expression).withTransform()
|
||||||
|
}
|
||||||
|
|
||||||
|
equalityOperatorCall.configure {
|
||||||
|
+field("operation", operationType)
|
||||||
|
}
|
||||||
|
|
||||||
whenBranch.configure {
|
whenBranch.configure {
|
||||||
+field("condition", expression).withTransform()
|
+field("condition", expression).withTransform()
|
||||||
+field("result", block).withTransform()
|
+field("result", block).withTransform()
|
||||||
|
|||||||
Reference in New Issue
Block a user