From a8594e9ce87d9728533f979afabd49993b1d504a Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Fri, 24 Dec 2021 14:59:07 +0100 Subject: [PATCH] Codegen: register i/o File instead of PSI for module mapping... because there are no PSI files in FIR + LT, so missing mapping hurts IC --- .../jetbrains/kotlin/codegen/ClassFileFactory.java | 13 +++++++++---- .../kotlin/backend/jvm/JvmIrCodegenFactory.kt | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java index 6d907a768ba..f389976af33 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassFileFactory.java @@ -241,19 +241,24 @@ public class ClassFileFactory implements OutputFileCollection { @NotNull public PackageCodegen forPackage(@NotNull FqName fqName, @NotNull Collection files) { assert !isDone : "Already done!"; - registerSourceFiles(files); + sourceFiles.addAll(toIoFilesIgnoringNonPhysical(files)); return new PackageCodegenImpl(state, files, fqName); } @NotNull public MultifileClassCodegen forMultifileClass(@NotNull FqName facadeFqName, @NotNull Collection files) { assert !isDone : "Already done!"; - registerSourceFiles(files); + sourceFiles.addAll(toIoFilesIgnoringNonPhysical(files)); return new MultifileClassCodegenImpl(state, files, facadeFqName); } - public void registerSourceFiles(@NotNull Collection files) { - sourceFiles.addAll(toIoFilesIgnoringNonPhysical(files)); + public void registerSourceFiles(@NotNull Collection files) { + for (File file : files) { + // We ignore non-physical files here, because this code is needed to tell the make what inputs affect which outputs + // a non-physical file cannot be processed by make + if (file == null) continue; + sourceFiles.add(file); + } } @NotNull diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index d0405da94d4..cf9e9267128 100644 --- a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl import org.jetbrains.kotlin.backend.common.phaser.* import org.jetbrains.kotlin.backend.common.serialization.DescriptorByIdSignatureFinderImpl import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods +import org.jetbrains.kotlin.backend.jvm.ir.getIoFile import org.jetbrains.kotlin.backend.jvm.ir.getKtFile import org.jetbrains.kotlin.backend.jvm.serialization.DisabledIdSignatureDescriptor import org.jetbrains.kotlin.backend.jvm.serialization.JvmIdSignatureDescriptor @@ -264,7 +265,7 @@ open class JvmIrCodegenFactory( /* JvmBackendContext creates new unbound symbols, have to resolve them. */ ExternalDependenciesGenerator(symbolTable, irProviders).generateUnboundSymbolsAsDependencies() - context.state.factory.registerSourceFiles(irModuleFragment.files.map(IrFile::getKtFile)) + context.state.factory.registerSourceFiles(irModuleFragment.files.map(IrFile::getIoFile)) phases.invokeToplevel(phaseConfig, context, irModuleFragment)