[FIR] Code cleanup: DeclarationsConverter

This commit is contained in:
Mikhail Glukhikh
2020-02-19 22:47:59 +03:00
parent 5d7999a808
commit 3921613956
@@ -48,7 +48,7 @@ import org.jetbrains.kotlin.name.SpecialNames
class DeclarationsConverter( class DeclarationsConverter(
session: FirSession, session: FirSession,
val baseScopeProvider: FirScopeProvider, private val baseScopeProvider: FirScopeProvider,
private val stubMode: Boolean, private val stubMode: Boolean,
tree: FlyweightCapableTreeStructure<LighterASTNode>, tree: FlyweightCapableTreeStructure<LighterASTNode>,
context: Context<LighterASTNode> = Context() context: Context<LighterASTNode> = Context()
@@ -377,7 +377,7 @@ class DeclarationsConverter(
isInline = modifiers.hasInline() isInline = modifiers.hasInline()
} }
val classBuilder = if(status.modality == Modality.SEALED) { val classBuilder = if (status.modality == Modality.SEALED) {
FirSealedClassBuilder() FirSealedClassBuilder()
} else { } else {
FirClassImplBuilder() FirClassImplBuilder()
@@ -523,17 +523,13 @@ class DeclarationsConverter(
private fun convertEnumEntry(enumEntry: LighterASTNode, classWrapper: ClassWrapper): FirEnumEntry { private fun convertEnumEntry(enumEntry: LighterASTNode, classWrapper: ClassWrapper): FirEnumEntry {
var modifiers = Modifier() var modifiers = Modifier()
lateinit var identifier: String lateinit var identifier: String
var hasInitializerList = false
val enumSuperTypeCallEntry = mutableListOf<FirExpression>() val enumSuperTypeCallEntry = mutableListOf<FirExpression>()
var classBodyNode: LighterASTNode? = null var classBodyNode: LighterASTNode? = null
enumEntry.forEachChildren { enumEntry.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
MODIFIER_LIST -> modifiers = convertModifierList(it) MODIFIER_LIST -> modifiers = convertModifierList(it)
IDENTIFIER -> identifier = it.asText IDENTIFIER -> identifier = it.asText
INITIALIZER_LIST -> { INITIALIZER_LIST -> enumSuperTypeCallEntry += convertInitializerList(it)
hasInitializerList = true
enumSuperTypeCallEntry += convertInitializerList(it)
}
CLASS_BODY -> classBodyNode = it CLASS_BODY -> classBodyNode = it
} }
} }
@@ -758,8 +754,12 @@ class DeclarationsConverter(
val isThis = (isImplicit && classWrapper.hasPrimaryConstructor) || thisKeywordPresent val isThis = (isImplicit && classWrapper.hasPrimaryConstructor) || thisKeywordPresent
val delegatedType = val delegatedType =
if (classWrapper.isObjectLiteral() || classWrapper.isInterface()) when { if (classWrapper.isObjectLiteral() || classWrapper.isInterface()) when {
isThis -> buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Constructor in object", DiagnosticKind.ConstructorInObject) } isThis -> buildErrorTypeRef {
else -> buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("No super type", DiagnosticKind.Syntax) } diagnostic = FirSimpleDiagnostic("Constructor in object", DiagnosticKind.ConstructorInObject)
}
else -> buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("No super type", DiagnosticKind.Syntax)
}
} }
else when { else when {
isThis -> classWrapper.delegatedSelfTypeRef isThis -> classWrapper.delegatedSelfTypeRef
@@ -871,15 +871,18 @@ class DeclarationsConverter(
} }
status = FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL) status = FirDeclarationStatusImpl(Visibilities.LOCAL, Modality.FINAL)
val receiver = delegateExpression?.let { expressionConverter.getAsFirExpression<FirExpression>(it, "Incorrect delegate expression") } val receiver = delegateExpression?.let {
expressionConverter.getAsFirExpression<FirExpression>(it, "Incorrect delegate expression")
}
generateAccessorsByDelegate( generateAccessorsByDelegate(
delegateBuilder,baseSession, delegateBuilder,
baseSession,
member = false, member = false,
extension = false, extension = false,
stubMode, stubMode,
receiver receiver
) )
}else { } else {
this.isLocal = false this.isLocal = false
receiverTypeRef = receiverType receiverTypeRef = receiverType
symbol = FirPropertySymbol(callableIdForName(propertyName)) symbol = FirPropertySymbol(callableIdForName(propertyName))
@@ -904,11 +907,13 @@ class DeclarationsConverter(
val receiver = delegateExpression?.let { val receiver = delegateExpression?.let {
expressionConverter.getAsFirExpression<FirExpression>(it, "Should have delegate") expressionConverter.getAsFirExpression<FirExpression>(it, "Should have delegate")
} }
generateAccessorsByDelegate(delegateBuilder, baseSession, generateAccessorsByDelegate(
delegateBuilder, baseSession,
member = parentNode?.tokenType != KT_FILE, member = parentNode?.tokenType != KT_FILE,
extension = receiverType != null, extension = receiverType != null,
stubMode, stubMode,
receiver) receiver
)
} }
annotations += modifiers.annotations annotations += modifiers.annotations
} }
@@ -1127,7 +1132,7 @@ class DeclarationsConverter(
typeParameters += firTypeParameters typeParameters += firTypeParameters
} }
valueParametersList?.let { valueParameters += convertValueParameters(it).map { it.firValueParameter } } valueParametersList?.let { list -> valueParameters += convertValueParameters(list).map { it.firValueParameter } }
body = convertFunctionBody(block, expression) body = convertFunctionBody(block, expression)
context.firFunctionTargets.removeLast() context.firFunctionTargets.removeLast()
}.build().also { }.build().also {
@@ -1161,7 +1166,9 @@ class DeclarationsConverter(
} }
return if (!stubMode) { return if (!stubMode) {
val blockTree = LightTree2Fir.buildLightTreeBlockExpression(block.asText) val blockTree = LightTree2Fir.buildLightTreeBlockExpression(block.asText)
return DeclarationsConverter(baseSession, baseScopeProvider, stubMode, blockTree, context).convertBlockExpression(blockTree.root) return DeclarationsConverter(
baseSession, baseScopeProvider, stubMode, blockTree, context
).convertBlockExpression(blockTree.root)
} else { } else {
FirSingleExpressionBlock( FirSingleExpressionBlock(
buildExpressionStub().toReturn() buildExpressionStub().toReturn()
@@ -1224,7 +1231,9 @@ class DeclarationsConverter(
*/ */
private fun convertExplicitDelegation(explicitDelegation: LighterASTNode): FirDelegatedTypeRef { private fun convertExplicitDelegation(explicitDelegation: LighterASTNode): FirDelegatedTypeRef {
lateinit var firTypeRef: FirTypeRef lateinit var firTypeRef: FirTypeRef
var firExpression: FirExpression? = buildErrorExpression(explicitDelegation.toFirSourceElement(), FirSimpleDiagnostic("Should have delegate", DiagnosticKind.Syntax)) var firExpression: FirExpression? = buildErrorExpression(
explicitDelegation.toFirSourceElement(), FirSimpleDiagnostic("Should have delegate", DiagnosticKind.Syntax)
)
explicitDelegation.forEachChildren { explicitDelegation.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
TYPE_REFERENCE -> firTypeRef = convertType(it) TYPE_REFERENCE -> firTypeRef = convertType(it)