Skip to content

Commit 7c177b2

Browse files
committed
Propagate header compilation flag configuration on the relevant parts of the compiler.
1 parent d2a02a7 commit 7c177b2

File tree

8 files changed

+33
-13
lines changed

8 files changed

+33
-13
lines changed

compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/pipeline/web/WebFrontendPipelinePhase.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,13 @@ object WebFrontendPipelinePhase : PipelinePhase<ConfigurationPipelineArtifact, W
193193
isCommonSource = { groupedSources.isCommonSourceForLt(it) },
194194
fileBelongsToModule = { file, it -> groupedSources.fileBelongsToModuleForLt(file, it) },
195195
buildResolveAndCheckFir = { session, files ->
196-
buildResolveAndCheckFirViaLightTree(session, files, diagnosticsReporter, performanceManager?.let { it::addSourcesStats })
196+
buildResolveAndCheckFirViaLightTree(
197+
session,
198+
files,
199+
diagnosticsReporter,
200+
performanceManager?.let { it::addSourcesStats },
201+
false
202+
)
197203
},
198204
useWasmPlatform = useWasmPlatform,
199205
)

compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/legacy/pipeline/jvmIncrementalCompilerPipelineLightTree.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
1414
import org.jetbrains.kotlin.cli.common.prepareJvmSessions
1515
import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
1616
import org.jetbrains.kotlin.config.CompilerConfiguration
17+
import org.jetbrains.kotlin.config.headerCompilation
1718
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
1819
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
1920
import org.jetbrains.kotlin.fir.pipeline.FirResult
@@ -94,9 +95,9 @@ private fun FrontendContext.compileModuleToAnalyzedFirViaLightTreeIncrementally(
9495
)
9596

9697
val countFilesAndLines = if (performanceManager == null) null else performanceManager::addSourcesStats
97-
9898
val outputs = sessionsWithSources.map { (session, sources) ->
99-
buildResolveAndCheckFirViaLightTree(session, sources, diagnosticsReporter, countFilesAndLines)
99+
buildResolveAndCheckFirViaLightTree(session, sources, diagnosticsReporter, countFilesAndLines,
100+
configuration.headerCompilation)
100101
}
101102
outputs.runPlatformCheckers(diagnosticsReporter)
102103
FirResult(outputs)

