Skip to content

Commit 7d9c8b6

Browse files
committed
Do not convert private functions into FIR when building in header mode
1 parent 8c5d40c commit 7d9c8b6

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

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

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.fir.diagnostics.*
3333
import org.jetbrains.kotlin.fir.expressions.*
3434
import org.jetbrains.kotlin.fir.expressions.builder.*
3535
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
36-
import org.jetbrains.kotlin.fir.expressions.impl.buildSingleExpressionBlock
3736
import org.jetbrains.kotlin.fir.lightTree.fir.*
3837
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.ModifierList
3938
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.TypeParameterModifierList
@@ -98,7 +97,12 @@ class LightTreeRawFirDeclarationBuilder(
9897
}
9998
IMPORT_LIST -> importList += convertImportDirectives(child)
10099
CLASS -> firDeclarationList += convertClass(child)
101-
FUN -> firDeclarationList += convertFunctionDeclaration(child) as FirDeclaration
100+
FUN -> {
101+
val functionDeclaration = convertFunctionDeclaration(child)
102+
if (functionDeclaration != null) {
103+
firDeclarationList += functionDeclaration as FirDeclaration
104+
}
105+
}
102106
KtNodeTypes.PROPERTY -> firDeclarationList += convertPropertyDeclaration(child)
103107
TYPEALIAS -> firDeclarationList += convertTypeAlias(child)
104108
OBJECT_DECLARATION -> firDeclarationList += convertClass(child)
@@ -144,7 +148,12 @@ class LightTreeRawFirDeclarationBuilder(
144148
val firStatements = block.forEachChildrenReturnList { node, container ->
145149
when (node.tokenType) {
146150
CLASS, OBJECT_DECLARATION -> container += convertClass(node) as FirStatement
147-
FUN -> container += convertFunctionDeclaration(node)
151+
FUN -> {
152+
val functionDeclaration = convertFunctionDeclaration(node)
153+
if (functionDeclaration != null) {
154+
container += functionDeclaration
155+
}
156+
}
148157
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node) as FirStatement
149158
DESTRUCTURING_DECLARATION -> container +=
150159
convertDestructingDeclaration(node).toFirDestructingDeclaration(this, baseModuleData)
@@ -940,7 +949,11 @@ class LightTreeRawFirDeclarationBuilder(
940949
when (node.tokenType) {
941950
ENUM_ENTRY -> container += convertEnumEntry(node, classWrapper!!)
942951
CLASS -> container += convertClass(node)
943-
FUN -> container += convertFunctionDeclaration(node) as FirDeclaration
952+
FUN -> {
953+
val functionDeclaration = convertFunctionDeclaration(node)
954+
if (functionDeclaration != null)
955+
container += functionDeclaration as FirDeclaration
956+
}
944957
KtNodeTypes.PROPERTY -> container += convertPropertyDeclaration(node, classWrapper)
945958
TYPEALIAS -> container += convertTypeAlias(node)
946959
OBJECT_DECLARATION -> container += convertClass(node)
@@ -1934,7 +1947,7 @@ class LightTreeRawFirDeclarationBuilder(
19341947
/**
19351948
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseFunction
19361949
*/
1937-
fun convertFunctionDeclaration(functionDeclaration: LighterASTNode): FirStatement {
1950+
fun convertFunctionDeclaration(functionDeclaration: LighterASTNode): FirStatement? {
19381951
var modifiers: ModifierList? = null
19391952
var identifier: String? = null
19401953
var valueParametersList: LighterASTNode? = null
@@ -1988,8 +2001,17 @@ class LightTreeRawFirDeclarationBuilder(
19882001
else implicitType
19892002
}
19902003

2004+
if (headerCompilationMode) {
2005+
val functionVisibility = calculatedModifiers.getVisibility()
2006+
if (functionVisibility == Visibilities.Private || functionVisibility == Visibilities.Protected) {
2007+
return null
2008+
}
2009+
}
2010+
19912011
val receiverTypeCalculator = receiverTypeNode?.let { { convertType(it) } }
19922012
val functionBuilder = if (isAnonymousFunction) {
2013+
if (headerCompilationMode)
2014+
return null
19932015
FirAnonymousFunctionBuilder().apply {
19942016
source = functionSource
19952017
receiverParameter = receiverTypeCalculator?.let { createReceiverParameter(it, baseModuleData, functionSymbol) }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class LightTreeRawFirExpressionBuilder(
166166
SUPER_EXPRESSION -> convertSuperExpression(expression)
167167

168168
OBJECT_LITERAL -> declarationBuilder.convertObjectLiteral(expression)
169-
FUN -> declarationBuilder.convertFunctionDeclaration(expression)
169+
FUN -> declarationBuilder.convertFunctionDeclaration(expression) ?: buildEmptyExpressionBlock()
170170
DESTRUCTURING_DECLARATION -> declarationBuilder.convertDestructingDeclaration(expression)
171171
.toFirDestructingDeclaration(this, baseModuleData)
172172
else -> buildErrorExpression(

0 commit comments

Comments
 (0)