diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java index 1854d6f0030..4c1bf991ec2 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java @@ -45,10 +45,10 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.kotlin.cli.common.messages.MessageCollector; import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsPackage; import org.jetbrains.kotlin.cli.jvm.JVMConfigurationKeys; -import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentUtil; import org.jetbrains.kotlin.cli.jvm.compiler.CompilerJarLocator; import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles; import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment; +import org.jetbrains.kotlin.config.CommonConfigurationKeys; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.config.Services; import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS; @@ -103,7 +103,7 @@ public class K2JSCompiler extends CLICompiler { configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator); } - CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs); + configuration.addAll(CommonConfigurationKeys.SOURCE_ROOTS_KEY, arguments.freeArgs); JetCoreEnvironment environmentForJS = JetCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES); 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 d2f2a7c665e..9cb6863f094 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.java @@ -99,7 +99,7 @@ public class K2JVMCompiler extends CLICompiler { configuration.add(CommonConfigurationKeys.SOURCE_ROOTS_KEY, arguments.freeArgs.get(0)); } else if (arguments.module == null) { - CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs); + configuration.addAll(CommonConfigurationKeys.SOURCE_ROOTS_KEY, arguments.freeArgs); // Adding all directory sources to classpath to resolve Java symbols from Kotlin for (String source : arguments.freeArgs) { 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 37ad12ef390..b1b40f1d5ea 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 @@ -64,6 +64,7 @@ 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; import java.util.jar.*; @@ -271,7 +272,7 @@ public class CompileEnvironmentUtil { @NotNull public static List getJetFiles( @NotNull final Project project, - @NotNull List sourceRoots, + @NotNull Collection sourceRoots, @NotNull Function1 reportError ) { final VirtualFileSystem localFileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL); @@ -314,23 +315,4 @@ public class CompileEnvironmentUtil { return result; } - - public static void addSourceFilesCheckingForDuplicates(@NotNull CompilerConfiguration configuration, @NotNull List sourceRoots) { - MessageCollector messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY); - assert messageCollector != null : "messageCollector should be set: " + configuration; - - Set uniqueSourceRoots = Sets.newLinkedHashSet(); - - for (String sourceRoot : sourceRoots) { - if (!uniqueSourceRoots.add(sourceRoot)) { - messageCollector.report( - CompilerMessageSeverity.WARNING, - "Duplicate source roots: " + sourceRoot, - NO_LOCATION - ); - } - } - - configuration.put(CommonConfigurationKeys.SOURCE_ROOTS_KEY, new ArrayList(uniqueSourceRoots)); - } } diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java index 6a2c116d9a8..050000cfcd8 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JetCoreEnvironment.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler; +import com.google.common.collect.Sets; import com.intellij.codeInsight.ExternalAnnotationsManager; import com.intellij.core.CoreApplicationEnvironment; import com.intellij.core.CoreJavaFileManager; @@ -62,9 +63,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.utils.PathUtil; import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR; import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.WARNING; @@ -231,17 +230,22 @@ public class JetCoreEnvironment { addExternalAnnotationsRoot(path); } sourceFiles.addAll( - CompileEnvironmentUtil - .getJetFiles(getProject(), configuration.getList(CommonConfigurationKeys.SOURCE_ROOTS_KEY), - new Function1() { - @Override - public Unit invoke(String s) { - report(ERROR, s); - return Unit.INSTANCE$; - } - })); + CompileEnvironmentUtil.getJetFiles( + getProject(), + getSourceRootsCheckingForDuplicates(), + new Function1() { + @Override + public Unit invoke(String s) { + report(ERROR, s); + return Unit.INSTANCE$; + } + } + ) + ); + JetScriptDefinitionProvider.getInstance(project).addScriptDefinitions( - configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY)); + configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY) + ); project.registerService(VirtualFileFinderFactory.class, new CliVirtualFileFinderFactory(classPath)); } @@ -315,6 +319,19 @@ public class JetCoreEnvironment { } } + @NotNull + private Collection getSourceRootsCheckingForDuplicates() { + Set uniqueSourceRoots = Sets.newLinkedHashSet(); + + for (String sourceRoot : configuration.getList(CommonConfigurationKeys.SOURCE_ROOTS_KEY)) { + if (!uniqueSourceRoots.add(sourceRoot)) { + report(WARNING, "Duplicate source root: " + sourceRoot); + } + } + + return uniqueSourceRoots; + } + @NotNull public List getSourceFiles() { return sourceFiles; 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 bc797ea9368..4529bd71b31 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 @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.cli.jvm.JVMConfigurationKeys; import org.jetbrains.kotlin.codegen.*; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.Progress; +import org.jetbrains.kotlin.config.CommonConfigurationKeys; import org.jetbrains.kotlin.config.CompilerConfiguration; import org.jetbrains.kotlin.context.ContextPackage; import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl; @@ -161,10 +162,8 @@ public class KotlinToJVMBytecodeCompiler { ) { CompilerConfiguration configuration = base.copy(); - List sourceRoots = Lists.newArrayList(); - for (Module module : chunk) { - sourceRoots.addAll(getAbsolutePaths(directory, module)); + configuration.addAll(CommonConfigurationKeys.SOURCE_ROOTS_KEY, getAbsolutePaths(directory, module)); for (String classpathRoot : module.getClasspathRoots()) { configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File(classpathRoot)); @@ -177,8 +176,6 @@ public class KotlinToJVMBytecodeCompiler { configuration.add(JVMConfigurationKeys.MODULE_IDS, module.getModuleName()); } - CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, sourceRoots); - return configuration; } diff --git a/compiler/testData/cli/jvm/duplicateSources.out b/compiler/testData/cli/jvm/duplicateSources.out index 3fa46d66e7c..633de589487 100644 --- a/compiler/testData/cli/jvm/duplicateSources.out +++ b/compiler/testData/cli/jvm/duplicateSources.out @@ -1,2 +1,2 @@ -WARNING: Duplicate source roots: compiler/testData/cli/jvm/simple.kt +WARNING: Duplicate source root: compiler/testData/cli/jvm/simple.kt OK \ No newline at end of file diff --git a/compiler/testData/cli/jvm/duplicateSourcesInModule.out b/compiler/testData/cli/jvm/duplicateSourcesInModule.out index 963b2b6e862..5bb55eaa0b3 100644 --- a/compiler/testData/cli/jvm/duplicateSourcesInModule.out +++ b/compiler/testData/cli/jvm/duplicateSourcesInModule.out @@ -1,2 +1,2 @@ -WARNING: Duplicate source roots: $TESTDATA_DIR$/duplicateSourcesInModule.kt +WARNING: Duplicate source root: $TESTDATA_DIR$/duplicateSourcesInModule.kt OK \ No newline at end of file