|
22 | 22 | import lombok.AccessLevel; |
23 | 23 | import lombok.RequiredArgsConstructor; |
24 | 24 | import org.intellij.lang.annotations.Language; |
| 25 | +import org.jetbrains.kotlin.KtPsiSourceFile; |
25 | 26 | import org.jetbrains.kotlin.KtRealPsiSourceElement; |
| 27 | +import org.jetbrains.kotlin.KtSourceFile; |
26 | 28 | import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments; |
27 | 29 | import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport; |
28 | 30 | import org.jetbrains.kotlin.cli.common.messages.MessageCollector; |
|
32 | 34 | import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; |
33 | 35 | import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment; |
34 | 36 | import org.jetbrains.kotlin.cli.jvm.config.JvmContentRootsKt; |
| 37 | +import org.jetbrains.kotlin.cli.pipeline.jvm.JvmFir2IrPipelineArtifact; |
| 38 | +import org.jetbrains.kotlin.cli.pipeline.jvm.JvmFir2IrPipelinePhase; |
| 39 | +import org.jetbrains.kotlin.cli.pipeline.jvm.JvmFrontendPipelineArtifact; |
35 | 40 | import org.jetbrains.kotlin.cli.pipeline.jvm.JvmFrontendPipelinePhase; |
36 | 41 | import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar; |
| 42 | +import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector; |
| 43 | +import org.jetbrains.kotlin.diagnostics.impl.SimpleDiagnosticsCollector; |
37 | 44 | import org.openrewrite.kotlin.internal.ScriptCompilerPlugin; |
38 | 45 | import org.jetbrains.kotlin.com.intellij.openapi.Disposable; |
39 | 46 | import org.jetbrains.kotlin.com.intellij.openapi.util.Disposer; |
|
51 | 58 | import org.jetbrains.kotlin.fir.FirSession; |
52 | 59 | import org.jetbrains.kotlin.fir.declarations.FirFile; |
53 | 60 | import org.jetbrains.kotlin.fir.pipeline.AnalyseKt; |
| 61 | +import org.jetbrains.kotlin.fir.pipeline.FirResult; |
54 | 62 | import org.jetbrains.kotlin.fir.pipeline.FirUtilsKt; |
| 63 | +import org.jetbrains.kotlin.fir.pipeline.ModuleCompilerAnalyzedOutput; |
55 | 64 | import org.jetbrains.kotlin.fir.resolve.ScopeSession; |
56 | 65 | import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope; |
| 66 | +import org.jetbrains.kotlin.ir.declarations.IrFile; |
| 67 | +import org.jetbrains.kotlin.ir.declarations.IrModuleFragment; |
57 | 68 | import org.jetbrains.kotlin.idea.KotlinFileType; |
58 | 69 | import org.jetbrains.kotlin.idea.KotlinLanguage; |
59 | 70 | import org.jetbrains.kotlin.modules.Module; |
@@ -466,7 +477,39 @@ public CompiledSource parse(List<Parser.Input> sources, Disposable disposable, E |
466 | 477 | kotlinSources.get(i).setFirFile(result.getSecond().get(i)); |
467 | 478 | } |
468 | 479 |
|
| 480 | + // FIR-to-IR conversion |
| 481 | + try { |
| 482 | + ModuleCompilerAnalyzedOutput moduleOutput = new ModuleCompilerAnalyzedOutput( |
| 483 | + firSession, result.getFirst(), result.getSecond()); |
| 484 | + FirResult firResult = new FirResult(singletonList(moduleOutput)); |
| 485 | + |
| 486 | + List<KtSourceFile> sourceFiles = new ArrayList<>(ktFiles.size()); |
| 487 | + for (KtFile ktFile : ktFiles) { |
| 488 | + sourceFiles.add(new KtPsiSourceFile(ktFile)); |
| 489 | + } |
| 490 | + |
| 491 | + JvmFrontendPipelineArtifact frontendArtifact = new JvmFrontendPipelineArtifact( |
| 492 | + firResult, compilerConfiguration, projectEnvironment, |
| 493 | + new SimpleDiagnosticsCollector(BaseDiagnosticsCollector.RawReporter.Companion.getDO_NOTHING()), |
| 494 | + sourceFiles); |
| 495 | + |
| 496 | + JvmFir2IrPipelineArtifact fir2IrArtifact = |
| 497 | + JvmFir2IrPipelinePhase.INSTANCE.executePhase(frontendArtifact); |
| 498 | + |
| 499 | + IrModuleFragment irModule = fir2IrArtifact.getResult().getIrModuleFragment(); |
| 500 | + Map<String, IrFile> irFilesByName = new HashMap<>(); |
| 501 | + for (IrFile irFile : irModule.getFiles()) { |
| 502 | + irFilesByName.put(irFile.getFileEntry().getName(), irFile); |
| 503 | + } |
| 504 | + for (KotlinSource kotlinSource : kotlinSources) { |
| 505 | + kotlinSource.setIrFile(irFilesByName.get(kotlinSource.getKtFile().getName())); |
| 506 | + } |
| 507 | + } catch (Throwable ignored) { |
| 508 | + // FIR-to-IR conversion is best-effort; irFile will remain null |
| 509 | + } |
| 510 | + |
469 | 511 | return new CompiledSource(firSession, kotlinSources); |
| 512 | + |
470 | 513 | } |
471 | 514 |
|
472 | 515 | private Module buildModule(CompilerConfiguration compilerConfiguration) { |
|
0 commit comments