Switching from log/learn to reportOutput/add

This commit is contained in:
Andrey Breslav
2012-11-12 19:57:39 +04:00
parent ef403cc91a
commit b2b5ccefbd
12 changed files with 128 additions and 130 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.jet.plugin.compiler;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.intellij.compiler.impl.javaCompiler.OutputItemImpl;
import com.intellij.openapi.compiler.CompileContext;
import com.intellij.openapi.compiler.TranslatingCompiler;
@@ -24,11 +26,13 @@ import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.compiler.runner.AbstractOutputItemCollector;
import org.jetbrains.jet.compiler.runner.CompilerEnvironment;
import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
import org.jetbrains.jet.compiler.runner.SimpleOutputItem;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
* @author Pavel Talanov
@@ -50,31 +54,24 @@ public final class CompilerUtils {
return new File(file.getPath());
}
public static class OutputItemsCollectorImpl extends AbstractOutputItemCollector<VirtualFile, TranslatingCompiler.OutputItem> {
public static void reportOutputs(
TranslatingCompiler.OutputSink outputSink,
File outputDir,
OutputItemsCollectorImpl outputItemsCollector
) {
Set<VirtualFile> sources = Sets.newHashSet();
List<TranslatingCompiler.OutputItem> outputs = Lists.newArrayList();
public OutputItemsCollectorImpl(@NotNull String outputPath) {
super(outputPath);
}
@Override
protected TranslatingCompiler.OutputItem convertResult(String resultPath, VirtualFile correspondingSource) {
LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(resultPath));
return new OutputItemImpl(resultPath, correspondingSource);
}
@Override
protected VirtualFile convertSource(String sourcePath) {
return LocalFileSystem.getInstance().findFileByPath(sourcePath);
}
@Override
public void add(Collection<File> sourceFiles, File outputFile) {
LocalFileSystem.getInstance().refreshAndFindFileByIoFile(outputFile);
for (File sourceFile : sourceFiles) {
for (SimpleOutputItem output : outputItemsCollector.getOutputs()) {
LocalFileSystem.getInstance().refreshAndFindFileByIoFile(output.getOutputFile());
for (File sourceFile : output.getSourceFiles()) {
VirtualFile virtualFileForSourceFile = LocalFileSystem.getInstance().findFileByIoFile(sourceFile);
addItem(new OutputItemImpl(outputFile.getPath(), virtualFileForSourceFile));
sources.add(virtualFileForSourceFile);
outputs.add(new OutputItemImpl(output.getOutputFile().getPath(), virtualFileForSourceFile));
}
}
outputSink.add(outputDir.getPath(), outputs, sources.toArray(VirtualFile.EMPTY_ARRAY));
}
}
@@ -32,9 +32,7 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.compiler.runner.CompilerEnvironment;
import org.jetbrains.jet.compiler.runner.KotlinCompilerRunner;
import org.jetbrains.jet.compiler.runner.KotlinModuleScriptGenerator;
import org.jetbrains.jet.compiler.runner.*;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.project.JsModuleDetector;
@@ -114,24 +112,33 @@ public class JetCompiler implements TranslatingCompiler {
return;
}
final File outputDir = environment.getOutput();
File scriptFile = tryToWriteScriptFile(compileContext, moduleChunk, files, module, tests,
compileContext.getModuleOutputDirectory(module),
environment.getOutput());
outputDir);
if (scriptFile == null) return;
CompilerUtils.OutputItemsCollectorImpl collector = new CompilerUtils.OutputItemsCollectorImpl(environment.getOutput().getPath());
OutputItemsCollectorImpl collector = new OutputItemsCollectorImpl(outputDir) {
@Override
public void add(Collection<File> sourceFiles, File outputFile) {
super.add(sourceFiles, outputFile);
compileContext.getProgressIndicator().setText("Emitting: " + outputFile);
}
};
runCompiler(messageCollector, environment, scriptFile, collector);
outputSink.add(environment.getOutput().getPath(), collector.getOutputs(), collector.getSources().toArray(VirtualFile.EMPTY_ARRAY));
CompilerUtils.reportOutputs(outputSink, outputDir, collector);
}
private static void runCompiler(
MessageCollector messageCollector,
CompilerEnvironment environment,
File scriptFile,
CompilerUtils.OutputItemsCollectorImpl collector
OutputItemsCollector outputItemsCollector
) {
KotlinCompilerRunner.runCompiler(messageCollector, environment, scriptFile, collector, RUN_OUT_OF_PROCESS);
KotlinCompilerRunner.runCompiler(messageCollector, environment, scriptFile, outputItemsCollector, RUN_OUT_OF_PROCESS);
}
public static File tryToWriteScriptFile(
@@ -40,6 +40,7 @@ import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.compiler.runner.CompilerEnvironment;
import org.jetbrains.jet.compiler.runner.CompilerRunnerUtil;
import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.project.JsModuleDetector;
@@ -92,14 +93,14 @@ public final class K2JSCompiler implements TranslatingCompiler {
private static void doCompile(@NotNull final MessageCollector messageCollector, @NotNull OutputSink sink, @NotNull final Module module,
@NotNull final CompilerEnvironment environment) {
CompilerUtils.OutputItemsCollectorImpl collector = new CompilerUtils.OutputItemsCollectorImpl(environment.getOutput().getPath());
OutputItemsCollectorImpl collector = new OutputItemsCollectorImpl(environment.getOutput());
outputCompilerMessagesAndHandleExitCode(messageCollector, collector, new Function<PrintStream, Integer>() {
@Override
public Integer fun(PrintStream stream) {
return execInProcess(messageCollector, environment, stream, module);
}
});
sink.add(environment.getOutput().getPath(), collector.getOutputs(), collector.getSources().toArray(VirtualFile.EMPTY_ARRAY));
CompilerUtils.reportOutputs(sink, environment.getOutput(), collector);
}
@Nullable