Skip to content

Commit d2bc6f9

Browse files
committed
Elide class and object method bodies in header mode.
^KT-78422
1 parent dbc0964 commit d2bc6f9

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@ class LightTreeRawFirDeclarationBuilder(
9797
packageDirective = convertPackageDirective(child).also { context.packageFqName = it.packageFqName }
9898
}
9999
IMPORT_LIST -> importList += convertImportDirectives(child)
100-
CLASS -> firDeclarationList += convertClass(child)
100+
CLASS -> firDeclarationList += convertClass(child, headerCompilationMode)
101101
FUN -> firDeclarationList += convertFunctionDeclaration(child) as FirDeclaration
102102
KtNodeTypes.PROPERTY -> firDeclarationList += convertPropertyDeclaration(child)
103103
TYPEALIAS -> firDeclarationList += convertTypeAlias(child)
104-
OBJECT_DECLARATION -> firDeclarationList += convertClass(child)
104+
OBJECT_DECLARATION -> firDeclarationList += convertClass(child, headerCompilationMode)
105105
DESTRUCTURING_DECLARATION -> {
106106
val initializer = buildFirDestructuringDeclarationInitializer(child)
107107
firDeclarationList += buildErrorNonLocalDestructuringDeclaration(child.toFirSourceElement(), initializer)
@@ -144,7 +144,7 @@ class LightTreeRawFirDeclarationBuilder(
144144
val firStatements = block.forEachChildrenReturnList { node, container ->
145145
if (!generateHeaders || container.isEmpty()) { // Take only the first statement which could be a contract for header generation.
146146
when (node.tokenType) {
147-
CLASS, OBJECT_DECLARATION -> container += convertClass(node) as FirStatement
147+
CLASS, OBJECT_DECLARATION -> container += convertClass(node, false)
148148
FUN -> container += convertFunctionDeclaration(node)
149149
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node) as FirStatement
150150
DESTRUCTURING_DECLARATION -> container +=
@@ -461,7 +461,7 @@ class LightTreeRawFirDeclarationBuilder(
461461
/**
462462
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject
463463
*/
464-
private fun convertClass(classNode: LighterASTNode): FirDeclaration {
464+
private fun convertClass(classNode: LighterASTNode, generateHeaders: Boolean): FirDeclaration {
465465
var modifiers: ModifierList? = null
466466
var classKind: ClassKind = ClassKind.CLASS
467467
var identifier: String? = null
@@ -471,6 +471,7 @@ class LightTreeRawFirDeclarationBuilder(
471471
var classBody: LighterASTNode? = null
472472
var superTypeList: LighterASTNode? = null
473473
var typeParameterList: LighterASTNode? = null
474+
var headerMode = generateHeaders
474475
classNode.forEachChildren {
475476
when (it.tokenType) {
476477
MODIFIER_LIST -> modifiers = convertModifierList(it, isInClass = true)
@@ -479,6 +480,9 @@ class LightTreeRawFirDeclarationBuilder(
479480
}
480481

481482
val calculatedModifiers = modifiers ?: ModifierList()
483+
if (calculatedModifiers.isInlineClass()) {
484+
headerMode = false
485+
}
482486
val className = identifier.nameAsSafeName(if (calculatedModifiers.isCompanion()) "Companion" else "")
483487
val isLocalWithinParent = classNode.getParent()?.elementType != CLASS_BODY && isClassLocal(classNode) { getParent() }
484488
val classIsExpect = calculatedModifiers.hasExpect() || context.containerIsExpect
@@ -637,7 +641,7 @@ class LightTreeRawFirDeclarationBuilder(
637641

638642
//parse declarations
639643
classBody?.let {
640-
addDeclarations(convertClassBody(it, classWrapper))
644+
addDeclarations(convertClassBody(it, classWrapper, headerMode))
641645
}
642646

643647
//parse data class
@@ -923,10 +927,14 @@ class LightTreeRawFirDeclarationBuilder(
923927
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
924928
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
925929
*/
926-
private fun convertClassBody(classBody: LighterASTNode, classWrapper: ClassWrapper?): List<FirDeclaration> {
930+
private fun convertClassBody(
931+
classBody: LighterASTNode,
932+
classWrapper: ClassWrapper?,
933+
generateHeaders: Boolean = false
934+
): List<FirDeclaration> {
927935
val modifierLists = mutableListOf<LighterASTNode>()
928936
val firDeclarations = classBody.forEachChildrenReturnList { node, container ->
929-
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists)
937+
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists, generateHeaders)
930938
}
931939

932940
convertDanglingModifierListsInClassBody(modifierLists, firDeclarations)
@@ -938,14 +946,15 @@ class LightTreeRawFirDeclarationBuilder(
938946
container: MutableList<FirDeclaration>,
939947
classWrapper: ClassWrapper?,
940948
modifierLists: MutableList<LighterASTNode>,
949+
generateHeaders: Boolean = false
941950
) {
942951
when (node.tokenType) {
943952
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper!!)
944-
CLASS -> container += convertClass(node)
953+
CLASS -> container += convertClass(node, generateHeaders)
945954
FUN -> container += convertFunctionDeclaration(node) as FirDeclaration
946955
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
947956
TYPEALIAS -> container += convertTypeAlias(node)
948-
OBJECT_DECLARATION -> container += convertClass(node)
957+
OBJECT_DECLARATION -> container += convertClass(node, generateHeaders)
949958
CLASS_INITIALIZER -> container += convertAnonymousInitializer(node, classWrapper!!.classBuilder.ownerRegularOrAnonymousObjectSymbol) //anonymousInitializer
950959
SECONDARY_CONSTRUCTOR -> container += convertSecondaryConstructor(node, classWrapper!!)
951960
MODIFIER_LIST -> modifierLists += node

0 commit comments

Comments
 (0)