Raw FIR builder: cleanup code

This commit is contained in:
Mikhail Glukhikh
2019-03-28 18:43:45 +03:00
parent 33729aaf9b
commit 057156f323
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.*
import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.lexer.KtTokens.*
import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
@@ -251,8 +250,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
if (hasDefaultValue()) { if (hasDefaultValue()) {
{ defaultValue }.toFirExpression("Should have default value") { defaultValue }.toFirExpression("Should have default value")
} else null, } else null,
isCrossinline = hasModifier(KtTokens.CROSSINLINE_KEYWORD), isCrossinline = hasModifier(CROSSINLINE_KEYWORD),
isNoinline = hasModifier(KtTokens.NOINLINE_KEYWORD), isNoinline = hasModifier(NOINLINE_KEYWORD),
isVararg = isVarArg isVararg = isVarArg
) )
extractAnnotationsTo(firValueParameter) extractAnnotationsTo(firValueParameter)
@@ -271,7 +270,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
modality, modality,
hasExpectModifier(), hasExpectModifier(),
hasActualModifier(), hasActualModifier(),
isOverride = hasModifier(KtTokens.OVERRIDE_KEYWORD), isOverride = hasModifier(OVERRIDE_KEYWORD),
isConst = false, isConst = false,
isLateInit = false, isLateInit = false,
receiverTypeRef = null, receiverTypeRef = null,
@@ -510,10 +509,10 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
classOrObject.hasExpectModifier(), classOrObject.hasExpectModifier(),
classOrObject.hasActualModifier(), classOrObject.hasActualModifier(),
classKind, classKind,
isInner = classOrObject.hasModifier(KtTokens.INNER_KEYWORD), isInner = classOrObject.hasModifier(INNER_KEYWORD),
isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true, isCompanion = (classOrObject as? KtObjectDeclaration)?.isCompanion() == true,
isData = (classOrObject as? KtClass)?.isData() == true, isData = (classOrObject as? KtClass)?.isData() == true,
isInline = classOrObject.hasModifier(KtTokens.INLINE_KEYWORD) isInline = classOrObject.hasModifier(INLINE_KEYWORD)
) )
classOrObject.extractAnnotationsTo(firClass) classOrObject.extractAnnotationsTo(firClass)
classOrObject.extractTypeParametersTo(firClass) classOrObject.extractTypeParametersTo(firClass)
@@ -607,13 +606,13 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
function.modality, function.modality,
function.hasExpectModifier(), function.hasExpectModifier(),
function.hasActualModifier(), function.hasActualModifier(),
function.hasModifier(KtTokens.OVERRIDE_KEYWORD), function.hasModifier(OVERRIDE_KEYWORD),
function.hasModifier(KtTokens.OPERATOR_KEYWORD), function.hasModifier(OPERATOR_KEYWORD),
function.hasModifier(KtTokens.INFIX_KEYWORD), function.hasModifier(INFIX_KEYWORD),
function.hasModifier(KtTokens.INLINE_KEYWORD), function.hasModifier(INLINE_KEYWORD),
function.hasModifier(KtTokens.TAILREC_KEYWORD), function.hasModifier(TAILREC_KEYWORD),
function.hasModifier(KtTokens.EXTERNAL_KEYWORD), function.hasModifier(EXTERNAL_KEYWORD),
function.hasModifier(KtTokens.SUSPEND_KEYWORD), function.hasModifier(SUSPEND_KEYWORD),
receiverType, receiverType,
returnType returnType
) )
@@ -753,9 +752,9 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
property.modality, property.modality,
property.hasExpectModifier(), property.hasExpectModifier(),
property.hasActualModifier(), property.hasActualModifier(),
property.hasModifier(KtTokens.OVERRIDE_KEYWORD), property.hasModifier(OVERRIDE_KEYWORD),
property.hasModifier(KtTokens.CONST_KEYWORD), property.hasModifier(CONST_KEYWORD),
property.hasModifier(KtTokens.LATEINIT_KEYWORD), property.hasModifier(LATEINIT_KEYWORD),
property.receiverTypeReference.convertSafe(), property.receiverTypeReference.convertSafe(),
propertyType, propertyType,
isVar, isVar,
@@ -780,8 +779,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
fun KtTypeElement?.unwrapNullable(): KtTypeElement? = fun KtTypeElement?.unwrapNullable(): KtTypeElement? =
if (this is KtNullableType) this.innerType.unwrapNullable() else this if (this is KtNullableType) this.innerType.unwrapNullable() else this
val unwrappedElement = typeElement.unwrapNullable() val firType = when (val unwrappedElement = typeElement.unwrapNullable()) {
val firType = when (unwrappedElement) {
is KtDynamicType -> FirDynamicTypeRefImpl(session, typeReference, isNullable) is KtDynamicType -> FirDynamicTypeRefImpl(session, typeReference, isNullable)
is KtUserType -> { is KtUserType -> {
var referenceExpression = unwrappedElement.referenceExpression var referenceExpression = unwrappedElement.referenceExpression
@@ -851,7 +849,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
FirTypeParameterSymbol(), FirTypeParameterSymbol(),
parameterName, parameterName,
parameter.variance, parameter.variance,
parameter.hasModifier(KtTokens.REIFIED_KEYWORD) parameter.hasModifier(REIFIED_KEYWORD)
) )
parameter.extractAnnotationsTo(firTypeParameter) parameter.extractAnnotationsTo(firTypeParameter)
val extendsBound = parameter.extendsBound val extendsBound = parameter.extendsBound
@@ -1120,9 +1118,8 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
explicitReceiver = generateAccessExpression(this@RawFirBuilder.session, expression, iteratorName) explicitReceiver = generateAccessExpression(this@RawFirBuilder.session, expression, iteratorName)
} }
).configure { ).configure {
val body = expression.body
// NB: just body.toFirBlock() isn't acceptable here because we need to add some statements // NB: just body.toFirBlock() isn't acceptable here because we need to add some statements
val block = when (body) { val block = when (val body = expression.body) {
is KtBlockExpression -> body.accept(this@Visitor, Unit) as FirBlockImpl is KtBlockExpression -> body.accept(this@Visitor, Unit) as FirBlockImpl
null -> FirBlockImpl(this@RawFirBuilder.session, body) null -> FirBlockImpl(this@RawFirBuilder.session, body)
else -> FirBlockImpl(this@RawFirBuilder.session, body).apply { statements += body.toFirStatement() } else -> FirBlockImpl(this@RawFirBuilder.session, body).apply { statements += body.toFirStatement() }
@@ -1143,7 +1140,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
multiDeclaration, multiDeclaration,
firLoopParameter, firLoopParameter,
tmpVariable = true, tmpVariable = true,
extractAnnotationsTo = { extractAnnotationsTo(it) } extractAnnotationsTo = { extractAnnotationsTo(it) }
) { toFirOrImplicitType() } ) { toFirOrImplicitType() }
if (destructuringBlock is FirBlock) { if (destructuringBlock is FirBlock) {
for ((index, statement) in destructuringBlock.statements.withIndex()) { for ((index, statement) in destructuringBlock.statements.withIndex()) {
@@ -1209,11 +1206,11 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
override fun visitBinaryExpression(expression: KtBinaryExpression, data: Unit): FirElement { override fun visitBinaryExpression(expression: KtBinaryExpression, data: Unit): FirElement {
val operationToken = expression.operationToken val operationToken = expression.operationToken
val rightArgument = expression.right.toFirExpression("No right operand") val rightArgument = expression.right.toFirExpression("No right operand")
if (operationToken == KtTokens.ELVIS) { if (operationToken == ELVIS) {
return expression.elvisToWhen() return expression.elvisToWhen()
} }
val conventionCallName = operationToken.toBinaryName() val conventionCallName = operationToken.toBinaryName()
return if (conventionCallName != null || operationToken == KtTokens.IDENTIFIER) { return if (conventionCallName != null || operationToken == IDENTIFIER) {
FirFunctionCallImpl( FirFunctionCallImpl(
session, expression session, expression
).apply { ).apply {
@@ -1258,7 +1255,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
override fun visitUnaryExpression(expression: KtUnaryExpression, data: Unit): FirElement { override fun visitUnaryExpression(expression: KtUnaryExpression, data: Unit): FirElement {
val operationToken = expression.operationToken val operationToken = expression.operationToken
val argument = expression.baseExpression val argument = expression.baseExpression
if (operationToken == KtTokens.EXCLEXCL) { if (operationToken == EXCLEXCL) {
return expression.bangBangToWhen() return expression.bangBangToWhen()
} }
val conventionCallName = operationToken.toUnaryName() val conventionCallName = operationToken.toUnaryName()