diff --git a/.idea/artifacts/KotlinPlugin.xml b/.idea/artifacts/KotlinPlugin.xml
index 96244617efa..5550cf923a2 100644
--- a/.idea/artifacts/KotlinPlugin.xml
+++ b/.idea/artifacts/KotlinPlugin.xml
@@ -24,6 +24,7 @@
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index f1cc2f0995e..c1c71eff775 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -6,6 +6,7 @@
+
diff --git a/build.xml b/build.xml
index 2aeccdcad58..0cfed881ffd 100644
--- a/build.xml
+++ b/build.xml
@@ -60,6 +60,7 @@
+
@@ -139,6 +140,7 @@
+
diff --git a/compiler/backend-common/backend-common.iml b/compiler/backend-common/backend-common.iml
new file mode 100644
index 00000000000..3ff6ea7672e
--- /dev/null
+++ b/compiler/backend-common/backend-common.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/compiler/backend-common/src/OutputFileFactory.kt b/compiler/backend-common/src/OutputFileFactory.kt
new file mode 100644
index 00000000000..3055224010a
--- /dev/null
+++ b/compiler/backend-common/src/OutputFileFactory.kt
@@ -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 OutputFileFactory {
+ public val outputFiles: List
+
+ public fun getSourceFiles(file: String): List
+ public fun asBytes(file: String): ByteArray
+ public fun asText(file: String): String
+}
\ No newline at end of file
diff --git a/compiler/backend/backend.iml b/compiler/backend/backend.iml
index 6cd681955b5..45ae5fd4672 100644
--- a/compiler/backend/backend.iml
+++ b/compiler/backend/backend.iml
@@ -16,6 +16,7 @@
+
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java
index 00661591e07..597efc5cef5 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassFileFactory.java
@@ -24,6 +24,7 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.asm4.Type;
+import org.jetbrains.jet.OutputFileFactory;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.GenerationStateAware;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
@@ -38,7 +39,7 @@ import static org.jetbrains.jet.codegen.AsmUtil.asmTypeByFqNameWithoutInnerClass
import static org.jetbrains.jet.codegen.AsmUtil.isPrimitive;
import static org.jetbrains.jet.lang.resolve.java.PackageClassUtils.getPackageClassFqName;
-public final class ClassFileFactory extends GenerationStateAware {
+public final class ClassFileFactory extends GenerationStateAware implements OutputFileFactory {
@NotNull private ClassBuilderFactory builderFactory;
private final Map ns2codegen = new HashMap();
@@ -78,21 +79,25 @@ public final class ClassFileFactory extends GenerationStateAware {
}
}
+ @Override
public String asText(String file) {
done();
return builderFactory.asText(generators.get(file).classBuilder);
}
+ @Override
public byte[] asBytes(String file) {
done();
return builderFactory.asBytes(generators.get(file).classBuilder);
}
- public List files() {
+ @Override
+ public List getOutputFiles() {
done();
return new ArrayList(generators.keySet());
}
+ @Override
public List getSourceFiles(String relativeClassFilePath) {
ClassBuilderAndSourceFileList pair = generators.get(relativeClassFilePath);
if (pair == null) {
@@ -116,7 +121,7 @@ public final class ClassFileFactory extends GenerationStateAware {
public String createText() {
StringBuilder answer = new StringBuilder();
- List files = files();
+ List files = getOutputFiles();
for (String file : files) {
// if (!file.startsWith("kotlin/")) {
answer.append("@").append(file).append('\n');
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/GeneratedClassLoader.java b/compiler/backend/src/org/jetbrains/jet/codegen/GeneratedClassLoader.java
index c151b0ca4ba..53bd07f28f6 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/GeneratedClassLoader.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/GeneratedClassLoader.java
@@ -33,7 +33,7 @@ public class GeneratedClassLoader extends URLClassLoader {
@Override
protected Class> findClass(@NotNull String name) throws ClassNotFoundException {
String file = name.replace('.', '/') + ".class";
- if (state.files().contains(file)) {
+ if (state.getOutputFiles().contains(file)) {
byte[] bytes = state.asBytes(file);
return defineClass(name, bytes, 0, bytes.length);
}
diff --git a/compiler/cli/cli.iml b/compiler/cli/cli.iml
index d9fad8ad997..a8b242b3638 100644
--- a/compiler/cli/cli.iml
+++ b/compiler/cli/cli.iml
@@ -17,6 +17,7 @@
+
diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java
index e2aeffd744e..2bc1c887153 100644
--- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java
+++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java
@@ -26,6 +26,7 @@ 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.modules.ModuleDescription;
@@ -178,7 +179,7 @@ public class CompileEnvironmentUtil {
mainAttributes.putValue("Main-Class", mainClass.asString());
}
JarOutputStream stream = new JarOutputStream(fos, manifest);
- for (String file : factory.files()) {
+ for (String file : factory.getOutputFiles()) {
stream.putNextEntry(new JarEntry(file));
stream.write(factory.asBytes(file));
}
@@ -252,11 +253,11 @@ public class CompileEnvironmentUtil {
}
public static void writeToOutputWithDirector(
- ClassFileFactory factory,
+ OutputFileFactory factory,
@NotNull OutputDirector outputDirector,
@NotNull MessageCollector messageCollector
) {
- List files = factory.files();
+ List files = factory.getOutputFiles();
for (String file : files) {
List sourceFiles = factory.getSourceFiles(file);
File target = new File(outputDirector.getOutputDirectory(sourceFiles), file);
diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java
index d548fa94768..59d695f37ce 100644
--- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java
+++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/repl/ReplInterpreter.java
@@ -241,7 +241,7 @@ public class ReplInterpreter {
compileScript(psiFile.getScript(), scriptClassType, earlierScripts, generationState,
CompilationErrorHandler.THROW_EXCEPTION);
- for (String file : generationState.getFactory().files()) {
+ for (String file : generationState.getFactory().getOutputFiles()) {
classLoader.addClass(JvmClassName.byInternalName(file.replaceFirst("\\.class$", "")), generationState.getFactory().asBytes(file));
}
diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java
index 97d2dbed60d..7bbf16e9054 100644
--- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java
+++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinJavaFileStubProvider.java
@@ -77,7 +77,7 @@ public class KotlinJavaFileStubProvider implements CachedValueProvider files) {
NamespaceCodegen codegen = state.getFactory().forNamespace(packageFqName, files);
codegen.generate(CompilationErrorHandler.THROW_EXCEPTION);
- state.getFactory().files();
+ state.getFactory().getOutputFiles();
}
});
}
@@ -107,7 +107,7 @@ public class KotlinJavaFileStubProvider implements CachedValueProvider files) {
NamespaceCodegen namespaceCodegen = state.getFactory().forNamespace(getPackageFqName(), files);
namespaceCodegen.generateClassOrObject(classOrObject);
- state.getFactory().files();
+ state.getFactory().getOutputFiles();
}
});
}
diff --git a/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java b/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java
index 0ba32fd1758..ee3f4641bc8 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java
@@ -69,7 +69,7 @@ public abstract class AbstractCheckLocalVariablesTableTest extends TestCaseWithT
String modifiedTestName = ktFile.getName().replace(".kt", ".class");
boolean isClassFound = false;
- for (String filename : factory.files()) {
+ for (String filename : factory.getOutputFiles()) {
if (filename.equals(modifiedTestName)) {
isClassFound = true;
ClassReader cr = new ClassReader(factory.asBytes(filename));
diff --git a/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java b/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java
index 4f99548820e..93b8d0a5367 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/DxChecker.java
@@ -40,7 +40,7 @@ public class DxChecker {
array[0] = "testArgs";
arguments.parse(array);
- for (String file : factory.files()) {
+ for (String file : factory.getOutputFiles()) {
try {
CfTranslator.translate(file, factory.asBytes(file), arguments.cfOptions, arguments.dexOptions);
}
diff --git a/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageFragmentAnnotationTest.java b/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageFragmentAnnotationTest.java
index 00182119d5b..85cfb0d2981 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageFragmentAnnotationTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageFragmentAnnotationTest.java
@@ -39,7 +39,7 @@ public class KotlinPackageFragmentAnnotationTest extends CodegenTestCase {
String facadeFileName = JvmClassName.byFqNameWithoutInnerClasses(PackageClassUtils.getPackageClassFqName(NAMESPACE_NAME)).getInternalName() + ".class";
ClassFileFactory factory = generateClassesInFile();
- for (String fileName : factory.files()) {
+ for (String fileName : factory.getOutputFiles()) {
if (!fileName.equals(facadeFileName)) {
// The file which is not a facade is a package fragment
String fqName = fileName.substring(0, fileName.length() - ".class".length()).replace('/', '.');
@@ -60,6 +60,6 @@ public class KotlinPackageFragmentAnnotationTest extends CodegenTestCase {
}
}
- fail("No package fragment was found: " + factory.files());
+ fail("No package fragment was found: " + factory.getOutputFiles());
}
}
diff --git a/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java b/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java
index e0d390d0448..dd1f59edd48 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/LineNumberTest.java
@@ -112,7 +112,7 @@ public class LineNumberTest extends TestCaseWithTmpdir {
private static List extractActualLineNumbersFromBytecode(@NotNull GenerationState state, boolean testFunInvoke) {
ClassFileFactory factory = state.getFactory();
List actualLineNumbers = Lists.newArrayList();
- for (String filename : factory.files()) {
+ for (String filename : factory.getOutputFiles()) {
if (PackageClassUtils.isPackageClassFqName(new FqName(FileUtil.getNameWithoutExtension(filename)))) {
// Don't test line numbers in *Package facade classes
continue;
diff --git a/compiler/tests/org/jetbrains/jet/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java
index d7f01c83e31..289f8635e70 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/SyntheticMethodForAnnotatedPropertyGenTest.java
@@ -51,7 +51,7 @@ public class SyntheticMethodForAnnotatedPropertyGenTest extends CodegenTestCase
public void testTopLevel() {
loadFile();
String packageClassName = PackageClassUtils.getPackageClassName(FqName.ROOT);
- for (String fileName : generateClassesInFile().files()) {
+ for (String fileName : generateClassesInFile().getOutputFiles()) {
if (fileName.startsWith(packageClassName) && !fileName.equals(packageClassName + ".class")) {
// This should be package$src class
Class> a = generateClass(fileName.substring(0, fileName.length() - ".class".length()));
diff --git a/compiler/tests/org/jetbrains/jet/codegen/flags/AbstractWriteFlagsTest.java b/compiler/tests/org/jetbrains/jet/codegen/flags/AbstractWriteFlagsTest.java
index 439d1486c2c..559ae0fce25 100644
--- a/compiler/tests/org/jetbrains/jet/codegen/flags/AbstractWriteFlagsTest.java
+++ b/compiler/tests/org/jetbrains/jet/codegen/flags/AbstractWriteFlagsTest.java
@@ -82,7 +82,7 @@ public abstract class AbstractWriteFlagsTest extends UsefulTestCase {
List testedObjects = parseExpectedTestedObject(fileText);
for (TestedObject testedObject : testedObjects) {
String className = null;
- for (String filename : factory.files()) {
+ for (String filename : factory.getOutputFiles()) {
if (testedObject.isFullContainingClassName && filename.equals(testedObject.containingClass + ".class")) {
className = filename;
}
diff --git a/idea/src/org/jetbrains/jet/plugin/internal/codewindow/BytecodeToolwindow.java b/idea/src/org/jetbrains/jet/plugin/internal/codewindow/BytecodeToolwindow.java
index 91b6c73e956..b245a92698a 100644
--- a/idea/src/org/jetbrains/jet/plugin/internal/codewindow/BytecodeToolwindow.java
+++ b/idea/src/org/jetbrains/jet/plugin/internal/codewindow/BytecodeToolwindow.java
@@ -106,7 +106,7 @@ public class BytecodeToolwindow extends JPanel implements Disposable {
StringBuilder answer = new StringBuilder();
ClassFileFactory factory = state.getFactory();
- for (String filename : factory.files()) {
+ for (String filename : factory.getOutputFiles()) {
answer.append("// ================");
answer.append(filename);
answer.append(" =================\n");
diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java b/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java
index 6aa047a7c66..122e0ab5ccd 100644
--- a/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java
+++ b/idea/tests/org/jetbrains/jet/plugin/debugger/PositionManagerTestCase.java
@@ -128,7 +128,7 @@ public abstract class PositionManagerTestCase extends MultiFileTestCase {
private static Map getReferenceMap(ClassFileFactory classFileFactory) {
Map referencesByName = Maps.newHashMap();
- for (String classFileName : classFileFactory.files()) {
+ for (String classFileName : classFileFactory.getOutputFiles()) {
String name = classFileName.substring(0, classFileName.lastIndexOf('.'));
referencesByName.put(name, new MockReferenceType(name));
}