Skip to content

Commit 1078988

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

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

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

Lines changed: 23 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
@@ -471,6 +474,7 @@ class LightTreeRawFirDeclarationBuilder(
471474
var classBody: LighterASTNode? = null
472475
var superTypeList: LighterASTNode? = null
473476
var typeParameterList: LighterASTNode? = null
477+
var headerMode = generateHeaders
474478
classNode.forEachChildren {
475479
when (it.tokenType) {
476480
MODIFIER_LIST -> modifiers = convertModifierList(it, isInClass = true)
@@ -479,6 +483,9 @@ class LightTreeRawFirDeclarationBuilder(
479483
}
480484

481485
val calculatedModifiers = modifiers ?: ModifierList()
486+
if (calculatedModifiers.isInlineClass()) {
487+
headerMode = false
488+
}
482489
val className = identifier.nameAsSafeName(if (calculatedModifiers.isCompanion()) "Companion" else "")
483490
val isLocalWithinParent = classNode.getParent()?.elementType != CLASS_BODY && isClassLocal(classNode) { getParent() }
484491
val classIsExpect = calculatedModifiers.hasExpect() || context.containerIsExpect
@@ -637,7 +644,7 @@ class LightTreeRawFirDeclarationBuilder(
637644

638645
//parse declarations
639646
classBody?.let {
640-
addDeclarations(convertClassBody(it, classWrapper))
647+
addDeclarations(convertClassBody(it, classWrapper, headerMode))
641648
}
642649

643650
//parse data class
@@ -923,10 +930,14 @@ class LightTreeRawFirDeclarationBuilder(
923930
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseClassBody
924931
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseEnumClassBody
925932
*/
926-
private fun convertClassBody(classBody: LighterASTNode, classWrapper: ClassWrapper?): List<FirDeclaration> {
933+
private fun convertClassBody(
934+
classBody: LighterASTNode,
935+
classWrapper: ClassWrapper?,
936+
generateHeaders: Boolean = false
937+
): List<FirDeclaration> {
927938
val modifierLists = mutableListOf<LighterASTNode>()
928939
val firDeclarations = classBody.forEachChildrenReturnList { node, container ->
929-
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists)
940+
convertDeclarationFromClassBody(node, container, classWrapper, modifierLists, generateHeaders)
930941
}
931942

932943
convertDanglingModifierListsInClassBody(modifierLists, firDeclarations)
@@ -938,14 +949,15 @@ class LightTreeRawFirDeclarationBuilder(
938949
container: MutableList<FirDeclaration>,
939950
classWrapper: ClassWrapper?,
940951
modifierLists: MutableList<LighterASTNode>,
952+
generateHeaders: Boolean = false
941953
) {
942954
when (node.tokenType) {
943955
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper!!)
944-
CLASS -> container += convertClass(node)
956+
CLASS -> container += convertClass(node, generateHeaders)
945957
FUN -> container += convertFunctionDeclaration(node) as FirDeclaration
946958
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
947959
TYPEALIAS -> container += convertTypeAlias(node)
948-
OBJECT_DECLARATION -> container += convertClass(node)
960+
OBJECT_DECLARATION -> container += convertClass(node, generateHeaders)
949961
CLASS_INITIALIZER -> container += convertAnonymousInitializer(node, classWrapper!!.classBuilder.ownerRegularOrAnonymousObjectSymbol) //anonymousInitializer
950962
SECONDARY_CONSTRUCTOR -> container += convertSecondaryConstructor(node, classWrapper!!)
951963
MODIFIER_LIST -> modifierLists += node

0 commit comments

Comments
 (0)