Skip to content

Commit 2587ace

Browse files
committed
Elide class and object method bodies in header mode.
^KT-78422
1 parent 55111d5 commit 2587ace

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirDeclarationBuilder.kt

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ class LightTreeRawFirDeclarationBuilder(
9696
packageDirective = convertPackageDirective(child).also { context.packageFqName = it.packageFqName }
9797
}
9898
IMPORT_LIST -> importList += convertImportDirectives(child)
99-
CLASS -> firDeclarationList += convertClass(child)
99+
CLASS -> firDeclarationList += convertClass(child, headerCompilationMode)
100100
FUN -> firDeclarationList += convertFunctionDeclaration(child, headerCompilationMode) as FirDeclaration
101101
KtNodeTypes.PROPERTY -> firDeclarationList += convertPropertyDeclaration(child)
102102
TYPEALIAS -> firDeclarationList += convertTypeAlias(child)
103-
OBJECT_DECLARATION -> firDeclarationList += convertClass(child)
103+
OBJECT_DECLARATION -> firDeclarationList += convertClass(child, headerCompilationMode)
104104
DESTRUCTURING_DECLARATION -> {
105105
val initializer = buildFirDestructuringDeclarationInitializer(child)
106106
firDeclarationList += buildErrorNonLocalDestructuringDeclaration(child.toFirSourceElement(), initializer)
@@ -139,11 +139,15 @@ class LightTreeRawFirDeclarationBuilder(
139139
return convertBlockExpressionWithoutBuilding(block, generateHeaders = generateHeaders).build()
140140
}
141141

142-
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 {
143147
val firStatements = block.forEachChildrenReturnList { node, container ->
144148
if (!generateHeaders || container.isEmpty()) { // Take only the first statement which could be a contract for header generation.
145149
when (node.tokenType) {
146-
CLASS, OBJECT_DECLARATION -> container += convertClass(node) as FirStatement
150+
CLASS, OBJECT_DECLARATION -> container += convertClass(node, generateHeaders) as FirStatement
147151
FUN -> container += convertFunctionDeclaration(node)
148152
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node) as FirStatement
149153
DESTRUCTURING_DECLARATION -> container +=
@@ -460,7 +464,7 @@ class LightTreeRawFirDeclarationBuilder(
460464
/**
461465
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject
462466
*/
463-
private fun convertClass(classNode: LighterASTNode): FirDeclaration {
467+
private fun convertClass(classNode: LighterASTNode, generateHeaders: Boolean): FirDeclaration {
464468
var modifiers: ModifierList? = null
465469
var classKind: ClassKind = ClassKind.CLASS
466470
var identifier: String? = null
@@ -636,7 +640,7 @@ class LightTreeRawFirDeclarationBuilder(
636640

637641
//parse declarations
638642
classBody?.let {
639-
addDeclarations(convertClassBody(it, classWrapper))
643+
addDeclarations(convertClassBody(it, classWrapper, generateHeaders))
640644
}
641645

642646
//parse data class
@@ -922,10 +926,14 @@ class LightTreeRawFirDeclarationBuilder(
922926
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
923927
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
924928
*/
925-
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> {
926934
val modifierLists = mutableListOf<LighterASTNode>()
927935
val firDeclarations = classBody.forEachChildrenReturnList { node, container ->
928-
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists)
936+
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists, generateHeaders)
929937
}
930938

931939
convertDanglingModifierListsInClassBody(modifierLists, firDeclarations)
@@ -937,14 +945,15 @@ class LightTreeRawFirDeclarationBuilder(
937945
container: MutableList<FirDeclaration>,
938946
classWrapper: ClassWrapper?,
939947
modifierLists: MutableList<LighterASTNode>,
948+
generateHeaders: Boolean = false
940949
) {
941950
when (node.tokenType) {
942951
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper!!)
943-
CLASS -> container += convertClass(node)
944-
FUN -> container += convertFunctionDeclaration(node) as FirDeclaration
952+
CLASS -> container += convertClass(node, generateHeaders)
953+
FUN -> container += convertFunctionDeclaration(node, generateHeaders) as FirDeclaration
945954
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
946955
TYPEALIAS -> container += convertTypeAlias(node)
947-
OBJECT_DECLARATION -> container += convertClass(node)
956+
OBJECT_DECLARATION -> container += convertClass(node, generateHeaders)
948957
CLASS_INITIALIZER -> container += convertAnonymousInitializer(node, classWrapper!!.classBuilder.ownerRegularOrAnonymousObjectSymbol) //anonymousInitializer
949958
SECONDARY_CONSTRUCTOR -> container += convertSecondaryConstructor(node, classWrapper!!)
950959
MODIFIER_LIST -> modifierLists += node

0 commit comments

Comments
 (0)