@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.lightTree.converter
7
7
8
8
import com.intellij.lang.LighterASTNode
9
9
import com.intellij.psi.TokenType
10
- import com.intellij.util.containers.addIfNotNull
11
10
import com.intellij.util.diff.FlyweightCapableTreeStructure
12
11
import org.jetbrains.kotlin.*
13
12
import org.jetbrains.kotlin.ElementTypeUtils.isExpression
@@ -97,11 +96,11 @@ class LightTreeRawFirDeclarationBuilder(
97
96
packageDirective = convertPackageDirective(child).also { context.packageFqName = it.packageFqName }
98
97
}
99
98
IMPORT_LIST -> importList + = convertImportDirectives(child)
100
- CLASS -> firDeclarationList + = convertClass(child)
99
+ CLASS -> firDeclarationList + = convertClass(child, headerCompilationMode )
101
100
FUN -> firDeclarationList + = convertFunctionDeclaration(child) as FirDeclaration
102
101
KtNodeTypes .PROPERTY -> firDeclarationList + = convertPropertyDeclaration(child)
103
102
TYPEALIAS -> firDeclarationList + = convertTypeAlias(child)
104
- OBJECT_DECLARATION -> firDeclarationList + = convertClass(child)
103
+ OBJECT_DECLARATION -> firDeclarationList + = convertClass(child, headerCompilationMode )
105
104
DESTRUCTURING_DECLARATION -> {
106
105
val initializer = buildFirDestructuringDeclarationInitializer(child)
107
106
firDeclarationList + = buildErrorNonLocalDestructuringDeclaration(child.toFirSourceElement(), initializer)
@@ -140,11 +139,15 @@ class LightTreeRawFirDeclarationBuilder(
140
139
return convertBlockExpressionWithoutBuilding(block, generateHeaders = generateHeaders).build()
141
140
}
142
141
143
- fun convertBlockExpressionWithoutBuilding (block : LighterASTNode , kind : KtFakeSourceElementKind ? = null, generateHeaders : Boolean = false): FirBlockBuilder {
142
+ fun convertBlockExpressionWithoutBuilding (
143
+ block : LighterASTNode ,
144
+ kind : KtFakeSourceElementKind ? = null,
145
+ generateHeaders : Boolean = false
146
+ ): FirBlockBuilder {
144
147
val firStatements = block.forEachChildrenReturnList { node, container ->
145
148
if (! generateHeaders || container.isEmpty()) { // Take only the first statement which could be a contract for header generation.
146
149
when (node.tokenType) {
147
- CLASS , OBJECT_DECLARATION -> container + = convertClass(node) as FirStatement
150
+ CLASS , OBJECT_DECLARATION -> container + = convertClass(node, generateHeaders ) as FirStatement
148
151
FUN -> container + = convertFunctionDeclaration(node)
149
152
KtNodeTypes .PROPERTY -> container + = convertPropertyDeclaration(node) as FirStatement
150
153
DESTRUCTURING_DECLARATION -> container + =
@@ -461,7 +464,7 @@ class LightTreeRawFirDeclarationBuilder(
461
464
/* *
462
465
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject
463
466
*/
464
- private fun convertClass (classNode : LighterASTNode ): FirDeclaration {
467
+ private fun convertClass (classNode : LighterASTNode , generateHeaders : Boolean ): FirDeclaration {
465
468
var modifiers: ModifierList ? = null
466
469
var classKind: ClassKind = ClassKind .CLASS
467
470
var identifier: String? = null
@@ -637,7 +640,7 @@ class LightTreeRawFirDeclarationBuilder(
637
640
638
641
// parse declarations
639
642
classBody?.let {
640
- addDeclarations(convertClassBody(it, classWrapper))
643
+ addDeclarations(convertClassBody(it, classWrapper, generateHeaders ))
641
644
}
642
645
643
646
// parse data class
@@ -923,10 +926,14 @@ class LightTreeRawFirDeclarationBuilder(
923
926
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
924
927
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
925
928
*/
926
- private fun convertClassBody (classBody : LighterASTNode , classWrapper : ClassWrapper ? ): List <FirDeclaration > {
929
+ private fun convertClassBody (
930
+ classBody : LighterASTNode ,
931
+ classWrapper : ClassWrapper ? ,
932
+ generateHeaders : Boolean = false
933
+ ): List <FirDeclaration > {
927
934
val modifierLists = mutableListOf<LighterASTNode >()
928
935
val firDeclarations = classBody.forEachChildrenReturnList { node, container ->
929
- convertDeclarationFromClassBody(node, container, classWrapper, modifierLists)
936
+ convertDeclarationFromClassBody(node, container, classWrapper, modifierLists, generateHeaders )
930
937
}
931
938
932
939
convertDanglingModifierListsInClassBody(modifierLists, firDeclarations)
@@ -938,14 +945,15 @@ class LightTreeRawFirDeclarationBuilder(
938
945
container : MutableList <FirDeclaration >,
939
946
classWrapper : ClassWrapper ? ,
940
947
modifierLists : MutableList <LighterASTNode >,
948
+ generateHeaders : Boolean = false
941
949
) {
942
950
when (node.tokenType) {
943
951
ENUM_ENTRY -> container + = convertEnumEntry(node, classWrapper!! )
944
- CLASS -> container + = convertClass(node)
952
+ CLASS -> container + = convertClass(node, generateHeaders )
945
953
FUN -> container + = convertFunctionDeclaration(node) as FirDeclaration
946
954
KtNodeTypes .PROPERTY -> container + = convertPropertyDeclaration(node, classWrapper)
947
955
TYPEALIAS -> container + = convertTypeAlias(node)
948
- OBJECT_DECLARATION -> container + = convertClass(node)
956
+ OBJECT_DECLARATION -> container + = convertClass(node, generateHeaders )
949
957
CLASS_INITIALIZER -> container + = convertAnonymousInitializer(node, classWrapper!! .classBuilder.ownerRegularOrAnonymousObjectSymbol) // anonymousInitializer
950
958
SECONDARY_CONSTRUCTOR -> container + = convertSecondaryConstructor(node, classWrapper!! )
951
959
MODIFIER_LIST -> modifierLists + = node
0 commit comments