Skip to content

Commit 0654120

Browse files
committed
Do not convert private functions into FIR when building in header mode
1 parent 2cd4178 commit 0654120

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)
@@ -1910,7 +1923,7 @@ class LightTreeRawFirDeclarationBuilder(
19101923
/**
19111924
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseFunction
19121925
*/
1913-
fun convertFunctionDeclaration(functionDeclaration: LighterASTNode): FirStatement {
1926+
fun convertFunctionDeclaration(functionDeclaration: LighterASTNode): FirStatement? {
19141927
var modifiers: ModifierList? = null
19151928
var identifier: String? = null
19161929
var valueParametersList: LighterASTNode? = null
@@ -1964,8 +1977,17 @@ class LightTreeRawFirDeclarationBuilder(
19641977
else implicitType
19651978
}
19661979

1980+
if (headerCompilationMode) {
1981+
val functionVisibility = calculatedModifiers.getVisibility()
1982+
if (functionVisibility == Visibilities.Private || functionVisibility == Visibilities.Protected) {
1983+
return null
1984+
}
1985+
}
1986+
19671987
val receiverTypeCalculator = receiverTypeNode?.let { { convertType(it) } }
19681988
val functionBuilder = if (isAnonymousFunction) {
1989+
if (headerCompilationMode)
1990+
return null
19691991
FirAnonymousFunctionBuilder().apply {
19701992
source = functionSource
19711993
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
@@ -159,7 +159,7 @@ class LightTreeRawFirExpressionBuilder(
159159
SUPER_EXPRESSION -> convertSuperExpression(expression)
160160

161161
OBJECT_LITERAL -> declarationBuilder.convertObjectLiteral(expression)
162-
FUN -> declarationBuilder.convertFunctionDeclaration(expression)
162+
FUN -> declarationBuilder.convertFunctionDeclaration(expression) ?: buildEmptyExpressionBlock()
163163
DESTRUCTURING_DECLARATION -> declarationBuilder.convertDestructingDeclaration(expression)
164164
.toFirDestructingDeclaration(this, baseModuleData)
165165
else -> buildErrorExpression(

0 commit comments

Comments
 (0)