1+ package com.compiler.server.compiler.components
2+
3+ import com.intellij.openapi.project.Project
4+ import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
5+ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
6+ import org.jetbrains.kotlin.cli.common.messages.MessageCollector
7+ import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
8+ import org.jetbrains.kotlin.config.CompilerConfiguration
9+ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
10+ import org.jetbrains.kotlin.ir.backend.js.*
11+ import org.jetbrains.kotlin.ir.backend.js.codegen.JsGenerationGranularity
12+ import org.jetbrains.kotlin.ir.backend.js.ic.CacheUpdater
13+ import org.jetbrains.kotlin.ir.backend.js.ic.DirtyFileState
14+ import org.jetbrains.kotlin.ir.backend.js.ic.ModuleArtifact
15+ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
16+ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImplForJsIC
17+ import org.jetbrains.kotlin.ir.symbols.IrSymbol
18+ import org.jetbrains.kotlin.psi.KtFile
19+ import java.io.File
20+
21+ // copy from compiler private funs
22+
23+ fun processSourceModule (
24+ project : Project ,
25+ files : List <KtFile >,
26+ libraries : List <String >,
27+ friendLibraries : List <String >,
28+ configuration : CompilerConfiguration ,
29+ outputKlibPath : String
30+ ): ModulesStructure {
31+ val sourceModule: ModulesStructure = prepareAnalyzedSourceModule(
32+ project,
33+ files,
34+ configuration,
35+ libraries,
36+ friendLibraries,
37+ AnalyzerWithCompilerReport (configuration)
38+ )
39+
40+ val moduleSourceFiles = (sourceModule.mainModule as MainModule .SourceFiles ).files
41+ val expectDescriptorToSymbol = mutableMapOf<DeclarationDescriptor , IrSymbol >()
42+
43+ val (moduleFragment, _) = generateIrForKlibSerialization(
44+ project,
45+ moduleSourceFiles,
46+ configuration,
47+ sourceModule.jsFrontEndResult.jsAnalysisResult,
48+ sourceModule.allDependencies.map { it.library },
49+ emptyList(),
50+ expectDescriptorToSymbol,
51+ IrFactoryImpl ,
52+ verifySignatures = true
53+ ) {
54+ sourceModule.getModuleDescriptor(it)
55+ }
56+
57+ val metadataSerializer =
58+ KlibMetadataIncrementalSerializer (
59+ configuration,
60+ sourceModule.project,
61+ sourceModule.jsFrontEndResult.hasErrors
62+ )
63+
64+ generateKLib(
65+ sourceModule,
66+ outputKlibPath,
67+ nopack = true ,
68+ jsOutputName = null ,
69+ icData = emptyList(),
70+ expectDescriptorToSymbol = expectDescriptorToSymbol,
71+ moduleFragment = moduleFragment
72+ ) { file ->
73+ metadataSerializer.serializeScope(file, sourceModule.jsFrontEndResult.bindingContext, moduleFragment.descriptor)
74+ }
75+ return sourceModule
76+ }
77+
78+ fun prepareIcCaches (
79+ includes : String ,
80+ cacheDirectory : String ,
81+ libraries : List <String >,
82+ friendLibraries : List <String >,
83+ configurationJs : CompilerConfiguration ,
84+ ): List <ModuleArtifact > {
85+ val cacheUpdater = CacheUpdater (
86+ mainModule = includes,
87+ allModules = libraries,
88+ mainModuleFriends = friendLibraries,
89+ cacheDir = cacheDirectory,
90+ compilerConfiguration = configurationJs,
91+ irFactory = { IrFactoryImplForJsIC (WholeWorldStageController ()) },
92+ mainArguments = emptyList(),
93+ compilerInterfaceFactory = { mainModule, cfg ->
94+ JsIrCompilerWithIC (
95+ mainModule,
96+ cfg,
97+ JsGenerationGranularity .WHOLE_PROGRAM ,
98+ es6mode = false
99+ )
100+ }
101+ )
102+
103+ return cacheUpdater.actualizeCaches()
104+ }
0 commit comments