From 94cc847c4892b03ab16cdb47d26c72a2b017c751 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 2 Apr 2015 21:35:13 +0300 Subject: [PATCH] Drop module "ktm" scripts and support java source roots in "xml" modules Drop kotlin.modules package from runtime Move adapted classes into compiler Unsupport files with "ktm" extension Delete code for loading module scripts Drop tests for module scripts Separate section for java source roots in xml script generator/parser --- .../kotlin/cli/common/modules/Module.kt | 31 +++++ .../cli/common/modules/ModuleBuilder.kt | 50 ++++++++ .../cli/common/modules/ModuleScriptData.java | 1 - .../cli/common/modules/ModuleXmlParser.java | 7 +- .../kotlin/cli/jvm/K2JVMCompiler.java | 3 +- .../jvm/compiler/CompileEnvironmentUtil.java | 112 +----------------- .../compiler/KotlinToJVMBytecodeCompiler.java | 13 +- compiler/testData/compiler/smoke/Smoke.ktm | 7 -- .../Smoke.compile.expected | 1 - .../smoke/compileAndRunModule/Smoke.kt | 5 - .../smoke/compileAndRunModule/Smoke.ktm | 7 -- .../compileAndRunModule/Smoke.run.expected | 3 - .../kotlin/integration/CompilerSmokeTest.java | 9 -- .../jvm/compiler/CompileEnvironmentTest.java | 49 -------- .../xml/AbstractModuleXmlParserTest.java | 2 +- .../jetbrains/kotlin/idea/JetFileFactory.java | 2 +- .../modules/KotlinModuleXmlBuilder.java | 19 +-- .../stdlib/src/kotlin/modules/AllModules.kt | 7 -- libraries/stdlib/src/kotlin/modules/Module.kt | 13 -- .../src/kotlin/modules/ModuleBuilder.kt | 62 ---------- 20 files changed, 109 insertions(+), 294 deletions(-) create mode 100644 compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt create mode 100644 compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt delete mode 100644 compiler/testData/compiler/smoke/Smoke.ktm delete mode 100644 compiler/testData/integration/smoke/compileAndRunModule/Smoke.compile.expected delete mode 100644 compiler/testData/integration/smoke/compileAndRunModule/Smoke.kt delete mode 100644 compiler/testData/integration/smoke/compileAndRunModule/Smoke.ktm delete mode 100644 compiler/testData/integration/smoke/compileAndRunModule/Smoke.run.expected delete mode 100644 libraries/stdlib/src/kotlin/modules/AllModules.kt delete mode 100644 libraries/stdlib/src/kotlin/modules/Module.kt delete mode 100644 libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt new file mode 100644 index 00000000000..c0210951e6b --- /dev/null +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2015 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.kotlin.cli.common.modules + +public trait Module { + public fun getModuleName(): String + + public fun getOutputDirectory(): String + + public fun getSourceFiles(): List + + public fun getClasspathRoots(): List + + public fun getAnnotationsRoots(): List + + public fun getJavaSourceRoots(): List +} diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt new file mode 100644 index 00000000000..ccde3bd9b80 --- /dev/null +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2015 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.kotlin.cli.common.modules + +import java.util.ArrayList + +public class ModuleBuilder(private val name: String, private val outputDir: String) : Module { + private val sourceFiles = ArrayList() + private val classpathRoots = ArrayList() + private val javaSourceRoots = ArrayList() + private val annotationsRoots = ArrayList() + + public fun addSourceFiles(pattern: String) { + sourceFiles.add(pattern) + } + + public fun addClasspathEntry(name: String) { + classpathRoots.add(name) + } + + public fun addAnnotationsPathEntry(name: String) { + annotationsRoots.add(name) + } + + public fun addJavaSourceRoot(name: String) { + javaSourceRoots.add(name) + } + + override fun getOutputDirectory(): String = outputDir + override fun getJavaSourceRoots(): List = javaSourceRoots + override fun getSourceFiles(): List = sourceFiles + override fun getClasspathRoots(): List = classpathRoots + override fun getAnnotationsRoots(): List = annotationsRoots + override fun getModuleName(): String = name +} + diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleScriptData.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleScriptData.java index 40e8f3cc31c..b88755d6bde 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleScriptData.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleScriptData.java @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.cli.common.modules; -import kotlin.modules.Module; import org.jetbrains.annotations.NotNull; import java.util.Collections; diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java index d9b53f47b7c..7c48d0c11c8 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java @@ -18,8 +18,6 @@ package org.jetbrains.kotlin.cli.common.modules; import com.intellij.openapi.util.io.StreamUtil; import com.intellij.util.SmartList; -import kotlin.modules.Module; -import kotlin.modules.ModuleBuilder; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil; @@ -44,6 +42,7 @@ public class ModuleXmlParser { public static final String NAME = "name"; public static final String OUTPUT_DIR = "outputDir"; public static final String SOURCES = "sources"; + public static final String JAVA_SOURCE_ROOTS = "javaSourceRoots"; public static final String PATH = "path"; public static final String CLASSPATH = "classpath"; public static final String EXTERNAL_ANNOTATIONS = "externalAnnotations"; @@ -162,6 +161,10 @@ public class ModuleXmlParser { String path = getAttribute(attributes, PATH, qName); moduleBuilder.addAnnotationsPathEntry(path); } + else if (JAVA_SOURCE_ROOTS.equalsIgnoreCase(qName)) { + String path = getAttribute(attributes, PATH, qName); + moduleBuilder.addJavaSourceRoot(path); + } else { throw createError(qName); } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java index 6c94f223397..d5f8f14d315 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java @@ -166,8 +166,7 @@ public class K2JVMCompiler extends CLICompiler { if (arguments.module != null) { MessageCollector sanitizedCollector = new FilteringMessageCollector(messageCollector, in(CompilerMessageSeverity.VERBOSE)); - ModuleScriptData moduleScript = CompileEnvironmentUtil.loadModuleDescriptions( - paths, arguments.module, sanitizedCollector); + ModuleScriptData moduleScript = CompileEnvironmentUtil.loadModuleDescriptions(arguments.module, sanitizedCollector); if (outputDir != null) { messageCollector.report(CompilerMessageSeverity.WARNING, diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompileEnvironmentUtil.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompileEnvironmentUtil.java index 8176d3580cf..1a60097c163 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompileEnvironmentUtil.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CompileEnvironmentUtil.java @@ -18,9 +18,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.vfs.StandardFileSystems; @@ -32,23 +30,14 @@ import com.intellij.psi.PsiManager; import kotlin.Function1; import kotlin.Unit; import kotlin.io.IoPackage; -import kotlin.modules.AllModules; -import kotlin.modules.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.backend.common.output.OutputFile; -import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys; import org.jetbrains.kotlin.cli.common.messages.MessageCollector; -import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil; import org.jetbrains.kotlin.cli.common.modules.ModuleScriptData; import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser; -import org.jetbrains.kotlin.cli.jvm.config.JVMConfigurationKeys; import org.jetbrains.kotlin.codegen.ClassFileFactory; -import org.jetbrains.kotlin.codegen.GeneratedClassLoader; -import org.jetbrains.kotlin.codegen.state.GenerationState; -import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.idea.JetFileType; -import org.jetbrains.kotlin.load.kotlin.PackageClassUtils; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.utils.KotlinPaths; @@ -56,11 +45,6 @@ import org.jetbrains.kotlin.utils.PathUtil; import org.jetbrains.kotlin.utils.UtilsPackage; import java.io.*; -import java.lang.reflect.Method; -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.Set; @@ -68,23 +52,17 @@ import java.util.jar.*; import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation.NO_LOCATION; import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR; -import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.addJvmClasspathRoot; -import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.addJvmClasspathRoots; -import static org.jetbrains.kotlin.config.ConfigPackage.addKotlinSourceRoot; public class CompileEnvironmentUtil { @NotNull - public static ModuleScriptData loadModuleDescriptions(KotlinPaths paths, String moduleDefinitionFile, MessageCollector messageCollector) { + public static ModuleScriptData loadModuleDescriptions(String moduleDefinitionFile, MessageCollector messageCollector) { File file = new File(moduleDefinitionFile); if (!file.exists()) { messageCollector.report(ERROR, "Module definition file does not exist: " + moduleDefinitionFile, NO_LOCATION); return ModuleScriptData.EMPTY; } String extension = FileUtilRt.getExtension(moduleDefinitionFile); - if ("ktm".equalsIgnoreCase(extension)) { - return loadModuleScript(paths, moduleDefinitionFile, messageCollector); - } if ("xml".equalsIgnoreCase(extension)) { return ModuleXmlParser.parseModuleScript(moduleDefinitionFile, messageCollector); } @@ -92,84 +70,6 @@ public class CompileEnvironmentUtil { return ModuleScriptData.EMPTY; } - @NotNull - private static ModuleScriptData loadModuleScript(KotlinPaths paths, String moduleScriptFile, MessageCollector messageCollector) { - CompilerConfiguration configuration = new CompilerConfiguration(); - File runtimePath = paths.getRuntimePath(); - if (runtimePath.exists()) { - addJvmClasspathRoot(configuration, runtimePath); - } - addJvmClasspathRoots(configuration, PathUtil.getJdkClassesRoots()); - - File jdkAnnotationsPath = paths.getJdkAnnotationsPath(); - if (jdkAnnotationsPath.exists()) { - configuration.add(JVMConfigurationKeys.ANNOTATIONS_PATH_KEY, jdkAnnotationsPath); - } - addKotlinSourceRoot(configuration, moduleScriptFile); - configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageCollector); - - List modules; - - Disposable disposable = Disposer.newDisposable(); - try { - KotlinCoreEnvironment scriptEnvironment = - KotlinCoreEnvironment.createForProduction(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES); - GenerationState generationState = KotlinToJVMBytecodeCompiler.analyzeAndGenerate(scriptEnvironment); - if (generationState == null) { - throw new CompileEnvironmentException("Module script " + moduleScriptFile + " analyze failed:\n" + - loadModuleScriptText(moduleScriptFile)); - } - - modules = runDefineModules(paths, generationState.getFactory()); - } - finally { - Disposer.dispose(disposable); - } - - if (modules == null) { - throw new CompileEnvironmentException("Module script " + moduleScriptFile + " compilation failed"); - } - - if (modules.isEmpty()) { - throw new CompileEnvironmentException("No modules where defined by " + moduleScriptFile); - } - return new ModuleScriptData(modules); - } - - private static List runDefineModules(KotlinPaths paths, ClassFileFactory factory) { - File stdlibJar = paths.getRuntimePath(); - GeneratedClassLoader loader; - if (stdlibJar.exists()) { - try { - loader = new GeneratedClassLoader(factory, new URLClassLoader(new URL[]{stdlibJar.toURI().toURL()}, - AllModules.class.getClassLoader())); - } - catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - else { - loader = new GeneratedClassLoader(factory, KotlinToJVMBytecodeCompiler.class.getClassLoader()); - } - try { - Class packageClass = loader.loadClass(PackageClassUtils.getPackageClassName(FqName.ROOT)); - Method method = packageClass.getDeclaredMethod("project"); - - method.setAccessible(true); - method.invoke(null); - - List answer = new ArrayList(AllModules.INSTANCE$.get()); - AllModules.INSTANCE$.get().clear(); - return answer; - } - catch (Exception e) { - throw new ModuleExecutionException(e); - } - finally { - loader.dispose(); - } - } - // TODO: includeRuntime should be not a flag but a path to runtime private static void doWriteToJar(ClassFileFactory outputFiles, OutputStream fos, @Nullable FqName mainClass, boolean includeRuntime) { try { @@ -237,16 +137,6 @@ public class CompileEnvironmentUtil { } } - // Used for debug output only - private static String loadModuleScriptText(String moduleScriptFile) { - try { - return FileUtil.loadFile(new File(moduleScriptFile)); - } - catch (IOException e) { - return "Can't load module script text:\n" + OutputMessageUtil.renderException(e); - } - } - @NotNull public static List getJetFiles( @NotNull final Project project, diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 55653c0a658..68d15b34b68 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -24,8 +24,6 @@ import com.intellij.util.ArrayUtil; import kotlin.Function0; import kotlin.Function1; import kotlin.Unit; -import kotlin.modules.AllModules; -import kotlin.modules.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.analyzer.AnalysisResult; @@ -35,6 +33,7 @@ import org.jetbrains.kotlin.cli.common.CompilerPlugin; import org.jetbrains.kotlin.cli.common.CompilerPluginContext; import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport; import org.jetbrains.kotlin.cli.common.messages.MessageCollector; +import org.jetbrains.kotlin.cli.common.modules.Module; import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsPackage; import org.jetbrains.kotlin.cli.jvm.config.JVMConfigurationKeys; import org.jetbrains.kotlin.codegen.*; @@ -67,8 +66,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.addJvmClasspathRoot; -import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.getJvmClasspathRoots; +import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.*; import static org.jetbrains.kotlin.config.ConfigPackage.addKotlinSourceRoots; public class KotlinToJVMBytecodeCompiler { @@ -173,6 +171,10 @@ public class KotlinToJVMBytecodeCompiler { for (Module module : chunk) { addKotlinSourceRoots(configuration, getAbsolutePaths(directory, module)); + for (String javaSourceRoot : module.getJavaSourceRoots()) { + addJavaSourceRoot(configuration, new File(javaSourceRoot)); + } + for (String classpathRoot : module.getClasspathRoots()) { addJvmClasspathRoot(configuration, new File(classpathRoot)); } @@ -270,9 +272,10 @@ public class KotlinToJVMBytecodeCompiler { for (File file : getJvmClasspathRoots(configuration)) { classPaths.add(file.toURI().toURL()); } + //noinspection UnnecessaryFullyQualifiedName classLoader = new GeneratedClassLoader(state.getFactory(), new URLClassLoader(classPaths.toArray(new URL[classPaths.size()]), - AllModules.class.getClassLoader()) + kotlin.KotlinPackage.class.getClassLoader()) ); FqName nameForScript = ScriptNameUtil.classNameForScript(environment.getSourceFiles().get(0).getScript()); diff --git a/compiler/testData/compiler/smoke/Smoke.ktm b/compiler/testData/compiler/smoke/Smoke.ktm deleted file mode 100644 index bf9aea6b44c..00000000000 --- a/compiler/testData/compiler/smoke/Smoke.ktm +++ /dev/null @@ -1,7 +0,0 @@ -import kotlin.modules.* - -fun project() { - module("smoke", ".") { - sources += "Smoke.kt" - } -} diff --git a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.compile.expected b/compiler/testData/integration/smoke/compileAndRunModule/Smoke.compile.expected deleted file mode 100644 index a14ac74940f..00000000000 --- a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.compile.expected +++ /dev/null @@ -1 +0,0 @@ -Return code: 0 diff --git a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.kt b/compiler/testData/integration/smoke/compileAndRunModule/Smoke.kt deleted file mode 100644 index 49d0e6db899..00000000000 --- a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.kt +++ /dev/null @@ -1,5 +0,0 @@ -package Smoke - -fun main(args: Array) { - print("${args[0]}|${args[1]}|${args[2]}") -} diff --git a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.ktm b/compiler/testData/integration/smoke/compileAndRunModule/Smoke.ktm deleted file mode 100644 index bf9aea6b44c..00000000000 --- a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.ktm +++ /dev/null @@ -1,7 +0,0 @@ -import kotlin.modules.* - -fun project() { - module("smoke", ".") { - sources += "Smoke.kt" - } -} diff --git a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.run.expected b/compiler/testData/integration/smoke/compileAndRunModule/Smoke.run.expected deleted file mode 100644 index 6960c2f4ace..00000000000 --- a/compiler/testData/integration/smoke/compileAndRunModule/Smoke.run.expected +++ /dev/null @@ -1,3 +0,0 @@ -OUT: -1|2|3 -Return code: 0 diff --git a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java index f51b04a143a..831afbf46c7 100644 --- a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java +++ b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java @@ -82,15 +82,6 @@ public class CompilerSmokeTest extends KotlinIntegrationTestBase { runJava("hello.run", "-cp", jar, "Hello.HelloPackage"); } - @Test - public void compileAndRunModule() throws Exception { - String jar = tmpdir.getTmpDir().getAbsolutePath() + File.separator + "smoke.jar"; - - assertEquals("compilation failed", 0, runCompiler("Smoke.compile", "-module", "Smoke.ktm", "-d", jar)); - String classpath = jar + File.pathSeparator + ForTestCompileRuntime.runtimeJarForTests().getAbsolutePath(); - runJava("Smoke.run", "-cp", classpath, "Smoke.SmokePackage", "1", "2", "3"); - } - @Test public void compilationFailed() throws Exception { String jar = tmpdir.getTmpDir().getAbsolutePath() + File.separator + "smoke.jar"; diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileEnvironmentTest.java b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileEnvironmentTest.java index 4457a14b807..bf4ea44b4ef 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileEnvironmentTest.java +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileEnvironmentTest.java @@ -35,43 +35,6 @@ import java.util.jar.JarEntry; import java.util.jar.JarInputStream; public class CompileEnvironmentTest extends TestCase { - public void testSmokeWithCompilerJar() throws IOException { - File tempDir = FileUtil.createTempDirectory("compilerTest", "compilerTest"); - - try { - File stdlib = ForTestCompileRuntime.runtimeJarForTests(); - File jdkAnnotations = JetTestUtils.getJdkAnnotationsJar(); - File resultJar = new File(tempDir, "result.jar"); - ExitCode rv = new K2JVMCompiler().exec( - System.out, - "-module", JetTestUtils.getTestDataPathBase() + "/compiler/smoke/Smoke.ktm", - "-d", resultJar.getAbsolutePath(), - "-no-stdlib", - "-classpath", stdlib.getAbsolutePath(), - "-no-jdk-annotations", - "-annotations", jdkAnnotations.getAbsolutePath() - ); - Assert.assertEquals("compilation completed with non-zero code", ExitCode.OK, rv); - FileInputStream fileInputStream = new FileInputStream(resultJar); - try { - JarInputStream is = new JarInputStream(fileInputStream); - try { - List entries = listEntries(is); - assertTrue(entries.contains("Smoke/" + PackageClassUtils.getPackageClassName(new FqName("Smoke")) + ".class")); - assertEquals(2, entries.size()); - } - finally { - is.close(); - } - } - finally { - fileInputStream.close(); - } - } - finally { - FileUtil.delete(tempDir); - } - } public void testSmokeWithCompilerOutput() throws IOException { File tempDir = FileUtil.createTempDirectory("compilerTest", "compilerTest"); @@ -96,16 +59,4 @@ public class CompileEnvironmentTest extends TestCase { FileUtil.delete(tempDir); } } - - private static List listEntries(JarInputStream is) throws IOException { - List entries = new ArrayList(); - while (true) { - JarEntry jarEntry = is.getNextJarEntry(); - if (jarEntry == null) { - break; - } - entries.add(jarEntry.getName()); - } - return entries; - } } diff --git a/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java b/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java index 18226ea37be..bf48962873b 100644 --- a/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java +++ b/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java @@ -18,12 +18,12 @@ package org.jetbrains.kotlin.modules.xml; import com.intellij.openapi.util.io.FileUtil; import junit.framework.TestCase; -import kotlin.modules.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation; import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.messages.MessageRenderer; +import org.jetbrains.kotlin.cli.common.modules.Module; import org.jetbrains.kotlin.cli.common.modules.ModuleScriptData; import org.jetbrains.kotlin.cli.common.modules.ModuleXmlParser; import org.jetbrains.kotlin.test.JetTestUtils; diff --git a/idea/src/org/jetbrains/kotlin/idea/JetFileFactory.java b/idea/src/org/jetbrains/kotlin/idea/JetFileFactory.java index 58e0e5aac6f..5d560f61147 100644 --- a/idea/src/org/jetbrains/kotlin/idea/JetFileFactory.java +++ b/idea/src/org/jetbrains/kotlin/idea/JetFileFactory.java @@ -24,6 +24,6 @@ import org.jetbrains.annotations.NotNull; public class JetFileFactory extends FileTypeFactory { @Override public void createFileTypes(@NotNull FileTypeConsumer consumer) { - consumer.consume(JetFileType.INSTANCE, "kt;kts;ktm"); + consumer.consume(JetFileType.INSTANCE, "kt;kts"); } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java index 1584e1a7e34..67844e5ebb9 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java +++ b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java @@ -67,23 +67,19 @@ public class KotlinModuleXmlBuilder { p.println("<", SOURCES, " ", PATH, "=\"", getEscapedPath(sourceFile), "\"/>"); } - if (!javaSourceRoots.isEmpty()) { - processClassPathSection("Java source roots", javaSourceRoots, directoriesToFilterOut); - } - - processClassPathSection("Classpath", classpathRoots, directoriesToFilterOut); + processJavaSourceRoots(javaSourceRoots); + processClasspath(classpathRoots, directoriesToFilterOut); processAnnotationRoots(annotationRoots); closeTag(p, MODULE); return this; } - private void processClassPathSection( - @NotNull String sectionDescription, + private void processClasspath( @NotNull Collection files, @NotNull Set directoriesToFilterOut ) { - p.println(""); + p.println(""); for (File file : files) { boolean isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.ENABLED; if (isOutput) { @@ -111,6 +107,13 @@ public class KotlinModuleXmlBuilder { } } + private void processJavaSourceRoots(@NotNull List files) { + p.println(""); + for (File file : files) { + p.println("<", JAVA_SOURCE_ROOTS, " ", PATH, "=\"", getEscapedPath(file), "\"/>"); + } + } + public CharSequence asText() { if (!done) { closeTag(p, MODULES); diff --git a/libraries/stdlib/src/kotlin/modules/AllModules.kt b/libraries/stdlib/src/kotlin/modules/AllModules.kt deleted file mode 100644 index e441c7f5807..00000000000 --- a/libraries/stdlib/src/kotlin/modules/AllModules.kt +++ /dev/null @@ -1,7 +0,0 @@ -package kotlin.modules - -import java.util.ArrayList - -public object AllModules : ThreadLocal>() { - override fun initialValue() = ArrayList() -} diff --git a/libraries/stdlib/src/kotlin/modules/Module.kt b/libraries/stdlib/src/kotlin/modules/Module.kt deleted file mode 100644 index a3a3d5c1d30..00000000000 --- a/libraries/stdlib/src/kotlin/modules/Module.kt +++ /dev/null @@ -1,13 +0,0 @@ -package kotlin.modules - -public trait Module { - public fun getModuleName(): String - - public fun getOutputDirectory(): String - - public fun getSourceFiles(): List - - public fun getClasspathRoots(): List - - public fun getAnnotationsRoots(): List -} diff --git a/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt b/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt deleted file mode 100644 index 9a93f324446..00000000000 --- a/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt +++ /dev/null @@ -1,62 +0,0 @@ -package kotlin.modules - -import java.util.ArrayList - -public fun module(name: String, outputDir: String, callback: ModuleBuilder.() -> Unit) { - val builder = ModuleBuilder(name, outputDir) - builder.callback() - AllModules.get()?.add(builder) -} - -public class SourcesBuilder(private val parent: ModuleBuilder) { - public fun plusAssign(pattern: String) { - parent.addSourceFiles(pattern) - } -} - -public class ClasspathBuilder(private val parent: ModuleBuilder) { - public fun plusAssign(name: String) { - parent.addClasspathEntry(name) - } -} - -public class AnnotationsPathBuilder(private val parent: ModuleBuilder) { - public fun plusAssign(name: String) { - parent.addAnnotationsPathEntry(name) - } -} - -public open class ModuleBuilder(private val name: String, private val outputDir: String) : Module { - // http://youtrack.jetbrains.net/issue/KT-904 - private val sourceFiles0 = ArrayList() - private val classpathRoots0 = ArrayList() - private val annotationsRoots0 = ArrayList() - - public val sources: SourcesBuilder - get() = SourcesBuilder(this) - - public val classpath: ClasspathBuilder - get() = ClasspathBuilder(this) - - public val annotationsPath: AnnotationsPathBuilder - get() = AnnotationsPathBuilder(this) - - public fun addSourceFiles(pattern: String) { - sourceFiles0.add(pattern) - } - - public fun addClasspathEntry(name: String) { - classpathRoots0.add(name) - } - - public fun addAnnotationsPathEntry(name: String) { - annotationsRoots0.add(name) - } - - public override fun getOutputDirectory(): String = outputDir - public override fun getSourceFiles(): List = sourceFiles0 - public override fun getClasspathRoots(): List = classpathRoots0 - public override fun getAnnotationsRoots(): List = annotationsRoots0 - public override fun getModuleName(): String = name -} -