From f529e5d2aa1d39433e1811c6d57259f7ebd09f67 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 9 Oct 2013 17:54:14 +0400 Subject: [PATCH] ModuleChunks introduced --- .../jet/buildtools/core/BytecodeCompiler.java | 11 ++---- .../jetbrains/jet/cli/jvm/K2JVMCompiler.java | 8 +--- .../jvm/compiler/CompileEnvironmentUtil.java | 13 +++---- .../compiler/KotlinToJVMBytecodeCompiler.java | 4 +- .../jet/cli/jvm/compiler/ModuleChunk.java | 39 +++++++++++++++++++ 5 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/ModuleChunk.java 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 a41df0a8e00..2f54fecb550 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,10 +26,7 @@ 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.jvm.JVMConfigurationKeys; -import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentException; -import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil; -import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; -import org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler; +import org.jetbrains.jet.cli.jvm.compiler.*; import org.jetbrains.jet.config.CommonConfigurationKeys; import org.jetbrains.jet.config.CompilerConfiguration; import org.jetbrains.jet.utils.KotlinPaths; @@ -201,10 +198,10 @@ public class BytecodeCompiler { @Nullable String stdlib, @Nullable String[] classpath) { try { - List modules = CompileEnvironmentUtil.loadModuleDescriptions(getKotlinPathsForAntTask(), module, - MessageCollectorPlainTextToStream.PLAIN_TEXT_TO_SYSTEM_ERR); + ModuleChunk modules = CompileEnvironmentUtil.loadModuleDescriptions(getKotlinPathsForAntTask(), module, + MessageCollectorPlainTextToStream.PLAIN_TEXT_TO_SYSTEM_ERR); List sourcesRoots = new ArrayList(); - for (Module m : modules) { + for (Module m : modules.getModules()) { sourcesRoots.addAll(m.getSourceFiles()); } CompilerConfiguration configuration = createConfiguration(stdlib, classpath, sourcesRoots.toArray(new String[0])); 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 3a28e5d8665..5e1f1e134fb 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -20,16 +20,12 @@ import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.intellij.openapi.Disposable; import com.intellij.openapi.util.text.StringUtil; -import jet.modules.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.cli.common.CLICompiler; import org.jetbrains.jet.cli.common.CLIConfigurationKeys; import org.jetbrains.jet.cli.common.ExitCode; import org.jetbrains.jet.cli.common.messages.*; -import org.jetbrains.jet.cli.jvm.compiler.CommandLineScriptUtils; -import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil; -import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; -import org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler; +import org.jetbrains.jet.cli.jvm.compiler.*; import org.jetbrains.jet.cli.jvm.repl.ReplFromTerminal; import org.jetbrains.jet.codegen.CompilationException; import org.jetbrains.jet.config.CommonConfigurationKeys; @@ -130,7 +126,7 @@ public class K2JVMCompiler extends CLICompiler { if (arguments.module != null) { MessageCollector sanitizedCollector = new FilteringMessageCollector(messageCollector, in(CompilerMessageSeverity.VERBOSE)); - List modules = CompileEnvironmentUtil.loadModuleDescriptions(paths, arguments.module, sanitizedCollector); + ModuleChunk modules = CompileEnvironmentUtil.loadModuleDescriptions(paths, arguments.module, sanitizedCollector); File directory = new File(arguments.module).getAbsoluteFile().getParentFile(); KotlinToJVMBytecodeCompiler.compileModules(configuration, modules, 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 e1a84312eb5..64636be3c0d 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 @@ -51,7 +51,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.jar.*; @@ -74,28 +73,28 @@ public class CompileEnvironmentUtil { } @NotNull - public static List loadModuleDescriptions(KotlinPaths paths, String moduleDefinitionFile, MessageCollector messageCollector) { + public static ModuleChunk loadModuleDescriptions(KotlinPaths paths, 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 Collections.emptyList(); + return ModuleChunk.EMPTY; } String extension = FileUtilRt.getExtension(moduleDefinitionFile); if ("kts".equalsIgnoreCase(extension)) { - return loadModuleScript(paths, moduleDefinitionFile, messageCollector); + return new ModuleChunk(loadModuleScript(paths, moduleDefinitionFile, messageCollector)); } if ("xml".equalsIgnoreCase(extension)) { - return ContainerUtil.map( + return new ModuleChunk(ContainerUtil.map( ModuleXmlParser.parse(moduleDefinitionFile, messageCollector), new Function() { @Override public Module fun(ModuleDescription description) { return new DescriptionToModuleAdapter(description); } - }); + })); } messageCollector.report(ERROR, "Unknown module definition type: " + moduleDefinitionFile, NO_LOCATION); - return Collections.emptyList(); + return ModuleChunk.EMPTY; } @NotNull diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index bf917e1ecae..d29e5693908 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -117,13 +117,13 @@ public class KotlinToJVMBytecodeCompiler { public static boolean compileModules( CompilerConfiguration configuration, - @NotNull List modules, + @NotNull ModuleChunk modules, @NotNull File directory, @Nullable File jarPath, @Nullable File outputDir, boolean jarRuntime) { - for (Module moduleBuilder : modules) { + for (Module moduleBuilder : modules.getModules()) { ClassFileFactory moduleFactory = compileModule(configuration, moduleBuilder, directory); if (moduleFactory == null) { return false; diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/ModuleChunk.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/ModuleChunk.java new file mode 100644 index 00000000000..27a4931ba0b --- /dev/null +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/ModuleChunk.java @@ -0,0 +1,39 @@ +/* + * 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.jvm.compiler; + +import jet.modules.Module; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class ModuleChunk { + + public static final ModuleChunk EMPTY = new ModuleChunk(Collections.emptyList()); + + private final List modules; + + public ModuleChunk(@NotNull List modules) { + this.modules = modules; + } + + @NotNull + public List getModules() { + return modules; + } +}