diff --git a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java index 19c1ba401b3..aad74fbac3d 100644 --- a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java +++ b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.cli.common.CLIConfigurationKeys; import org.jetbrains.jet.cli.common.CompilerPlugin; import org.jetbrains.jet.cli.common.messages.MessageCollectorPlainTextToStream; +import org.jetbrains.jet.cli.common.modules.ModuleScriptData; import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys; import org.jetbrains.jet.cli.jvm.compiler.*; import org.jetbrains.jet.config.CommonConfigurationKeys; @@ -231,7 +232,7 @@ public class BytecodeCompiler { @Nullable String[] externalAnnotationsPath, boolean enableInline ) { try { - CompileEnvironmentUtil.ModuleScriptData moduleScriptData = + ModuleScriptData moduleScriptData = loadModuleDescriptions(getKotlinPathsForAntTask(), module, MessageCollectorPlainTextToStream.PLAIN_TEXT_TO_SYSTEM_ERR); List modules = moduleScriptData.getModules(); List sourcesRoots = new ArrayList(); diff --git a/compiler/cli/cli-common/cli-common.iml b/compiler/cli/cli-common/cli-common.iml index d0a04b011b4..641076a3d8d 100644 --- a/compiler/cli/cli-common/cli-common.iml +++ b/compiler/cli/cli-common/cli-common.iml @@ -8,6 +8,7 @@ + diff --git a/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleDescription.java b/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleDescription.java deleted file mode 100644 index 70bd28bfb20..00000000000 --- a/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleDescription.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.cli.common.modules; - -import com.intellij.util.SmartList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -/** - * This interface duplicates {@link kotlin.modules.Module}, because cli-common should not depend on kotlin-runtime.jar - */ -public interface ModuleDescription { - - @NotNull - String getModuleName(); - - @NotNull - String getOutputDir(); - - @NotNull - List getSourceFiles(); - - @NotNull - List getClasspathRoots(); - - @NotNull - List getAnnotationsRoots(); - - class Impl implements ModuleDescription { - - private String name; - private String outputDir; - private final List sources = new SmartList(); - private final List classpath = new SmartList(); - private final List annotations = new SmartList(); - - public void setName(String name) { - this.name = name; - } - - public void setOutputDir(String outputDir) { - this.outputDir = outputDir; - } - - public void addSourcePath(String path) { - sources.add(path); - } - - public void addClassPath(String path) { - classpath.add(path); - } - - public void addAnnotationPath(String path) { - annotations.add(path); - } - - @NotNull - @Override - public String getModuleName() { - return name; - } - - @NotNull - @Override - public String getOutputDir() { - return outputDir; - } - - @NotNull - @Override - public List getSourceFiles() { - return sources; - } - - @NotNull - @Override - public List getClasspathRoots() { - return classpath; - } - - @NotNull - @Override - public List getAnnotationsRoots() { - return annotations; - } - - @Override - public String toString() { - return name + - "\n\toutputDir=" + outputDir + - "\n\tsources=" + sources + - "\n\tclasspath=" + classpath + - "\n\tannotations=" + annotations; - } - } -} diff --git a/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleScriptData.java b/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleScriptData.java new file mode 100644 index 00000000000..727bccf305d --- /dev/null +++ b/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleScriptData.java @@ -0,0 +1,48 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.cli.common.modules; + +import kotlin.modules.Module; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.List; + +public class ModuleScriptData { + public static final ModuleScriptData EMPTY = new ModuleScriptData(Collections.emptyList(), null); + + @Nullable + private final String incrementalCacheDir; + @NotNull + private final List modules; + + @NotNull + public List getModules() { + return modules; + } + + @Nullable + public String getIncrementalCacheDir() { + return incrementalCacheDir; + } + + public ModuleScriptData(@NotNull List modules, @Nullable String incrementalCacheDir) { + this.incrementalCacheDir = incrementalCacheDir; + this.modules = modules; + } +} diff --git a/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleXmlParser.java b/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleXmlParser.java index 78d7914bd08..04c564a38de 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleXmlParser.java +++ b/compiler/cli/cli-common/src/org/jetbrains/jet/cli/common/modules/ModuleXmlParser.java @@ -16,11 +16,14 @@ package org.jetbrains.jet.cli.common.modules; -import com.intellij.openapi.util.Pair; 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.jet.cli.common.messages.*; +import org.jetbrains.jet.cli.common.messages.MessageCollector; +import org.jetbrains.jet.cli.common.messages.MessageCollectorUtil; +import org.jetbrains.jet.cli.common.messages.MessageRenderer; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -29,11 +32,10 @@ import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.*; -import java.util.Collections; import java.util.List; -import static org.jetbrains.jet.cli.common.messages.CompilerMessageLocation.*; -import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.*; +import static org.jetbrains.jet.cli.common.messages.CompilerMessageLocation.NO_LOCATION; +import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.ERROR; public class ModuleXmlParser { @@ -48,7 +50,7 @@ public class ModuleXmlParser { public static final String EXTERNAL_ANNOTATIONS = "externalAnnotations"; @NotNull - public static Pair, String> parseModuleDescriptionsAndIncrementalCacheDir( + public static ModuleScriptData parseModuleScript( @NotNull String xmlFile, @NotNull MessageCollector messageCollector ) { @@ -60,7 +62,7 @@ public class ModuleXmlParser { } catch (FileNotFoundException e) { MessageCollectorUtil.reportException(messageCollector, e); - return Pair.create(Collections.emptyList(), null); + return ModuleScriptData.EMPTY; } finally { StreamUtil.closeStream(stream); @@ -69,7 +71,7 @@ public class ModuleXmlParser { private final MessageCollector messageCollector; private String incrementalCacheDir; - private final List descriptions = new SmartList(); + private final List modules = new SmartList(); private DefaultHandler currentState; private ModuleXmlParser(@NotNull MessageCollector messageCollector) { @@ -80,7 +82,7 @@ public class ModuleXmlParser { this.currentState = currentState; } - private Pair, String> parse(@NotNull InputStream xml) { + private ModuleScriptData parse(@NotNull InputStream xml) { try { setCurrentState(initial); SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); @@ -91,7 +93,7 @@ public class ModuleXmlParser { return currentState; } }); - return Pair.create(descriptions, incrementalCacheDir); + return new ModuleScriptData(modules, incrementalCacheDir); } catch (ParserConfigurationException e) { MessageCollectorUtil.reportException(messageCollector, e); @@ -102,7 +104,7 @@ public class ModuleXmlParser { catch (IOException e) { MessageCollectorUtil.reportException(messageCollector, e); } - return Pair.create(Collections.emptyList(), null); + return ModuleScriptData.EMPTY; } private final DefaultHandler initial = new DefaultHandler() { @@ -140,27 +142,25 @@ public class ModuleXmlParser { private class InsideModule extends DefaultHandler { - private final ModuleDescription.Impl moduleDescription; + private final ModuleBuilder moduleBuilder; private InsideModule(String name, String outputDir) { - this.moduleDescription = new ModuleDescription.Impl(); - this.moduleDescription.setName(name); - this.moduleDescription.setOutputDir(outputDir); - descriptions.add(moduleDescription); + this.moduleBuilder = new ModuleBuilder(name, outputDir); + modules.add(moduleBuilder); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (SOURCES.equalsIgnoreCase(qName)) { String path = getAttribute(attributes, PATH, qName); - moduleDescription.addSourcePath(path); + moduleBuilder.addSourceFiles(path); } else if (CLASSPATH.equalsIgnoreCase(qName)) { String path = getAttribute(attributes, PATH, qName); - moduleDescription.addClassPath(path); + moduleBuilder.addClasspathEntry(path); } else if (EXTERNAL_ANNOTATIONS.equalsIgnoreCase(qName)) { String path = getAttribute(attributes, PATH, qName); - moduleDescription.addAnnotationPath(path); + moduleBuilder.addAnnotationsPathEntry(path); } else { throw createError(qName); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java index 7fc969f89de..8353071bfcf 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -27,6 +27,7 @@ import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.common.arguments.CompilerArgumentsUtil; import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments; import org.jetbrains.jet.cli.common.messages.*; +import org.jetbrains.jet.cli.common.modules.ModuleScriptData; import org.jetbrains.jet.cli.jvm.compiler.CommandLineScriptUtils; import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; @@ -128,7 +129,7 @@ public class K2JVMCompiler extends CLICompiler { if (arguments.module != null) { MessageCollector sanitizedCollector = new FilteringMessageCollector(messageCollector, in(CompilerMessageSeverity.VERBOSE)); - CompileEnvironmentUtil.ModuleScriptData moduleScript = CompileEnvironmentUtil.loadModuleDescriptions( + ModuleScriptData moduleScript = CompileEnvironmentUtil.loadModuleDescriptions( paths, arguments.module, sanitizedCollector); if (moduleScript.getIncrementalCacheDir() != null) { configuration.put(JVMConfigurationKeys.INCREMENTAL_CACHE_BASE_DIR, new File(moduleScript.getIncrementalCacheDir())); 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 0faf2ed84e6..aeb5e99e8b7 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 @@ -20,7 +20,6 @@ import com.google.common.collect.Lists; import com.intellij.openapi.Disposable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.vfs.StandardFileSystems; @@ -29,8 +28,6 @@ import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.VirtualFileSystem; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import kotlin.Function1; import kotlin.Unit; import kotlin.io.IoPackage; @@ -42,7 +39,7 @@ import org.jetbrains.jet.OutputFile; import org.jetbrains.jet.cli.common.CLIConfigurationKeys; import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageRenderer; -import org.jetbrains.jet.cli.common.modules.ModuleDescription; +import org.jetbrains.jet.cli.common.modules.ModuleScriptData; import org.jetbrains.jet.cli.common.modules.ModuleXmlParser; import org.jetbrains.jet.cli.common.output.outputUtils.OutputUtilsPackage; import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys; @@ -85,30 +82,17 @@ public class CompileEnvironmentUtil { File file = new File(moduleDefinitionFile); if (!file.exists()) { messageCollector.report(ERROR, "Module definition file does not exist: " + moduleDefinitionFile, NO_LOCATION); - return new ModuleScriptData(Collections.emptyList(), null); + return ModuleScriptData.EMPTY; } String extension = FileUtilRt.getExtension(moduleDefinitionFile); if ("ktm".equalsIgnoreCase(extension)) { return loadModuleScript(paths, moduleDefinitionFile, messageCollector); } if ("xml".equalsIgnoreCase(extension)) { - Pair, String> moduleDescriptionsAndIncrementalCacheDir = - ModuleXmlParser.parseModuleDescriptionsAndIncrementalCacheDir(moduleDefinitionFile, messageCollector); - List moduleDescriptions = moduleDescriptionsAndIncrementalCacheDir.first; - String incrementalCacheDir = moduleDescriptionsAndIncrementalCacheDir.second; - List modules = ContainerUtil.map( - moduleDescriptions, - new Function() { - @Override - public Module fun(ModuleDescription description) { - return new DescriptionToModuleAdapter(description); - } - } - ); - return new ModuleScriptData(modules, incrementalCacheDir); + return ModuleXmlParser.parseModuleScript(moduleDefinitionFile, messageCollector); } messageCollector.report(ERROR, "Unknown module definition type: " + moduleDefinitionFile, NO_LOCATION); - return new ModuleScriptData(Collections.emptyList(), null); + return ModuleScriptData.EMPTY; } @NotNull @@ -327,64 +311,4 @@ public class CompileEnvironmentUtil { return result; } - - public static class ModuleScriptData { - @Nullable - private final String incrementalCacheDir; - @NotNull - private final List modules; - - @NotNull - public List getModules() { - return modules; - } - - @Nullable - public String getIncrementalCacheDir() { - return incrementalCacheDir; - } - - private ModuleScriptData(@NotNull List modules, @Nullable String incrementalCacheDir) { - this.incrementalCacheDir = incrementalCacheDir; - this.modules = modules; - } - } - - private static class DescriptionToModuleAdapter implements Module { - private final ModuleDescription description; - - public DescriptionToModuleAdapter(ModuleDescription description) { - this.description = description; - } - - @NotNull - @Override - public String getModuleName() { - return description.getModuleName(); - } - - @NotNull - @Override - public String getOutputDirectory() { - return description.getOutputDir(); - } - - @NotNull - @Override - public List getSourceFiles() { - return description.getSourceFiles(); - } - - @NotNull - @Override - public List getClasspathRoots() { - return description.getClasspathRoots(); - } - - @NotNull - @Override - public List getAnnotationsRoots() { - return description.getAnnotationsRoots(); - } - } } diff --git a/compiler/tests/org/jetbrains/jet/modules/xml/AbstractModuleXmlParserTest.java b/compiler/tests/org/jetbrains/jet/modules/xml/AbstractModuleXmlParserTest.java index ac2a686078d..e0c56cdc813 100644 --- a/compiler/tests/org/jetbrains/jet/modules/xml/AbstractModuleXmlParserTest.java +++ b/compiler/tests/org/jetbrains/jet/modules/xml/AbstractModuleXmlParserTest.java @@ -16,28 +16,27 @@ package org.jetbrains.jet.modules.xml; -import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import junit.framework.TestCase; +import kotlin.modules.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation; import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageRenderer; -import org.jetbrains.jet.cli.common.modules.ModuleDescription; +import org.jetbrains.jet.cli.common.modules.ModuleScriptData; import org.jetbrains.jet.cli.common.modules.ModuleXmlParser; import java.io.File; import java.io.IOException; -import java.util.List; public abstract class AbstractModuleXmlParserTest extends TestCase { protected void doTest(String xmlPath) throws IOException { File txtFile = new File(FileUtil.getNameWithoutExtension(xmlPath) + ".txt"); - Pair, String> result = ModuleXmlParser.parseModuleDescriptionsAndIncrementalCacheDir(xmlPath, new MessageCollector() { + ModuleScriptData result = ModuleXmlParser.parseModuleScript(xmlPath, new MessageCollector() { @Override public void report( @NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location @@ -47,12 +46,12 @@ public abstract class AbstractModuleXmlParserTest extends TestCase { }); StringBuilder sb = new StringBuilder(); - if (result.second != null) { - sb.append("incrementalCacheDir=").append(result.second).append("\n\n"); + if (result.getIncrementalCacheDir() != null) { + sb.append("incrementalCacheDir=").append(result.getIncrementalCacheDir()).append("\n\n"); } - for (ModuleDescription description : result.first) { - sb.append(description).append("\n"); + for (Module module : result.getModules()) { + sb.append(moduleToString(module)).append("\n"); } String actual = sb.toString(); @@ -64,4 +63,12 @@ public abstract class AbstractModuleXmlParserTest extends TestCase { JetTestUtils.assertEqualsToFile(txtFile, actual); } + + private static String moduleToString(@NotNull Module module) { + return module.getModuleName() + + "\n\toutputDir=" + module.getOutputDirectory() + + "\n\tsources=" + module.getSourceFiles() + + "\n\tclasspath=" + module.getClasspathRoots() + + "\n\tannotations=" + module.getAnnotationsRoots(); + } }