Skip to content

Commit b5899d8

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

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

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

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.lightTree.converter
77

88
import com.intellij.lang.LighterASTNode
99
import com.intellij.psi.TokenType
10-
import com.intellij.util.containers.addIfNotNull
1110
import com.intellij.util.diff.FlyweightCapableTreeStructure
1211
import org.jetbrains.kotlin.*
1312
import org.jetbrains.kotlin.ElementTypeUtils.isExpression
@@ -97,11 +96,11 @@ class LightTreeRawFirDeclarationBuilder(
9796
packageDirective = convertPackageDirective(child).also { context.packageFqName = it.packageFqName }
9897
}
9998
IMPORT_LIST -> importList += convertImportDirectives(child)
100-
CLASS -> firDeclarationList += convertClass(child)
99+
CLASS -> firDeclarationList += convertClass(child, headerCompilationMode)
101100
FUN -> firDeclarationList += convertFunctionDeclaration(child) as FirDeclaration
102101
KtNodeTypes.PROPERTY -> firDeclarationList += convertPropertyDeclaration(child)
103102
TYPEALIAS -> firDeclarationList += convertTypeAlias(child)
104-
OBJECT_DECLARATION -> firDeclarationList += convertClass(child)
103+
OBJECT_DECLARATION -> firDeclarationList += convertClass(child, headerCompilationMode)
105104
DESTRUCTURING_DECLARATION -> {
106105
val initializer = buildFirDestructuringDeclarationInitializer(child)
107106
firDeclarationList += buildErrorNonLocalDestructuringDeclaration(child.toFirSourceElement(), initializer)
@@ -140,11 +139,15 @@ class LightTreeRawFirDeclarationBuilder(
140139
return convertBlockExpressionWithoutBuilding(block, generateHeaders = generateHeaders).build()
141140
}
142141

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 {
144147
val firStatements = block.forEachChildrenReturnList { node, container ->
145148
if (!generateHeaders || container.isEmpty()) { // Take only the first statement which could be a contract for header generation.
146149
when (node.tokenType) {
147-
CLASS, OBJECT_DECLARATION -> container += convertClass(node) as FirStatement
150+
CLASS, OBJECT_DECLARATION -> container += convertClass(node, generateHeaders) as FirStatement
148151
FUN -> container += convertFunctionDeclaration(node)
149152
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node) as FirStatement
150153
DESTRUCTURING_DECLARATION -> container +=
@@ -461,7 +464,7 @@ class LightTreeRawFirDeclarationBuilder(
461464
/**
462465
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassOrObject
463466
*/
464-
private fun convertClass(classNode: LighterASTNode): FirDeclaration {
467+
private fun convertClass(classNode: LighterASTNode, generateHeaders: Boolean): FirDeclaration {
465468
var modifiers: ModifierList? = null
466469
var classKind: ClassKind = ClassKind.CLASS
467470
var identifier: String? = null
@@ -637,7 +640,7 @@ class LightTreeRawFirDeclarationBuilder(
637640

638641
//parse declarations
639642
classBody?.let {
640-
addDeclarations(convertClassBody(it, classWrapper))
643+
addDeclarations(convertClassBody(it, classWrapper, generateHeaders))
641644
}
642645

643646
//parse data class
@@ -923,10 +926,14 @@ class LightTreeRawFirDeclarationBuilder(
923926
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
924927
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
925928
*/
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> {
927934
val modifierLists = mutableListOf<LighterASTNode>()
928935
val firDeclarations = classBody.forEachChildrenReturnList { node, container ->
929-
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists)
936+
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists, generateHeaders)
930937
}
931938

932939
convertDanglingModifierListsInClassBody(modifierLists, firDeclarations)
@@ -938,14 +945,15 @@ class LightTreeRawFirDeclarationBuilder(
938945
container: MutableList<FirDeclaration>,
939946
classWrapper: ClassWrapper?,
940947
modifierLists: MutableList<LighterASTNode>,
948+
generateHeaders: Boolean = false
941949
) {
942950
when (node.tokenType) {
943951
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper!!)
944-
CLASS -> container += convertClass(node)
952+
CLASS -> container += convertClass(node, generateHeaders)
945953
FUN -> container += convertFunctionDeclaration(node) as FirDeclaration
946954
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
947955
TYPEALIAS -> container += convertTypeAlias(node)
948-
OBJECT_DECLARATION -> container += convertClass(node)
956+
OBJECT_DECLARATION -> container += convertClass(node, generateHeaders)
949957
CLASS_INITIALIZER -> container += convertAnonymousInitializer(node, classWrapper!!.classBuilder.ownerRegularOrAnonymousObjectSymbol) //anonymousInitializer
950958
SECONDARY_CONSTRUCTOR -> container += convertSecondaryConstructor(node, classWrapper!!)
951959
MODIFIER_LIST -> modifierLists += node

0 commit comments

Comments
 (0)