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="idea-full" level="project" />
<orderEntry type="module" module-name="backend" scope="TEST" />
<orderEntry type="module" module-name="descriptors" scope="TEST" />
<orderEntry type="module" module-name="frontend.java" scope="TEST" />
<orderEntry type="module" module-name="descriptors" />
<orderEntry type="module" module-name="frontend.java" />
<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" scope="TEST" />
@@ -37,6 +37,7 @@ import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
import org.jetbrains.jet.compiler.runner.SimpleOutputItem;
import org.jetbrains.jet.config.IncrementalCompilation;
import org.jetbrains.jet.jps.JpsKotlinCompilerSettings;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache;
import org.jetbrains.jet.utils.PathUtil;
import org.jetbrains.jps.ModuleChunk;
import org.jetbrains.jps.builders.BuildTarget;
@@ -194,38 +195,47 @@ public class KotlinBuilder extends ModuleLevelBuilder {
}
}
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;
IncrementalCache cache = new IncrementalCache(KotlinBuilderModuleScriptGenerator.getIncrementalCacheDir(context));
try {
for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) {
BuildTarget<?> target = null;
Collection<File> sourceFiles = outputItem.getSourceFiles();
if (sourceFiles != null && !sourceFiles.isEmpty()) {
target = sourceToTarget.get(sourceFiles.iterator().next());
}
else {
messageCollector.report(EXCEPTION, "KotlinBuilder: outputItem.sourceFiles is null or empty, outputItem = " + outputItem, NO_LOCATION);
}
if (target == null) {
target = representativeTarget;
}
File outputFile = outputItem.getOutputFile();
if (IncrementalCompilation.ENABLED) {
cache.saveFileToCache(target.getId(), outputFile);
}
outputConsumer.registerOutputFile(target, outputFile, paths(sourceFiles));
}
BuildTarget<?> target = null;
Collection<File> sourceFiles = outputItem.getSourceFiles();
if (sourceFiles != null && !sourceFiles.isEmpty()) {
target = sourceToTarget.get(sourceFiles.iterator().next());
if (IncrementalCompilation.ENABLED) {
// TODO should mark dependencies as dirty, as well
FSOperations.markDirty(context, chunk, new FileFilter() {
@Override
public boolean accept(@NotNull File file) {
return !allCompiledFiles.contains(file);
}
});
return ExitCode.ADDITIONAL_PASS_REQUIRED;
}
else {
messageCollector.report(EXCEPTION, "KotlinBuilder: outputItem.sourceFiles is null or empty, outputItem = " + outputItem, NO_LOCATION);
return ExitCode.OK;
}
outputConsumer.registerOutputFile(target != null ? target : representativeTarget, outputItem.getOutputFile(),
paths(sourceFiles));
}
if (IncrementalCompilation.ENABLED) {
// TODO should mark dependencies as dirty, as well
FSOperations.markDirty(context, chunk, new FileFilter() {
@Override
public boolean accept(@NotNull File file) {
return !allCompiledFiles.contains(file);
}
});
return ExitCode.ADDITIONAL_PASS_REQUIRED;
}
else {
return ExitCode.OK;
} finally {
cache.close();
}
}
@@ -90,6 +90,7 @@ public class KotlinBuilderModuleScriptGenerator {
builder.addModule(
target.getId(),
outputDir.getAbsolutePath(),
getIncrementalCacheDir(context).getAbsolutePath(),
getKotlinModuleDependencies(context, target),
sourceFiles,
target.isTests(),
@@ -109,6 +110,10 @@ public class KotlinBuilderModuleScriptGenerator {
return scriptFile;
}
public static File getIncrementalCacheDir(CompileContext context) {
return new File(context.getProjectDescriptor().dataManager.getDataPaths().getDataStorageRoot(), "kotlin");
}
@NotNull
private static File getOutputDir(@NotNull ModuleBuildTarget target) {
File outputDir = target.getOutputDir();
@@ -1,11 +1,13 @@
Cleaning output files:
out/production/module/test/TestPackage-a-*.class
out/production/module/test/TestPackage.class
End of files
Compiling files:
src/a.kt
End of files
Cleaning output files:
out/production/module/test/TestPackage-b-*.class
out/production/module/test/TestPackage.class
End of files
Compiling files:
src/b.kt