diff --git a/.idea/modules.xml b/.idea/modules.xml index 7cf100cd80a..fd74864453a 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -7,6 +7,7 @@ + @@ -32,7 +33,7 @@ - + diff --git a/build.xml b/build.xml index a58cb22b777..1a25cf3f4e7 100644 --- a/build.xml +++ b/build.xml @@ -516,8 +516,8 @@ - - + + @@ -552,7 +552,9 @@ - + + + diff --git a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java index ad61b3c56c2..e7d47ccf530 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java +++ b/compiler/tests/org/jetbrains/jet/codegen/CodegenTestUtil.java @@ -103,7 +103,9 @@ public class CodegenTestUtil { try { File javaClassesTempDirectory = new File(FileUtil.getTempDirectory(), "java-classes"); JetTestUtils.mkdirs(javaClassesTempDirectory); - String classPath = "out/production/runtime" + File.pathSeparator + JetTestUtils.getAnnotationsJar().getPath(); + String classPath = "out/production/builtins" + File.pathSeparator + + "out/production/runtime.jvm" + File.pathSeparator + + JetTestUtils.getAnnotationsJar().getPath(); List options = Arrays.asList( "-classpath", classPath, "-d", javaClassesTempDirectory.getPath() diff --git a/compiler/tests/org/jetbrains/jet/codegen/forTestCompile/ForTestCompileRuntime.java b/compiler/tests/org/jetbrains/jet/codegen/forTestCompile/ForTestCompileRuntime.java index 51938e10f2b..e2851ef5534 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/forTestCompile/ForTestCompileRuntime.java +++ b/compiler/tests/org/jetbrains/jet/codegen/forTestCompile/ForTestCompileRuntime.java @@ -17,25 +17,17 @@ package org.jetbrains.jet.codegen.forTestCompile; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.jvm.K2JVMCompiler; import org.jetbrains.jet.utils.Profiler; -import org.junit.Assert; -import javax.tools.*; import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Locale; /** - * Compile stdlib.jar that can be used in tests + * Compile kotlin-runtime.jar that can be used in tests * * @see #runtimeJarForTests */ @@ -53,67 +45,32 @@ public class ForTestCompileRuntime { @Override protected void doCompile(@NotNull File classesDir) throws Exception { - compileJavaPartOfBuiltins(classesDir); + compileJvmBuiltins(classesDir); compileStdlib(classesDir); } } - private static void compileStdlib(File destdir) throws IOException { + private static void compileStdlib(@NotNull File destDir) throws IOException { ExitCode exitCode = new K2JVMCompiler().exec(System.out, - "-output", destdir.getPath(), + "-output", destDir.getPath(), "-src", "./libraries/stdlib/src", "-noStdlib", "-noJdkAnnotations", "-suppress", "warnings", "-annotations", "./jdk-annotations", - "-classpath", "out/production/runtime"); + "-classpath", "out/production/builtins" + File.pathSeparator + "out/production/runtime.jvm"); if (exitCode != ExitCode.OK) { throw new IllegalStateException("stdlib for test compilation failed: " + exitCode); } } - - private static List javaFilesInDir(File dir) { - List r = new ArrayList(); - Stack stack = new Stack(); - stack.push(dir); - while (!stack.empty()) { - File file = stack.pop(); - if (file.isDirectory()) { - stack.addAll(Arrays.asList(file.listFiles())); - } - else if (file.getName().endsWith(".java")) { - r.add(file); - } - } - return r; + + private static void compileJvmBuiltins(@NotNull File destDir) throws IOException { + // Sources of stdlib and built-ins may diverge this way, because the former are compiled with the new compiler and the latter are + // just copied from the sources built by bootstrap plugin (which has an old compiler) + // TODO: compile Kotlin+Java built-in sources properly here, maybe reusing KotlinCompilerAdapter ant task + FileUtil.copyDir(new File("out/production/builtins"), destDir); + FileUtil.copyDir(new File("out/production/runtime.jvm"), destDir); } - - private static void compileJavaPartOfBuiltins(File destdir) throws IOException { - if (true) { - FileUtil.copyDir(new File("out/production/runtime"), destdir); - } - else { - doCompileJavaPartOfBuiltins(destdir); - } - } - - private static void doCompileJavaPartOfBuiltins(File destdir) throws IOException {JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler(); - - StandardJavaFileManager fileManager = javaCompiler.getStandardFileManager(null, Locale.ENGLISH, Charset.forName("utf-8")); - try { - Iterable javaFileObjectsFromFiles = fileManager.getJavaFileObjectsFromFiles(javaFilesInDir(new File("runtime/src"))); - List options = Arrays.asList( - "-d", destdir.getPath() - ); - JavaCompiler.CompilationTask task = javaCompiler.getTask(null, fileManager, null, options, null, javaFileObjectsFromFiles); - - Assert.assertTrue(task.call()); - } - finally { - fileManager.close(); - } - } - @NotNull public static File runtimeJarForTests() { diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java index fb48a11501e..acc63dd0804 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadDescriptorUtil.java @@ -110,8 +110,9 @@ public final class LoadDescriptorUtil { } private static void compileJavaWithAnnotationsJar(@NotNull Collection javaFiles, @NotNull File outDir) throws IOException { - String classPath = "out/production/runtime" + - File.pathSeparator + JetTestUtils.getAnnotationsJar().getPath(); + String classPath = "out/production/builtins" + File.pathSeparator + + "out/production/runtime.jvm" + File.pathSeparator + + JetTestUtils.getAnnotationsJar().getPath(); JetTestUtils.compileJavaFiles(javaFiles, Arrays.asList( "-classpath", classPath, "-sourcepath", "compiler/tests", // for @ExpectLoadError annotation diff --git a/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTest.java b/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTest.java index 604389a01e0..0f7b52de149 100644 --- a/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTest.java +++ b/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTest.java @@ -48,7 +48,8 @@ public class ReplInterpreterTest { private void testFile(@NotNull String relativePath) { CompilerConfiguration configuration = JetTestUtils.compilerConfigurationForTests(ConfigurationKind.JDK_ONLY, TestJdkKind.FULL_JDK); - configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("out/production/runtime")); + configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("out/production/builtins")); + configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File("out/production/runtime.jvm")); ReplInterpreter repl = new ReplInterpreter(disposable, configuration); ReplSessionTestFile file = ReplSessionTestFile.load(new File("compiler/testData/repl/" + relativePath)); diff --git a/runtime/runtime.iml b/core/builtins/builtins.iml similarity index 85% rename from runtime/runtime.iml rename to core/builtins/builtins.iml index 94b400ce62f..d5c07432750 100644 --- a/runtime/runtime.iml +++ b/core/builtins/builtins.iml @@ -4,7 +4,6 @@ - diff --git a/runtime/kt/Annotations.kt b/core/builtins/src/jet/Annotations.kt similarity index 100% rename from runtime/kt/Annotations.kt rename to core/builtins/src/jet/Annotations.kt diff --git a/runtime/kt/ExtensionFunctions.kt b/core/builtins/src/jet/ExtensionFunctions.kt similarity index 100% rename from runtime/kt/ExtensionFunctions.kt rename to core/builtins/src/jet/ExtensionFunctions.kt diff --git a/runtime/kt/Functions.kt b/core/builtins/src/jet/Functions.kt similarity index 100% rename from runtime/kt/Functions.kt rename to core/builtins/src/jet/Functions.kt diff --git a/runtime/kt/Inline.kt b/core/builtins/src/jet/Inline.kt similarity index 100% rename from runtime/kt/Inline.kt rename to core/builtins/src/jet/Inline.kt diff --git a/runtime/kt/Iterators.kt b/core/builtins/src/jet/Iterators.kt similarity index 100% rename from runtime/kt/Iterators.kt rename to core/builtins/src/jet/Iterators.kt diff --git a/runtime/kt/KExtensionFunctions.kt b/core/builtins/src/jet/KExtensionFunctions.kt similarity index 100% rename from runtime/kt/KExtensionFunctions.kt rename to core/builtins/src/jet/KExtensionFunctions.kt diff --git a/runtime/kt/KFunctions.kt b/core/builtins/src/jet/KFunctions.kt similarity index 100% rename from runtime/kt/KFunctions.kt rename to core/builtins/src/jet/KFunctions.kt diff --git a/runtime/kt/KMemberFunctions.kt b/core/builtins/src/jet/KMemberFunctions.kt similarity index 100% rename from runtime/kt/KMemberFunctions.kt rename to core/builtins/src/jet/KMemberFunctions.kt diff --git a/runtime/kt/Progression.kt b/core/builtins/src/jet/Progression.kt similarity index 100% rename from runtime/kt/Progression.kt rename to core/builtins/src/jet/Progression.kt diff --git a/runtime/kt/ProgressionIterators.kt b/core/builtins/src/jet/ProgressionIterators.kt similarity index 100% rename from runtime/kt/ProgressionIterators.kt rename to core/builtins/src/jet/ProgressionIterators.kt diff --git a/runtime/kt/Progressions.kt b/core/builtins/src/jet/Progressions.kt similarity index 100% rename from runtime/kt/Progressions.kt rename to core/builtins/src/jet/Progressions.kt diff --git a/runtime/kt/PropertyMetadata.kt b/core/builtins/src/jet/PropertyMetadata.kt similarity index 100% rename from runtime/kt/PropertyMetadata.kt rename to core/builtins/src/jet/PropertyMetadata.kt diff --git a/runtime/kt/Range.kt b/core/builtins/src/jet/Range.kt similarity index 100% rename from runtime/kt/Range.kt rename to core/builtins/src/jet/Range.kt diff --git a/runtime/kt/Ranges.kt b/core/builtins/src/jet/Ranges.kt similarity index 100% rename from runtime/kt/Ranges.kt rename to core/builtins/src/jet/Ranges.kt diff --git a/runtime/kt/Unit.kt b/core/builtins/src/jet/Unit.kt similarity index 100% rename from runtime/kt/Unit.kt rename to core/builtins/src/jet/Unit.kt diff --git a/runtime/src/jet/runtime/ProgressionUtil.java b/core/builtins/src/jet/runtime/ProgressionUtil.java similarity index 100% rename from runtime/src/jet/runtime/ProgressionUtil.java rename to core/builtins/src/jet/runtime/ProgressionUtil.java diff --git a/core/runtime.jvm/runtime.jvm.iml b/core/runtime.jvm/runtime.jvm.iml new file mode 100644 index 00000000000..e49743833b9 --- /dev/null +++ b/core/runtime.jvm/runtime.jvm.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/runtime/src/jet/DefaultJetObject.java b/core/runtime.jvm/src/jet/DefaultJetObject.java similarity index 100% rename from runtime/src/jet/DefaultJetObject.java rename to core/runtime.jvm/src/jet/DefaultJetObject.java diff --git a/runtime/kt/ExtensionFunctionsImpl.kt b/core/runtime.jvm/src/jet/ExtensionFunctionsImpl.kt similarity index 100% rename from runtime/kt/ExtensionFunctionsImpl.kt rename to core/runtime.jvm/src/jet/ExtensionFunctionsImpl.kt diff --git a/runtime/kt/FunctionsImpl.kt b/core/runtime.jvm/src/jet/FunctionsImpl.kt similarity index 100% rename from runtime/kt/FunctionsImpl.kt rename to core/runtime.jvm/src/jet/FunctionsImpl.kt diff --git a/runtime/src/jet/JetObject.java b/core/runtime.jvm/src/jet/JetObject.java similarity index 100% rename from runtime/src/jet/JetObject.java rename to core/runtime.jvm/src/jet/JetObject.java diff --git a/runtime/kt/KExtensionFunctionsImpl.kt b/core/runtime.jvm/src/jet/KExtensionFunctionsImpl.kt similarity index 100% rename from runtime/kt/KExtensionFunctionsImpl.kt rename to core/runtime.jvm/src/jet/KExtensionFunctionsImpl.kt diff --git a/runtime/kt/KFunctionsImpl.kt b/core/runtime.jvm/src/jet/KFunctionsImpl.kt similarity index 100% rename from runtime/kt/KFunctionsImpl.kt rename to core/runtime.jvm/src/jet/KFunctionsImpl.kt diff --git a/runtime/kt/KMemberFunctionsImpl.kt b/core/runtime.jvm/src/jet/KMemberFunctionsImpl.kt similarity index 100% rename from runtime/kt/KMemberFunctionsImpl.kt rename to core/runtime.jvm/src/jet/KMemberFunctionsImpl.kt diff --git a/runtime/src/jet/KotlinClass.java b/core/runtime.jvm/src/jet/KotlinClass.java similarity index 100% rename from runtime/src/jet/KotlinClass.java rename to core/runtime.jvm/src/jet/KotlinClass.java diff --git a/runtime/src/jet/KotlinPackage.java b/core/runtime.jvm/src/jet/KotlinPackage.java similarity index 100% rename from runtime/src/jet/KotlinPackage.java rename to core/runtime.jvm/src/jet/KotlinPackage.java diff --git a/runtime/src/jet/KotlinPackageFragment.java b/core/runtime.jvm/src/jet/KotlinPackageFragment.java similarity index 100% rename from runtime/src/jet/KotlinPackageFragment.java rename to core/runtime.jvm/src/jet/KotlinPackageFragment.java diff --git a/runtime/src/jet/KotlinTraitImpl.java b/core/runtime.jvm/src/jet/KotlinTraitImpl.java similarity index 100% rename from runtime/src/jet/KotlinTraitImpl.java rename to core/runtime.jvm/src/jet/KotlinTraitImpl.java diff --git a/runtime/src/jet/NoPatternMatchedException.java b/core/runtime.jvm/src/jet/NoPatternMatchedException.java similarity index 100% rename from runtime/src/jet/NoPatternMatchedException.java rename to core/runtime.jvm/src/jet/NoPatternMatchedException.java diff --git a/runtime/src/jet/TypeCastException.java b/core/runtime.jvm/src/jet/TypeCastException.java similarity index 100% rename from runtime/src/jet/TypeCastException.java rename to core/runtime.jvm/src/jet/TypeCastException.java diff --git a/runtime/src/jet/modules/AllModules.java b/core/runtime.jvm/src/jet/modules/AllModules.java similarity index 100% rename from runtime/src/jet/modules/AllModules.java rename to core/runtime.jvm/src/jet/modules/AllModules.java diff --git a/runtime/src/jet/modules/Module.java b/core/runtime.jvm/src/jet/modules/Module.java similarity index 100% rename from runtime/src/jet/modules/Module.java rename to core/runtime.jvm/src/jet/modules/Module.java diff --git a/runtime/src/jet/runtime/ArrayIterator.java b/core/runtime.jvm/src/jet/runtime/ArrayIterator.java similarity index 100% rename from runtime/src/jet/runtime/ArrayIterator.java rename to core/runtime.jvm/src/jet/runtime/ArrayIterator.java diff --git a/runtime/src/jet/runtime/CollectionToArray.java b/core/runtime.jvm/src/jet/runtime/CollectionToArray.java similarity index 100% rename from runtime/src/jet/runtime/CollectionToArray.java rename to core/runtime.jvm/src/jet/runtime/CollectionToArray.java diff --git a/runtime/src/jet/runtime/Intrinsic.java b/core/runtime.jvm/src/jet/runtime/Intrinsic.java similarity index 100% rename from runtime/src/jet/runtime/Intrinsic.java rename to core/runtime.jvm/src/jet/runtime/Intrinsic.java diff --git a/runtime/src/jet/runtime/Intrinsics.java b/core/runtime.jvm/src/jet/runtime/Intrinsics.java similarity index 100% rename from runtime/src/jet/runtime/Intrinsics.java rename to core/runtime.jvm/src/jet/runtime/Intrinsics.java diff --git a/runtime/src/jet/runtime/Ranges.java b/core/runtime.jvm/src/jet/runtime/Ranges.java similarity index 100% rename from runtime/src/jet/runtime/Ranges.java rename to core/runtime.jvm/src/jet/runtime/Ranges.java diff --git a/runtime/src/jet/runtime/SharedVar.java b/core/runtime.jvm/src/jet/runtime/SharedVar.java similarity index 100% rename from runtime/src/jet/runtime/SharedVar.java rename to core/runtime.jvm/src/jet/runtime/SharedVar.java diff --git a/runtime/src/jet/runtime/typeinfo/JetValueParameter.java b/core/runtime.jvm/src/jet/runtime/typeinfo/JetValueParameter.java similarity index 100% rename from runtime/src/jet/runtime/typeinfo/JetValueParameter.java rename to core/runtime.jvm/src/jet/runtime/typeinfo/JetValueParameter.java diff --git a/runtime/src/jet/runtime/typeinfo/KotlinSignature.java b/core/runtime.jvm/src/jet/runtime/typeinfo/KotlinSignature.java similarity index 100% rename from runtime/src/jet/runtime/typeinfo/KotlinSignature.java rename to core/runtime.jvm/src/jet/runtime/typeinfo/KotlinSignature.java diff --git a/runtime/src/org/jetbrains/annotations/Mutable.java b/core/runtime.jvm/src/org/jetbrains/annotations/Mutable.java similarity index 100% rename from runtime/src/org/jetbrains/annotations/Mutable.java rename to core/runtime.jvm/src/org/jetbrains/annotations/Mutable.java diff --git a/runtime/src/org/jetbrains/annotations/NotNull.java b/core/runtime.jvm/src/org/jetbrains/annotations/NotNull.java similarity index 100% rename from runtime/src/org/jetbrains/annotations/NotNull.java rename to core/runtime.jvm/src/org/jetbrains/annotations/NotNull.java diff --git a/runtime/src/org/jetbrains/annotations/Nullable.java b/core/runtime.jvm/src/org/jetbrains/annotations/Nullable.java similarity index 100% rename from runtime/src/org/jetbrains/annotations/Nullable.java rename to core/runtime.jvm/src/org/jetbrains/annotations/Nullable.java diff --git a/runtime/src/org/jetbrains/annotations/ReadOnly.java b/core/runtime.jvm/src/org/jetbrains/annotations/ReadOnly.java similarity index 100% rename from runtime/src/org/jetbrains/annotations/ReadOnly.java rename to core/runtime.jvm/src/org/jetbrains/annotations/ReadOnly.java diff --git a/generators/src/org/jetbrains/jet/generators/runtime/common.kt b/generators/src/org/jetbrains/jet/generators/runtime/common.kt index b2f496c06a9..c02af9821a7 100644 --- a/generators/src/org/jetbrains/jet/generators/runtime/common.kt +++ b/generators/src/org/jetbrains/jet/generators/runtime/common.kt @@ -50,20 +50,32 @@ fun floatToIntBits(v: String) = "java.lang.Float.floatToIntBits($v)" fun doubleToLongBits(v: String) = "java.lang.Double.doubleToLongBits($v)" -val OUTPUT_DIR: File by Delegates.lazy { - val result = File("runtime/kt/") + +fun existingDirectory(path: String): File { + val result = File(path) if (!result.exists()) { throw IllegalStateException("Output dir does not exist: ${result.getAbsolutePath()}") } - result + return result } -fun generateRuntimeFile(name: String, generate: (PrintWriter) -> Unit) { - val file = File(OUTPUT_DIR, name) +val BUILT_INS_DIR: File by Delegates.lazy { existingDirectory("core/builtins/src/jet/") } +val RUNTIME_JVM_DIR: File by Delegates.lazy { existingDirectory("core/runtime.jvm/src/jet/") } + +fun generateFile(dir: File, name: String, generate: (PrintWriter) -> Unit) { + val file = File(dir, name) println("generating $file") PrintWriter(file) use generate } +fun generateBuiltInFile(name: String, generate: (PrintWriter) -> Unit) { + generateFile(BUILT_INS_DIR, name, generate) +} + +fun generateRuntimeJvmFile(name: String, generate: (PrintWriter) -> Unit) { + generateFile(BUILT_INS_DIR, name, generate) +} + fun generatedBy(out: PrintWriter, generator: String) { out.println("// Generated by $generator") out.println() diff --git a/generators/src/org/jetbrains/jet/generators/runtime/functions.kt b/generators/src/org/jetbrains/jet/generators/runtime/functions.kt index d276ca38e91..b0e382cc01c 100644 --- a/generators/src/org/jetbrains/jet/generators/runtime/functions.kt +++ b/generators/src/org/jetbrains/jet/generators/runtime/functions.kt @@ -122,11 +122,11 @@ class GenerateFunctions(val out: PrintWriter, val kind: FunctionKind) { fun main(args: Array) { for (kind in FunctionKind.values()) { - generateRuntimeFile(kind.getFileName()) { + generateBuiltInFile(kind.getFileName()) { GenerateFunctions(it, kind).generateFunctionClasses() } - generateRuntimeFile(kind.getImplFileName()) { + generateRuntimeJvmFile(kind.getImplFileName()) { GenerateFunctions(it, kind).generateFunctionImplClasses() } } diff --git a/generators/src/org/jetbrains/jet/generators/runtime/iterators.kt b/generators/src/org/jetbrains/jet/generators/runtime/iterators.kt index 6f259b3e121..8e04fce622a 100644 --- a/generators/src/org/jetbrains/jet/generators/runtime/iterators.kt +++ b/generators/src/org/jetbrains/jet/generators/runtime/iterators.kt @@ -48,7 +48,7 @@ class GenerateIterators(val out: PrintWriter) { } fun main(args: Array) { - generateRuntimeFile("Iterators.kt") { + generateBuiltInFile("Iterators.kt") { GenerateIterators(it).generate() } } diff --git a/generators/src/org/jetbrains/jet/generators/runtime/progressions.kt b/generators/src/org/jetbrains/jet/generators/runtime/progressions.kt index b8a263418f2..e7c2033c0be 100644 --- a/generators/src/org/jetbrains/jet/generators/runtime/progressions.kt +++ b/generators/src/org/jetbrains/jet/generators/runtime/progressions.kt @@ -84,7 +84,7 @@ class GenerateProgressions(val out: PrintWriter) { } fun main(args: Array) { - generateRuntimeFile("Progressions.kt") { + generateBuiltInFile("Progressions.kt") { GenerateProgressions(it).generate() } } diff --git a/generators/src/org/jetbrains/jet/generators/runtime/ranges.kt b/generators/src/org/jetbrains/jet/generators/runtime/ranges.kt index 86d51cd6fc0..d9598a53671 100644 --- a/generators/src/org/jetbrains/jet/generators/runtime/ranges.kt +++ b/generators/src/org/jetbrains/jet/generators/runtime/ranges.kt @@ -81,7 +81,7 @@ class GenerateRanges(val out: PrintWriter) { } fun main(args: Array) { - generateRuntimeFile("Ranges.kt") { + generateBuiltInFile("Ranges.kt") { GenerateRanges(it).generate() } } diff --git a/libraries/tools/runtime/pom.xml b/libraries/tools/runtime/pom.xml index 841085c936f..dbf820ad450 100644 --- a/libraries/tools/runtime/pom.xml +++ b/libraries/tools/runtime/pom.xml @@ -32,8 +32,8 @@ - - + +