Backend: remove psi files from generation state

pass them explicitly to all destinations. This is a step in attempt to
abstract dependencies on PSI in the GenerationState and related places.
This commit is contained in:
Ilya Chernikov
2022-02-15 17:22:24 +03:00
committed by teamcity
parent da41fddabb
commit 2044754628
22 changed files with 64 additions and 62 deletions
@@ -368,9 +368,4 @@ public class ClassFileFactory implements OutputFileCollection {
generators.remove(classInternalName + ".class");
}
}
@TestOnly
public List<KtFile> getInputFiles() {
return state.getFiles();
}
}
@@ -56,7 +56,7 @@ interface CodegenFactory {
val skipBodies: Boolean,
) {
companion object {
fun fromGenerationState(state: GenerationState): IrConversionInput =
fun fromGenerationStateAndFiles(state: GenerationState, files: Collection<KtFile>): IrConversionInput =
with(state) {
IrConversionInput(
project, files, configuration, module, originalFrontendBindingContext, languageVersionSettings, ignoreErrors,
@@ -84,22 +84,23 @@ interface CodegenFactory {
}
object DefaultCodegenFactory : CodegenFactory {
private object DummyOldBackendInput : CodegenFactory.BackendInput
private class OldBackendInput(val ktFiles: Collection<KtFile>) : CodegenFactory.BackendInput
private class DummyOldCodegenInput(override val state: GenerationState) : CodegenFactory.CodegenInput
override fun convertToIr(input: CodegenFactory.IrConversionInput): CodegenFactory.BackendInput = DummyOldBackendInput
override fun convertToIr(input: CodegenFactory.IrConversionInput): CodegenFactory.BackendInput = OldBackendInput(input.files)
override fun getModuleChunkBackendInput(
wholeBackendInput: CodegenFactory.BackendInput,
sourceFiles: Collection<KtFile>,
): CodegenFactory.BackendInput = DummyOldBackendInput
): CodegenFactory.BackendInput = OldBackendInput(sourceFiles)
override fun invokeLowerings(state: GenerationState, input: CodegenFactory.BackendInput): CodegenFactory.CodegenInput {
input as OldBackendInput
val filesInPackages = MultiMap<FqName, KtFile>()
val filesInMultifileClasses = MultiMap<FqName, KtFile>()
for (file in state.files) {
for (file in input.ktFiles) {
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(file)
if (fileClassInfo.withJvmMultifileClass) {
@@ -23,16 +23,22 @@ import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStat
import org.jetbrains.kotlin.psi.KtFile;
import java.util.Collection;
import java.util.List;
public class KotlinCodegenFacade {
public static void compileCorrectFiles(@NotNull GenerationState state, CodegenFactory codegenFactory) {
public static void compileCorrectFiles(
Collection<KtFile> files,
@NotNull GenerationState state,
CodegenFactory codegenFactory
) {
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
state.beforeCompile();
state.oldBEInitTrace(files);
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
CodegenFactory.IrConversionInput psi2irInput = CodegenFactory.IrConversionInput.Companion.fromGenerationState(state);
CodegenFactory.IrConversionInput psi2irInput = CodegenFactory.IrConversionInput.Companion.fromGenerationStateAndFiles(state, files);
CodegenFactory.BackendInput backendInput = codegenFactory.convertToIr(psi2irInput);
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled();
@@ -94,9 +94,9 @@ public class CodegenBinding {
return properties == null ? null : CollectionsKt.filterIsInstance(properties, LocalVariableDescriptor.class);
}
public static void initTrace(@NotNull GenerationState state) {
public static void initTrace(@NotNull GenerationState state, Collection<KtFile> files) {
CodegenAnnotatingVisitor visitor = new CodegenAnnotatingVisitor(state);
for (KtFile file : allFilesInPackages(state.getBindingContext(), state.getFiles())) {
for (KtFile file : allFilesInPackages(state.getBindingContext(), files)) {
file.accept(visitor);
if (file instanceof KtCodeFragment) {
PsiElement context = file.getContext();
@@ -59,7 +59,6 @@ class GenerationState private constructor(
builderFactory: ClassBuilderFactory,
val module: ModuleDescriptor,
val originalFrontendBindingContext: BindingContext,
val files: List<KtFile>,
val configuration: CompilerConfiguration,
val generateDeclaredClassFilter: GenerateClassFilter,
val targetId: TargetId?,
@@ -78,7 +77,6 @@ class GenerationState private constructor(
private val builderFactory: ClassBuilderFactory,
private val module: ModuleDescriptor,
private val bindingContext: BindingContext,
private val files: List<KtFile>,
private val configuration: CompilerConfiguration
) {
private var generateDeclaredClassFilter: GenerateClassFilter = GenerateClassFilter.GENERATE_ALL
@@ -129,7 +127,7 @@ class GenerationState private constructor(
fun build() =
GenerationState(
project, builderFactory, module, bindingContext, files, configuration,
project, builderFactory, module, bindingContext, configuration,
generateDeclaredClassFilter, targetId,
moduleName, outDirectory, onIndependentPartCompilationEnd, wantsDiagnostics,
jvmBackendClassResolver, isIrBackend, ignoreErrors,
@@ -375,9 +373,11 @@ class GenerationState private constructor(
fun beforeCompile() {
markUsed()
}
fun oldBEInitTrace(ktFiles: Collection<KtFile>) {
if (!isIrBackend) {
CodegenBinding.initTrace(this)
CodegenBinding.initTrace(this, ktFiles)
}
}