Loading descriptors from incremental cache instead of package classes.
Original commit: ca1ee69e4c
This commit is contained in:
@@ -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,38 +195,47 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) {
|
IncrementalCache cache = new IncrementalCache(KotlinBuilderModuleScriptGenerator.getIncrementalCacheDir(context));
|
||||||
if (IncrementalCompilation.ENABLED) {
|
|
||||||
// TODO this is a hack: we don't remove
|
try {
|
||||||
if (outputItem.getOutputFile().getName().endsWith("Package.class")) {
|
for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) {
|
||||||
continue;
|
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 (IncrementalCompilation.ENABLED) {
|
||||||
if (sourceFiles != null && !sourceFiles.isEmpty()) {
|
// TODO should mark dependencies as dirty, as well
|
||||||
target = sourceToTarget.get(sourceFiles.iterator().next());
|
FSOperations.markDirty(context, chunk, new FileFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(@NotNull File file) {
|
||||||
|
return !allCompiledFiles.contains(file);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return ExitCode.ADDITIONAL_PASS_REQUIRED;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
messageCollector.report(EXCEPTION, "KotlinBuilder: outputItem.sourceFiles is null or empty, outputItem = " + outputItem, NO_LOCATION);
|
return ExitCode.OK;
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
outputConsumer.registerOutputFile(target != null ? target : representativeTarget, outputItem.getOutputFile(),
|
cache.close();
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user