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:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user