Extracted OutputDirector and output utils to common place
This commit is contained in:
+2
-2
@@ -23,7 +23,7 @@ import com.intellij.testFramework.UsefulTestCase;
|
||||
import junit.framework.Assert;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||
import org.jetbrains.jet.outputUtils.OutputUtilsPackage;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||
import org.jetbrains.jet.codegen.GenerationUtils;
|
||||
@@ -147,7 +147,7 @@ public class CodegenTestsOnAndroidGenerator extends UsefulTestCase {
|
||||
}
|
||||
Assert.assertTrue("Cannot create directory for compiled files", outputDir.exists());
|
||||
|
||||
CompileEnvironmentUtil.writeToOutputDirectory(factory, outputDir);
|
||||
OutputUtilsPackage.writeAllTo(factory, outputDir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="kotlin-runtime" level="project" />
|
||||
<orderEntry type="library" name="intellij-core" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet
|
||||
|
||||
import java.io.File
|
||||
|
||||
public trait OutputDirector {
|
||||
public fun getOutputDirectory(sourceFiles: Collection<File>): File
|
||||
}
|
||||
|
||||
public class SingleDirectoryDirector(private val dir: File): OutputDirector {
|
||||
override public fun getOutputDirectory(sourceFiles : Collection<File>) : File = dir
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.outputUtils
|
||||
|
||||
import java.io.File
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.jet.OutputFileFactory
|
||||
import org.jetbrains.jet.SingleDirectoryDirector
|
||||
import org.jetbrains.jet.OutputDirector
|
||||
|
||||
public fun OutputFileFactory.writeAll(outputDirector: OutputDirector, report: (sources: List<File>, output: File) -> Unit) {
|
||||
for (file in outputFiles) {
|
||||
val sources = getSourceFiles(file)
|
||||
val output = File(outputDirector.getOutputDirectory(sources), file)
|
||||
report(sources, output)
|
||||
FileUtil.writeToFile(output, this.asBytes(file))
|
||||
}
|
||||
}
|
||||
|
||||
private val REPORT_NOTHING = { (sources: List<File>, output: File) -> }
|
||||
|
||||
public inline fun OutputFileFactory.writeAllTo(outputDir: File) {
|
||||
writeAll(SingleDirectoryDirector(outputDir), REPORT_NOTHING)
|
||||
}
|
||||
+1
@@ -28,6 +28,7 @@ public class OutputMessageUtil {
|
||||
private static final String SOURCE_FILES_PREFIX = "Sources:";
|
||||
private static final String OUTPUT_FILES_PREFIX = "Output:";
|
||||
|
||||
@NotNull
|
||||
public static String formatOutputMessage(Collection<File> sourceFiles, File outputFile) {
|
||||
return OUTPUT_FILES_PREFIX + "\n" + outputFile.getPath() + "\n" +
|
||||
SOURCE_FILES_PREFIX + "\n" + StringUtil.join(sourceFiles, "\n");
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright 2010-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.jet.cli.common.outputUtils
|
||||
|
||||
import org.jetbrains.jet.OutputFileFactory
|
||||
import org.jetbrains.jet.OutputDirector
|
||||
import org.jetbrains.jet.outputUtils.writeAll
|
||||
import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation
|
||||
import org.jetbrains.jet.cli.common.messages.OutputMessageUtil
|
||||
import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.jet.cli.common.messages.MessageCollector
|
||||
|
||||
public inline fun OutputFileFactory.writeAll(outputDirector: OutputDirector, messageCollector: MessageCollector) {
|
||||
writeAll(outputDirector) { sources, output ->
|
||||
messageCollector.report(CompilerMessageSeverity.OUTPUT, OutputMessageUtil.formatOutputMessage(sources, output), CompilerMessageLocation.NO_LOCATION)
|
||||
}
|
||||
}
|
||||
@@ -26,11 +26,13 @@ import jet.modules.AllModules;
|
||||
import jet.modules.Module;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.OutputFileFactory;
|
||||
import org.jetbrains.jet.cli.common.CLIConfigurationKeys;
|
||||
import org.jetbrains.jet.cli.common.messages.*;
|
||||
import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
||||
import org.jetbrains.jet.cli.common.messages.MessageRenderer;
|
||||
import org.jetbrains.jet.cli.common.modules.ModuleDescription;
|
||||
import org.jetbrains.jet.cli.common.modules.ModuleXmlParser;
|
||||
import org.jetbrains.jet.OutputDirector;
|
||||
import org.jetbrains.jet.cli.common.outputUtils.OutputUtilsPackage;
|
||||
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||
import org.jetbrains.jet.codegen.GeneratedClassLoader;
|
||||
@@ -49,7 +51,6 @@ import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.jar.*;
|
||||
|
||||
@@ -236,48 +237,6 @@ public class CompileEnvironmentUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public interface OutputDirector {
|
||||
@NotNull
|
||||
File getOutputDirectory(@NotNull Collection<File> sourceFiles);
|
||||
}
|
||||
|
||||
public static OutputDirector singleDirectory(@Nullable final File file) {
|
||||
if (file == null) return null;
|
||||
return new OutputDirector() {
|
||||
@NotNull
|
||||
@Override
|
||||
public File getOutputDirectory(@NotNull Collection<File> sourceFiles) {
|
||||
return file;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static void writeToOutputWithDirector(
|
||||
OutputFileFactory factory,
|
||||
@NotNull OutputDirector outputDirector,
|
||||
@NotNull MessageCollector messageCollector
|
||||
) {
|
||||
List<String> files = factory.getOutputFiles();
|
||||
for (String file : files) {
|
||||
List<File> sourceFiles = factory.getSourceFiles(file);
|
||||
File target = new File(outputDirector.getOutputDirectory(sourceFiles), file);
|
||||
messageCollector.report(
|
||||
CompilerMessageSeverity.OUTPUT,
|
||||
OutputMessageUtil.formatOutputMessage(sourceFiles, target),
|
||||
CompilerMessageLocation.NO_LOCATION);
|
||||
try {
|
||||
FileUtil.writeToFile(target, factory.asBytes(file));
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new CompileEnvironmentException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeToOutputDirectory(ClassFileFactory factory, @NotNull File outputDir) {
|
||||
writeToOutputWithDirector(factory, singleDirectory(outputDir), MessageCollector.NONE);
|
||||
}
|
||||
|
||||
// Used for debug output only
|
||||
private static String loadModuleScriptText(String moduleScriptFile) {
|
||||
String moduleScriptText;
|
||||
@@ -302,7 +261,7 @@ public class CompileEnvironmentUtil {
|
||||
writeToJar(jar, includeRuntime, mainClass, factory);
|
||||
}
|
||||
else if (outputDir != null) {
|
||||
writeToOutputWithDirector(factory, outputDir, messageCollector);
|
||||
OutputUtilsPackage.writeAll(factory, outputDir, messageCollector);
|
||||
}
|
||||
else {
|
||||
throw new CompileEnvironmentException("Output directory or jar file is not specified - no files will be saved to the disk");
|
||||
|
||||
+6
-4
@@ -32,6 +32,8 @@ import org.jetbrains.jet.cli.common.CompilerPlugin;
|
||||
import org.jetbrains.jet.cli.common.CompilerPluginContext;
|
||||
import org.jetbrains.jet.cli.common.messages.AnalyzerWithCompilerReport;
|
||||
import org.jetbrains.jet.cli.common.messages.MessageCollector;
|
||||
import org.jetbrains.jet.OutputDirector;
|
||||
import org.jetbrains.jet.SingleDirectoryDirector;
|
||||
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
||||
import org.jetbrains.jet.codegen.*;
|
||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||
@@ -112,7 +114,7 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
private static void writeOutput(
|
||||
CompilerConfiguration configuration,
|
||||
ClassFileFactory moduleFactory,
|
||||
CompileEnvironmentUtil.OutputDirector outputDir,
|
||||
OutputDirector outputDir,
|
||||
File jarPath,
|
||||
boolean jarRuntime,
|
||||
FqName mainClass
|
||||
@@ -137,10 +139,10 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
if (moduleFactory == null) {
|
||||
return false;
|
||||
}
|
||||
CompileEnvironmentUtil.OutputDirector outputDir = new CompileEnvironmentUtil.OutputDirector() {
|
||||
OutputDirector outputDir = new OutputDirector() {
|
||||
@NotNull
|
||||
@Override
|
||||
public File getOutputDirectory(@NotNull Collection<File> sourceFiles) {
|
||||
public File getOutputDirectory(@NotNull Collection<? extends File> sourceFiles) {
|
||||
for (File sourceFile : sourceFiles) {
|
||||
// Note that here we track original modules:
|
||||
Module module = chunk.findModuleBySourceFile(sourceFile);
|
||||
@@ -188,7 +190,7 @@ public class KotlinToJVMBytecodeCompiler {
|
||||
}
|
||||
|
||||
try {
|
||||
CompileEnvironmentUtil.OutputDirector outputDirector = CompileEnvironmentUtil.singleDirectory(outputDir);
|
||||
OutputDirector outputDirector = outputDir != null ? new SingleDirectoryDirector(outputDir) : null;
|
||||
writeOutput(environment.getConfiguration(), generationState.getFactory(), outputDirector, jar, includeRuntime, mainClass);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -26,8 +26,8 @@ import org.jetbrains.asm4.Opcodes;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.TestJdkKind;
|
||||
import org.jetbrains.jet.outputUtils.OutputUtilsPackage;
|
||||
import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.config.CompilerConfiguration;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
@@ -84,7 +84,7 @@ public class GenerateNotNullAssertionsTest extends CodegenTestCase {
|
||||
loadFile("notNullAssertions/noAssertionsForKotlin.kt");
|
||||
ClassFileFactory factory = generateClassesInFile();
|
||||
File compiledDirectory = new File(FileUtil.getTempDirectory(), "kotlin-classes");
|
||||
CompileEnvironmentUtil.writeToOutputDirectory(factory, compiledDirectory);
|
||||
OutputUtilsPackage.writeAllTo(factory, compiledDirectory);
|
||||
|
||||
setUpEnvironment(true, false, compiledDirectory);
|
||||
loadFile("notNullAssertions/noAssertionsForKotlinMain.kt");
|
||||
|
||||
@@ -26,7 +26,7 @@ import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.JetTestCaseBuilder;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.TestJdkKind;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||
import org.jetbrains.jet.outputUtils.OutputUtilsPackage;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
@@ -70,7 +70,7 @@ public class LineNumberTest extends TestCaseWithTmpdir {
|
||||
environment.getProject());
|
||||
|
||||
ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile);
|
||||
CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir);
|
||||
OutputUtilsPackage.writeAllTo(classFileFactory, tmpdir);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.TestJdkKind;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||
import org.jetbrains.jet.outputUtils.OutputUtilsPackage;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||
import org.jetbrains.jet.codegen.GenerationUtils;
|
||||
@@ -93,7 +93,7 @@ public abstract class AbstractCompileKotlinAgainstKotlinTest extends TestCaseWit
|
||||
|
||||
ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile);
|
||||
|
||||
CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, outputDir);
|
||||
OutputUtilsPackage.writeAllTo(classFileFactory, outputDir);
|
||||
|
||||
Disposer.dispose(disposable);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ import org.jetbrains.asm4.ClassVisitor;
|
||||
import org.jetbrains.asm4.MethodVisitor;
|
||||
import org.jetbrains.asm4.Opcodes;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||
import org.jetbrains.jet.outputUtils.OutputUtilsPackage;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||
import org.jetbrains.jet.codegen.GenerationUtils;
|
||||
@@ -72,7 +72,7 @@ public abstract class AbstractWriteSignatureTest extends TestCaseWithTmpdir {
|
||||
|
||||
ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile);
|
||||
|
||||
CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir);
|
||||
OutputUtilsPackage.writeAllTo(classFileFactory, tmpdir);
|
||||
|
||||
Disposer.dispose(myTestRootDisposable);
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@ import org.jetbrains.jet.ConfigurationKind;
|
||||
import org.jetbrains.jet.JetTestUtils;
|
||||
import org.jetbrains.jet.TestJdkKind;
|
||||
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil;
|
||||
import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
|
||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||
import org.jetbrains.jet.codegen.GenerationUtils;
|
||||
@@ -39,6 +38,7 @@ import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.outputUtils.OutputUtilsPackage;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -80,7 +80,7 @@ public final class LoadDescriptorUtil {
|
||||
GenerationState state = GenerationUtils.compileFilesGetGenerationState(fileAndExhaust.getJetFile().getProject(), fileAndExhaust.getExhaust(), Collections.singletonList(
|
||||
fileAndExhaust.getJetFile()));
|
||||
ClassFileFactory classFileFactory = state.getFactory();
|
||||
CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, outDir);
|
||||
OutputUtilsPackage.writeAllTo(classFileFactory, outDir);
|
||||
return fileAndExhaust.getExhaust();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user