diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperation.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperation.kt index d756cfdcf11..62438c7a5d1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperation.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirOperation.kt @@ -5,6 +5,8 @@ package org.jetbrains.kotlin.fir.expressions +import java.util.* + enum class FirOperation(val operator: String = "???") { // Binary RANGE(".."), @@ -37,6 +39,10 @@ enum class FirOperation(val operator: String = "???") { OTHER; companion object { - val ASSIGNMENTS = setOf(ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN, TIMES_ASSIGN, DIV_ASSIGN, REM_ASSIGN) + val ASSIGNMENTS: Set = EnumSet.of(ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN, TIMES_ASSIGN, DIV_ASSIGN, REM_ASSIGN) + + val BOOLEANS: Set = EnumSet.of( + EQ, NOT_EQ, IDENTITY, NOT_IDENTITY, LT, GT, LT_EQ, GT_EQ, IN, NOT_IN, IS, NOT_IS + ) } } \ 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/FirAbstractOperationBasedCall.kt new file mode 100644 index 00000000000..7574320dc5a --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractOperationBasedCall.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. 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.FirSession +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.types.impl.FirImplicitTypeRefImpl + +abstract class FirAbstractOperationBasedCall( + session: FirSession, + psi: PsiElement?, + val operation: FirOperation +) : FirAbstractCall(session, psi) { + override var typeRef: FirTypeRef = if (operation in FirOperation.BOOLEANS) { + FirImplicitBooleanTypeRef(session, null) + } else { + FirImplicitTypeRefImpl(session, null) + } +} \ 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 7c4ebbeb094..0ab53cad48b 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 @@ -13,5 +13,5 @@ import org.jetbrains.kotlin.fir.expressions.FirOperatorCall class FirOperatorCallImpl( session: FirSession, psi: PsiElement?, - override val operation: FirOperation -) : FirAbstractCall(session, psi), FirOperatorCall \ No newline at end of file + operation: FirOperation +) : FirAbstractOperationBasedCall(session, psi, operation), FirOperatorCall \ 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 be9c421c976..1c95b259e3a 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 @@ -17,11 +17,11 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirTypeOperatorCallImpl( session: FirSession, psi: PsiElement?, - override val operation: FirOperation, + operation: FirOperation, override var conversionTypeRef: FirTypeRef -) : FirAbstractCall(session, psi), FirTypeOperatorCall { +) : FirAbstractOperationBasedCall(session, psi, operation), FirTypeOperatorCall { 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