compiler/cli/src/org/jetbrains/kotlin/cli/pipeline/jvm/JvmFrontendPipelinePhase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ object JvmFrontendPipelinePhase : PipelinePhase<ConfigurationPipelineArtifact, J
159159
val countFilesAndLines = if (perfManager == null) null else perfManager::addSourcesStats
160160
val outputs = sessionsWithSources.map { (session, sources) ->
161161
val rawFirFiles = when (configuration.useLightTree) {
162-
true -> session.buildFirViaLightTree(sources, diagnosticsCollector, countFilesAndLines)
162+
true -> session.buildFirViaLightTree(sources, diagnosticsCollector, countFilesAndLines,
163+
configuration.headerCompilation)
163164
else -> session.buildFirFromKtFiles(sources.asKtFilesList())
164165
}
165166
resolveAndCheckFir(session, rawFirFiles, diagnosticsCollector)

compiler/cli/src/org/jetbrains/kotlin/cli/pipeline/metadata/MetadataFrontendPipelinePhase.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.cli.pipeline.PerformanceNotifications
3232
import org.jetbrains.kotlin.cli.pipeline.PipelinePhase
3333
import org.jetbrains.kotlin.cli.pipeline.jvm.asKtFilesList
3434
import org.jetbrains.kotlin.config.CommonConfigurationKeys
35+
import org.jetbrains.kotlin.config.headerCompilation
3536
import org.jetbrains.kotlin.config.messageCollector
3637
import org.jetbrains.kotlin.config.moduleName
3738
import org.jetbrains.kotlin.config.useLightTree
@@ -109,9 +110,10 @@ object MetadataFrontendPipelinePhase : PipelinePhase<ConfigurationPipelineArtifa
109110
}
110111
)
111112
sessionsWithSources.map { (session, files) ->
112-
val firFiles = session.buildFirViaLightTree(files, diagnosticsReporter) { files, lines ->
113-
perfManager?.addSourcesStats(files, lines)
114-
}
113+
val firFiles = session.buildFirViaLightTree(files, diagnosticsReporter, { files, lines ->
114+
perfManager?.addSourcesStats(files, lines)
115+
},
116+
configuration.headerCompilation)
115117
resolveAndCheckFir(session, firFiles, diagnosticsReporter)
116118
}
117119
} else {

compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/pipeline/firUtils.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ fun FirSession.buildFirViaLightTree(
2424
files: Collection<KtSourceFile>,
2525
diagnosticsReporter: DiagnosticReporter?,
2626
reportFilesAndLines: ((Int, Int) -> Unit)?,
27+
useHeaderCompilation: Boolean,
2728
): List<FirFile> {
2829
val firProvider = (firProvider as FirProviderImpl)
2930
val sourcesToPathsMapper = sourcesToPathsMapper
30-
val builder = LightTree2Fir(this, firProvider.kotlinScopeProvider, diagnosticsReporter)
31+
val builder = LightTree2Fir(this, useHeaderCompilation,firProvider.kotlinScopeProvider, diagnosticsReporter)
3132
val shouldCountLines = (reportFilesAndLines != null)
3233
var linesCount = 0
3334
val firFiles = files.map { file ->
@@ -82,8 +83,9 @@ fun buildResolveAndCheckFirViaLightTree(
8283
session: FirSession,
8384
ktFiles: Collection<KtSourceFile>,
8485
diagnosticsReporter: BaseDiagnosticsCollector,
85-
countFilesAndLines: KFunction2<Int, Int, Unit>?
86+
countFilesAndLines: KFunction2<Int, Int, Unit>?,
87+
useHeaderCompilation: Boolean,
8688
): ModuleCompilerAnalyzedOutput {
87-
val firFiles = session.buildFirViaLightTree(ktFiles, diagnosticsReporter, countFilesAndLines)
89+
val firFiles = session.buildFirViaLightTree(ktFiles, diagnosticsReporter, countFilesAndLines, useHeaderCompilation)
8890
return resolveAndCheckFir(session, firFiles, diagnosticsReporter)
8991
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import java.nio.file.Path
2323

2424
class LightTree2Fir(
2525
val session: FirSession,
26+
val headerCompilationMode: Boolean,
2627
private val scopeProvider: FirScopeProvider,
2728
private val diagnosticsReporter: DiagnosticReporter? = null,
2829
) {
@@ -43,7 +44,7 @@ class LightTree2Fir(
4344
sourceFile: KtSourceFile,
4445
linesMapping: KtSourceFileLinesMapping,
4546
): FirFile {
46-
return LightTreeRawFirDeclarationBuilder(session, scopeProvider, lightTree)
47+
return LightTreeRawFirDeclarationBuilder(session, scopeProvider, lightTree, headerCompilationMode)
4748
.convertFile(lightTree.root, sourceFile, linesMapping)
4849
}
4950

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ class LightTreeRawFirDeclarationBuilder(
6161
session: FirSession,
6262
internal val baseScopeProvider: FirScopeProvider,
6363
tree: FlyweightCapableTreeStructure<LighterASTNode>,
64+
private val headerCompilationMode: Boolean = false,
6465
context: Context<LighterASTNode> = Context(),
6566
) : AbstractLightTreeRawFirBuilder(session, tree, context) {
66-
67-
private val expressionConverter = LightTreeRawFirExpressionBuilder(session, tree, this, context)
67+
private val expressionConverter = LightTreeRawFirExpressionBuilder(session, tree, this, headerCompilationMode, context)
6868

6969
/**
7070
* [org.jetbrains.kotlin.parsing.KotlinParsing.parseFile]
@@ -1238,6 +1238,7 @@ class LightTreeRawFirDeclarationBuilder(
12381238
modifiers?.convertAnnotationsTo(annotations)
12391239
typeParameters += constructorTypeParametersFromConstructedClass(classWrapper.classBuilder.typeParameters)
12401240
valueParameters += firValueParameters.map { it.firValueParameter }
1241+
// TODO-HEADER-COMPILATION: Potentially remove this and produce an empty constructor body.
12411242
val (body, contractDescription) = withForcedLocalContext {
12421243
convertFunctionBody(block, null, allowLegacyContractDescription = true)
12431244
}
@@ -1759,6 +1760,7 @@ class LightTreeRawFirDeclarationBuilder(
17591760
valueParameters += firValueParameters
17601761
}
17611762
val allowLegacyContractDescription = outerContractDescription == null
1763+
// TODO-HEADER-COMPILATION: Potentially remove getter/setter code.
17621764
val bodyWithContractDescription = withForcedLocalContext {
17631765
convertFunctionBody(block, expression, allowLegacyContractDescription)
17641766
}
@@ -2104,6 +2106,8 @@ class LightTreeRawFirDeclarationBuilder(
21042106
expression: LighterASTNode?,
21052107
allowLegacyContractDescription: Boolean
21062108
): Pair<FirBlock?, FirContractDescription?> {
2109+
// TODO-HEADER-COMPILATION: Another option to produce empty methods
2110+
// TODO-HEADER-COMPILATION: is to make this function return nothing.
21072111
return when {
21082112
blockNode != null -> {
21092113
val block = convertBlock(blockNode)
@@ -2139,6 +2143,8 @@ class LightTreeRawFirDeclarationBuilder(
21392143
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseBlock
21402144
*/
21412145
fun convertBlock(block: LighterASTNode?): FirBlock {
2146+
// TODO-HEADER-COMPILATION: One option is to prevent the frontend
2147+
// TODO-HEADER-COMPILATION: from producing IR here.
21422148
if (block == null) return buildEmptyExpressionBlock()
21432149
if (block.tokenType != BLOCK) {
21442150
return FirSingleExpressionBlock(

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ class LightTreeRawFirExpressionBuilder(
6262
session: FirSession,
6363
tree: FlyweightCapableTreeStructure<LighterASTNode>,
6464
private val declarationBuilder: LightTreeRawFirDeclarationBuilder,
65+
val headerCompilationMode: Boolean = false, // TODO: may be unnecessary
6566
context: Context<LighterASTNode> = Context(),
6667
) : AbstractLightTreeRawFirBuilder(session, tree, context) {
6768

0 commit comments

Comments
 (0)