From 92849dda3b8cb4ee74df71c459ed7dfe0398086d Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 19 Jun 2014 13:41:27 +0400 Subject: [PATCH] Serializing incremental package fragment from our module instead of random one. --- .../org/jetbrains/jet/codegen/PackageCodegen.java | 8 ++++---- .../jet/codegen/state/GenerationState.java | 14 ++++++++++++-- .../jvm/compiler/KotlinToJVMBytecodeCompiler.java | 12 +++++++++--- .../IncrementalPackageFragmentProvider.kt | 3 +++ .../jet/asJava/KotlinJavaFileStubProvider.java | 4 ++-- .../org/jetbrains/jet/codegen/CodegenTestUtil.java | 4 ++-- .../plugin/internal/KotlinBytecodeToolWindow.java | 2 +- 7 files changed, 33 insertions(+), 14 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java index a0598602514..56bfdba676f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackageCodegen.java @@ -125,10 +125,10 @@ public class PackageCodegen { } // TODO rewrite it to something more robust when module system is implemented - for (PackageFragmentDescriptor anotherFragment : state.getModule().getPackageFragmentProvider() - .getPackageFragments(fqName)) { - if (anotherFragment instanceof IncrementalPackageFragmentProvider.IncrementalPackageFragment) { - return anotherFragment; + for (PackageFragmentDescriptor fragment : state.getModule().getPackageFragmentProvider().getPackageFragments(fqName)) { + if (fragment instanceof IncrementalPackageFragmentProvider.IncrementalPackageFragment && + ((IncrementalPackageFragmentProvider.IncrementalPackageFragment) fragment).getModuleId().equals(state.getModuleId())) { + return fragment; } } return null; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java index 9dd61a4f174..03b0a9fdbc4 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java @@ -107,6 +107,9 @@ public class GenerationState { @NotNull private final Collection packagesWithRemovedFiles; + @Nullable + private final String moduleId; // for PackageCodegen in incremental compilation mode + public GenerationState( @NotNull Project project, @NotNull ClassBuilderFactory builderFactory, @@ -115,7 +118,7 @@ public class GenerationState { @NotNull List files ) { this(project, builderFactory, Progress.DEAF, module, bindingContext, files, true, false, GenerateClassFilter.GENERATE_ALL, - InlineCodegenUtil.DEFAULT_INLINE_FLAG, null); + InlineCodegenUtil.DEFAULT_INLINE_FLAG, null, null); } public GenerationState( @@ -129,12 +132,14 @@ public class GenerationState { boolean generateNotNullParamAssertions, GenerateClassFilter generateClassFilter, boolean inlineEnabled, - @Nullable Collection packagesWithRemovedFiles + @Nullable Collection packagesWithRemovedFiles, + @Nullable String moduleId ) { this.project = project; this.progress = progress; this.module = module; this.files = files; + this.moduleId = moduleId; this.packagesWithRemovedFiles = packagesWithRemovedFiles == null ? Collections.emptySet() : packagesWithRemovedFiles; this.classBuilderMode = builderFactory.getClassBuilderMode(); this.inlineEnabled = inlineEnabled; @@ -261,4 +266,9 @@ public class GenerationState { public Collection getPackagesWithRemovedFiles() { return packagesWithRemovedFiles; } + + @Nullable + public String getModuleId() { + return moduleId; + } } diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index b6490eb1c7c..22c0cc4c6dc 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -328,13 +328,19 @@ public class KotlinToJVMBytecodeCompiler { : IncrementalPackage.getPackagesWithRemovedFiles( incrementalCacheProvider.getIncrementalCache(incrementalCacheDir), moduleId, environment.getSourceFiles()); GenerationState generationState = new GenerationState( - environment.getProject(), ClassBuilderFactories.BINARIES, Progress.DEAF, - exhaust.getModuleDescriptor(), exhaust.getBindingContext(), sourceFiles, + environment.getProject(), + ClassBuilderFactories.BINARIES, + Progress.DEAF, + exhaust.getModuleDescriptor(), + exhaust.getBindingContext(), + sourceFiles, configuration.get(JVMConfigurationKeys.GENERATE_NOT_NULL_ASSERTIONS, false), configuration.get(JVMConfigurationKeys.GENERATE_NOT_NULL_PARAMETER_ASSERTIONS, false), GenerationState.GenerateClassFilter.GENERATE_ALL, configuration.get(JVMConfigurationKeys.ENABLE_INLINE, InlineCodegenUtil.DEFAULT_INLINE_FLAG), - packagesWithRemovedFiles); + packagesWithRemovedFiles, + moduleId + ); KotlinCodegenFacade.compileCorrectFiles(generationState, CompilationErrorHandler.THROW_EXCEPTION); return generationState; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt index f52d0c4d651..841d9d3d2a2 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -100,6 +100,9 @@ public class IncrementalPackageFragmentProvider( public inner class IncrementalPackageFragment(fqName: FqName) : PackageFragmentDescriptorImpl(module, fqName) { + public val moduleId: String + get() = this@IncrementalPackageFragmentProvider.moduleId + val descriptorFinder = object : DescriptorFinder { override fun findClass(classId: ClassId): ClassDescriptor? = javaDescriptorResolver.resolveClass(DeserializedResolverUtils.kotlinFqNameToJavaFqName(classId.asSingleFqName())) diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java index 11e15348d55..feaae114d7c 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java @@ -277,8 +277,8 @@ public class KotlinJavaFileStubProvider implements Cache /*not-null assertions*/false, false, /*generateClassFilter=*/stubGenerationStrategy.getGenerateClassFilter(), /*to generate inline flag on methods*/true, - null - ); + null, + null); state.beforeCompile(); bindingContext = state.getBindingContext(); diff --git a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java index 75d623f9d1f..2ee1a7a5d36 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java +++ b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java @@ -63,8 +63,8 @@ public class CodegenTestUtil { configuration.get(JVMConfigurationKeys.GENERATE_NOT_NULL_PARAMETER_ASSERTIONS, true), GenerationState.GenerateClassFilter.GENERATE_ALL, configuration.get(JVMConfigurationKeys.ENABLE_INLINE, InlineCodegenUtil.DEFAULT_INLINE_FLAG), - null - ); + null, + null); KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION); return state.getFactory(); } diff --git a/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java b/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java index 714343f4f92..a5d3e71b618 100644 --- a/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java +++ b/idea/src/org/jetbrains/jet/plugin/internal/KotlinBytecodeToolWindow.java @@ -114,7 +114,7 @@ public class KotlinBytecodeToolWindow extends JPanel implements Disposable { exhaust.getModuleDescriptor(), exhaust.getBindingContext(), Collections.singletonList(jetFile), true, true, GenerationState.GenerateClassFilter.GENERATE_ALL, - enableInline.isSelected(), null); + enableInline.isSelected(), null, null); KotlinCodegenFacade.compileCorrectFiles(state, CompilationErrorHandler.THROW_EXCEPTION); } catch (ProcessCanceledException e) {