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 -} -