Refactor compiler source root duplicate check
This commit is contained in:
@@ -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<K2JSCompilerArguments> {
|
||||
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);
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ public class K2JVMCompiler extends CLICompiler<K2JVMCompilerArguments> {
|
||||
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) {
|
||||
|
||||
@@ -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<JetFile> getJetFiles(
|
||||
@NotNull final Project project,
|
||||
@NotNull List<String> sourceRoots,
|
||||
@NotNull Collection<String> sourceRoots,
|
||||
@NotNull Function1<String, Unit> 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<String> sourceRoots) {
|
||||
MessageCollector messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY);
|
||||
assert messageCollector != null : "messageCollector should be set: " + configuration;
|
||||
|
||||
Set<String> 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<String>(uniqueSourceRoots));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, Unit>() {
|
||||
@Override
|
||||
public Unit invoke(String s) {
|
||||
report(ERROR, s);
|
||||
return Unit.INSTANCE$;
|
||||
}
|
||||
}));
|
||||
CompileEnvironmentUtil.getJetFiles(
|
||||
getProject(),
|
||||
getSourceRootsCheckingForDuplicates(),
|
||||
new Function1<String, Unit>() {
|
||||
@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<String> getSourceRootsCheckingForDuplicates() {
|
||||
Set<String> 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<JetFile> getSourceFiles() {
|
||||
return sourceFiles;
|
||||
|
||||
+2
-5
@@ -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<String> 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -1,2 +1,2 @@
|
||||
WARNING: Duplicate source roots: $TESTDATA_DIR$/duplicateSourcesInModule.kt
|
||||
WARNING: Duplicate source root: $TESTDATA_DIR$/duplicateSourcesInModule.kt
|
||||
OK
|
||||
Reference in New Issue
Block a user