Remove duplicate code from convertIsExpresion and convertBinaryWithType
This commit is contained in:
committed by
Mikhail Glukhikh
parent
d03b6cc014
commit
2ca7978544
+16
-29
@@ -7,13 +7,13 @@ package org.jetbrains.kotlin.fir.lightTree.converter
|
|||||||
|
|
||||||
import com.intellij.lang.LighterASTNode
|
import com.intellij.lang.LighterASTNode
|
||||||
import com.intellij.psi.TokenType
|
import com.intellij.psi.TokenType
|
||||||
import com.intellij.psi.impl.source.tree.java.PsiForStatementImpl
|
|
||||||
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||||
import org.jetbrains.kotlin.KtNodeTypes.*
|
import org.jetbrains.kotlin.KtNodeTypes.*
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.FirWhenSubject
|
||||||
import org.jetbrains.kotlin.fir.builder.*
|
import org.jetbrains.kotlin.fir.builder.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousFunctionImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirAnonymousFunctionImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorLoop
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirVariableImpl
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
@@ -26,13 +26,13 @@ import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
|||||||
import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference
|
import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.SpecialNames
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
import org.jetbrains.kotlin.psi.KtForExpression
|
|
||||||
import org.jetbrains.kotlin.psi.stubs.elements.KtConstantExpressionElementType
|
import org.jetbrains.kotlin.psi.stubs.elements.KtConstantExpressionElementType
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
@@ -59,8 +59,12 @@ class ExpressionsConverter(
|
|||||||
.convertLambdaExpression(lambdaTree.root)
|
.convertLambdaExpression(lambdaTree.root)
|
||||||
}
|
}
|
||||||
BINARY_EXPRESSION -> convertBinaryExpression(expression)
|
BINARY_EXPRESSION -> convertBinaryExpression(expression)
|
||||||
BINARY_WITH_TYPE -> convertBinaryWithType(expression)
|
BINARY_WITH_TYPE -> convertBinaryWithTypeRHSExpression(expression) {
|
||||||
IS_EXPRESSION -> convertIsExpression(expression)
|
this.getOperationSymbol().toFirOperation()
|
||||||
|
}
|
||||||
|
IS_EXPRESSION -> convertBinaryWithTypeRHSExpression(expression) {
|
||||||
|
if (this == "is") FirOperation.IS else FirOperation.NOT_IS
|
||||||
|
}
|
||||||
LABELED_EXPRESSION -> convertLabeledExpression(expression)
|
LABELED_EXPRESSION -> convertLabeledExpression(expression)
|
||||||
PREFIX_EXPRESSION, POSTFIX_EXPRESSION -> convertUnaryExpression(expression)
|
PREFIX_EXPRESSION, POSTFIX_EXPRESSION -> convertUnaryExpression(expression)
|
||||||
ANNOTATED_EXPRESSION -> convertAnnotatedExpression(expression)
|
ANNOTATED_EXPRESSION -> convertAnnotatedExpression(expression)
|
||||||
@@ -222,8 +226,12 @@ class ExpressionsConverter(
|
|||||||
/**
|
/**
|
||||||
* @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.Precedence.parseRightHandSide
|
* @see org.jetbrains.kotlin.parsing.KotlinExpressionParsing.Precedence.parseRightHandSide
|
||||||
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitBinaryWithTypeRHSExpression
|
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitBinaryWithTypeRHSExpression
|
||||||
|
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitIsExpression
|
||||||
*/
|
*/
|
||||||
private fun convertBinaryWithType(binaryExpression: LighterASTNode): FirTypeOperatorCall {
|
private fun convertBinaryWithTypeRHSExpression(
|
||||||
|
binaryExpression: LighterASTNode,
|
||||||
|
toFirOperation: String.() -> FirOperation
|
||||||
|
): FirTypeOperatorCall {
|
||||||
lateinit var operationTokenName: String
|
lateinit var operationTokenName: String
|
||||||
var leftArgAsFir: FirExpression = FirErrorExpressionImpl(session, null, "No left operand")
|
var leftArgAsFir: FirExpression = FirErrorExpressionImpl(session, null, "No left operand")
|
||||||
lateinit var firType: FirTypeRef
|
lateinit var firType: FirTypeRef
|
||||||
@@ -235,28 +243,7 @@ class ExpressionsConverter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val operation = operationTokenName.getOperationSymbol().toFirOperation()
|
val operation = operationTokenName.toFirOperation()
|
||||||
return FirTypeOperatorCallImpl(session, null, operation, firType).apply {
|
|
||||||
arguments += leftArgAsFir
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitIsExpression
|
|
||||||
*/
|
|
||||||
private fun convertIsExpression(isExpression: LighterASTNode): FirTypeOperatorCall {
|
|
||||||
lateinit var operationTokenName: String
|
|
||||||
var leftArgAsFir: FirExpression = FirErrorExpressionImpl(session, null, "No left operand")
|
|
||||||
lateinit var firType: FirTypeRef
|
|
||||||
isExpression.forEachChildren {
|
|
||||||
when (it.tokenType) {
|
|
||||||
OPERATION_REFERENCE -> operationTokenName = it.asText
|
|
||||||
TYPE_REFERENCE -> firType = declarationsConverter.convertType(it)
|
|
||||||
else -> if (it.isExpression()) leftArgAsFir = getAsFirExpression(it, "No left operand")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val operation = if (operationTokenName == "is") FirOperation.IS else FirOperation.NOT_IS
|
|
||||||
return FirTypeOperatorCallImpl(session, null, operation, firType).apply {
|
return FirTypeOperatorCallImpl(session, null, operation, firType).apply {
|
||||||
arguments += leftArgAsFir
|
arguments += leftArgAsFir
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user