[FIR] Add fir node for binary && and ||
This commit is contained in:
@@ -949,4 +949,10 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
}
|
||||
print("|")
|
||||
}
|
||||
|
||||
override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) {
|
||||
binaryLogicExpression.leftOperand.accept(this)
|
||||
print(" ${binaryLogicExpression.kind.token} ")
|
||||
binaryLogicExpression.rightOperand.accept(this)
|
||||
}
|
||||
}
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
abstract class FirBinaryLogicExpression(psi: PsiElement?) : FirUnknownTypeExpression(psi) {
|
||||
abstract val leftOperand: FirExpression
|
||||
abstract val rightOperand: FirExpression
|
||||
abstract val kind: OperationKind
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return visitor.visitBinaryLogicExpression(this, data)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super.acceptChildren(visitor, data)
|
||||
leftOperand.accept(visitor, data)
|
||||
rightOperand.accept(visitor, data)
|
||||
}
|
||||
|
||||
abstract fun <D> transformLeftOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression
|
||||
abstract fun <D> transformRightOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression
|
||||
|
||||
enum class OperationKind(val token: String) {
|
||||
AND("&&"), OR("||")
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* 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.FirElement
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirBinaryLogicExpressionImpl(
|
||||
psi: PsiElement?,
|
||||
override var leftOperand: FirExpression,
|
||||
override var rightOperand: FirExpression,
|
||||
override val kind: OperationKind
|
||||
) : FirBinaryLogicExpression(psi) {
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
transformLeftOperand(transformer, data)
|
||||
transformRightOperand(transformer, data)
|
||||
return super.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
override fun <D> transformLeftOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression {
|
||||
leftOperand = leftOperand.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformRightOperand(transformer: FirTransformer<D>, data: D): FirBinaryLogicExpression {
|
||||
rightOperand = rightOperand.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
+11
-1
@@ -6,7 +6,9 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -280,6 +282,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformExpression(unknownTypeExpression, data)
|
||||
}
|
||||
|
||||
open fun transformBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformUnknownTypeExpression(binaryLogicExpression, data)
|
||||
}
|
||||
|
||||
open fun transformBlock(block: FirBlock, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformUnknownTypeExpression(block, data)
|
||||
}
|
||||
@@ -496,6 +502,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformBackingFieldReference(backingFieldReference, data)
|
||||
}
|
||||
|
||||
final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformBinaryLogicExpression(binaryLogicExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitBlock(block: FirBlock, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformBlock(block, data)
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -280,6 +282,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitExpression(unknownTypeExpression, data)
|
||||
}
|
||||
|
||||
open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: D): R {
|
||||
return visitUnknownTypeExpression(binaryLogicExpression, data)
|
||||
}
|
||||
|
||||
open fun visitBlock(block: FirBlock, data: D): R {
|
||||
return visitUnknownTypeExpression(block, data)
|
||||
}
|
||||
|
||||
+11
-1
@@ -6,7 +6,9 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -280,6 +282,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitExpression(unknownTypeExpression, null)
|
||||
}
|
||||
|
||||
open fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) {
|
||||
visitUnknownTypeExpression(binaryLogicExpression, null)
|
||||
}
|
||||
|
||||
open fun visitBlock(block: FirBlock) {
|
||||
visitUnknownTypeExpression(block, null)
|
||||
}
|
||||
@@ -496,6 +502,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitBackingFieldReference(backingFieldReference)
|
||||
}
|
||||
|
||||
final override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: Nothing?) {
|
||||
visitBinaryLogicExpression(binaryLogicExpression)
|
||||
}
|
||||
|
||||
final override fun visitBlock(block: FirBlock, data: Nothing?) {
|
||||
visitBlock(block)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user