Loading descriptors from incremental cache instead of package classes.

Original commit: ca1ee69e4c
This commit is contained in:
Evgeny Gerashchenko
2014-05-14 20:39:15 +04:00
parent 6a0e54896d
commit 2eb051dbc2
4 changed files with 46 additions and 29 deletions
+2 -2
View File
@@ -15,8 +15,8 @@
<orderEntry type="library" scope="TEST" name="jps-test" level="project" /> <orderEntry type="library" scope="TEST" name="jps-test" level="project" />
<orderEntry type="library" scope="TEST" name="idea-full" level="project" /> <orderEntry type="library" scope="TEST" name="idea-full" level="project" />
<orderEntry type="module" module-name="backend" scope="TEST" /> <orderEntry type="module" module-name="backend" scope="TEST" />
<orderEntry type="module" module-name="descriptors" scope="TEST" /> <orderEntry type="module" module-name="descriptors" />
<orderEntry type="module" module-name="frontend.java" scope="TEST" /> <orderEntry type="module" module-name="frontend.java" />
<orderEntry type="module" module-name="descriptor.loader.java" scope="TEST" /> <orderEntry type="module" module-name="descriptor.loader.java" scope="TEST" />
<orderEntry type="module" module-name="serialization.java" scope="TEST" /> <orderEntry type="module" module-name="serialization.java" scope="TEST" />
<orderEntry type="module" module-name="serialization" scope="TEST" /> <orderEntry type="module" module-name="serialization" scope="TEST" />
@@ -37,6 +37,7 @@ import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
import org.jetbrains.jet.compiler.runner.SimpleOutputItem; import org.jetbrains.jet.compiler.runner.SimpleOutputItem;
import org.jetbrains.jet.config.IncrementalCompilation; import org.jetbrains.jet.config.IncrementalCompilation;
import org.jetbrains.jet.jps.JpsKotlinCompilerSettings; import org.jetbrains.jet.jps.JpsKotlinCompilerSettings;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache;
import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jet.utils.PathUtil;
import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ModuleChunk;
import org.jetbrains.jps.builders.BuildTarget; import org.jetbrains.jps.builders.BuildTarget;
@@ -194,13 +195,10 @@ public class KotlinBuilder extends ModuleLevelBuilder {
} }
} }
IncrementalCache cache = new IncrementalCache(KotlinBuilderModuleScriptGenerator.getIncrementalCacheDir(context));
try {
for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) { for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) {
if (IncrementalCompilation.ENABLED) {
// TODO this is a hack: we don't remove
if (outputItem.getOutputFile().getName().endsWith("Package.class")) {
continue;
}
}
BuildTarget<?> target = null; BuildTarget<?> target = null;
Collection<File> sourceFiles = outputItem.getSourceFiles(); Collection<File> sourceFiles = outputItem.getSourceFiles();
if (sourceFiles != null && !sourceFiles.isEmpty()) { if (sourceFiles != null && !sourceFiles.isEmpty()) {
@@ -210,8 +208,17 @@ public class KotlinBuilder extends ModuleLevelBuilder {
messageCollector.report(EXCEPTION, "KotlinBuilder: outputItem.sourceFiles is null or empty, outputItem = " + outputItem, NO_LOCATION); messageCollector.report(EXCEPTION, "KotlinBuilder: outputItem.sourceFiles is null or empty, outputItem = " + outputItem, NO_LOCATION);
} }
outputConsumer.registerOutputFile(target != null ? target : representativeTarget, outputItem.getOutputFile(), if (target == null) {
paths(sourceFiles)); target = representativeTarget;
}
File outputFile = outputItem.getOutputFile();
if (IncrementalCompilation.ENABLED) {
cache.saveFileToCache(target.getId(), outputFile);
}
outputConsumer.registerOutputFile(target, outputFile, paths(sourceFiles));
} }
if (IncrementalCompilation.ENABLED) { if (IncrementalCompilation.ENABLED) {
@@ -227,6 +234,9 @@ public class KotlinBuilder extends ModuleLevelBuilder {
else { else {
return ExitCode.OK; return ExitCode.OK;
} }
} finally {
cache.close();
}
} }
private static Set<File> getAllCompiledFilesContainer(CompileContext context) { private static Set<File> getAllCompiledFilesContainer(CompileContext context) {
@@ -90,6 +90,7 @@ public class KotlinBuilderModuleScriptGenerator {
builder.addModule( builder.addModule(
target.getId(), target.getId(),
outputDir.getAbsolutePath(), outputDir.getAbsolutePath(),
getIncrementalCacheDir(context).getAbsolutePath(),
getKotlinModuleDependencies(context, target), getKotlinModuleDependencies(context, target),
sourceFiles, sourceFiles,
target.isTests(), target.isTests(),
@@ -109,6 +110,10 @@ public class KotlinBuilderModuleScriptGenerator {
return scriptFile; return scriptFile;
} }
public static File getIncrementalCacheDir(CompileContext context) {
return new File(context.getProjectDescriptor().dataManager.getDataPaths().getDataStorageRoot(), "kotlin");
}
@NotNull @NotNull
private static File getOutputDir(@NotNull ModuleBuildTarget target) { private static File getOutputDir(@NotNull ModuleBuildTarget target) {
File outputDir = target.getOutputDir(); File outputDir = target.getOutputDir();
@@ -1,11 +1,13 @@
Cleaning output files: Cleaning output files:
out/production/module/test/TestPackage-a-*.class out/production/module/test/TestPackage-a-*.class
out/production/module/test/TestPackage.class
End of files End of files
Compiling files: Compiling files:
src/a.kt src/a.kt
End of files End of files
Cleaning output files: Cleaning output files:
out/production/module/test/TestPackage-b-*.class out/production/module/test/TestPackage-b-*.class
out/production/module/test/TestPackage.class
End of files End of files
Compiling files: Compiling files:
src/b.kt src/b.kt