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.messages.MessageCollector;
|
||||||
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsPackage;
|
import org.jetbrains.kotlin.cli.common.output.outputUtils.OutputUtilsPackage;
|
||||||
import org.jetbrains.kotlin.cli.jvm.JVMConfigurationKeys;
|
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.CompilerJarLocator;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JetCoreEnvironment;
|
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.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.config.Services;
|
import org.jetbrains.kotlin.config.Services;
|
||||||
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS;
|
||||||
@@ -103,7 +103,7 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
|
|||||||
configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator);
|
configuration.put(JVMConfigurationKeys.COMPILER_JAR_LOCATOR, locator);
|
||||||
}
|
}
|
||||||
|
|
||||||
CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, arguments.freeArgs);
|
configuration.addAll(CommonConfigurationKeys.SOURCE_ROOTS_KEY, arguments.freeArgs);
|
||||||
JetCoreEnvironment environmentForJS =
|
JetCoreEnvironment environmentForJS =
|
||||||
JetCoreEnvironment.createForProduction(rootDisposable, configuration, EnvironmentConfigFiles.JS_CONFIG_FILES);
|
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));
|
configuration.add(CommonConfigurationKeys.SOURCE_ROOTS_KEY, arguments.freeArgs.get(0));
|
||||||
}
|
}
|
||||||
else if (arguments.module == null) {
|
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
|
// Adding all directory sources to classpath to resolve Java symbols from Kotlin
|
||||||
for (String source : arguments.freeArgs) {
|
for (String source : arguments.freeArgs) {
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import java.net.MalformedURLException;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.jar.*;
|
import java.util.jar.*;
|
||||||
@@ -271,7 +272,7 @@ public class CompileEnvironmentUtil {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public static List<JetFile> getJetFiles(
|
public static List<JetFile> getJetFiles(
|
||||||
@NotNull final Project project,
|
@NotNull final Project project,
|
||||||
@NotNull List<String> sourceRoots,
|
@NotNull Collection<String> sourceRoots,
|
||||||
@NotNull Function1<String, Unit> reportError
|
@NotNull Function1<String, Unit> reportError
|
||||||
) {
|
) {
|
||||||
final VirtualFileSystem localFileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL);
|
final VirtualFileSystem localFileSystem = VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL);
|
||||||
@@ -314,23 +315,4 @@ public class CompileEnvironmentUtil {
|
|||||||
|
|
||||||
return result;
|
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;
|
package org.jetbrains.kotlin.cli.jvm.compiler;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.codeInsight.ExternalAnnotationsManager;
|
import com.intellij.codeInsight.ExternalAnnotationsManager;
|
||||||
import com.intellij.core.CoreApplicationEnvironment;
|
import com.intellij.core.CoreApplicationEnvironment;
|
||||||
import com.intellij.core.CoreJavaFileManager;
|
import com.intellij.core.CoreJavaFileManager;
|
||||||
@@ -62,9 +63,7 @@ import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
|||||||
import org.jetbrains.kotlin.utils.PathUtil;
|
import org.jetbrains.kotlin.utils.PathUtil;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR;
|
import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR;
|
||||||
import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.WARNING;
|
import static org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.WARNING;
|
||||||
@@ -231,17 +230,22 @@ public class JetCoreEnvironment {
|
|||||||
addExternalAnnotationsRoot(path);
|
addExternalAnnotationsRoot(path);
|
||||||
}
|
}
|
||||||
sourceFiles.addAll(
|
sourceFiles.addAll(
|
||||||
CompileEnvironmentUtil
|
CompileEnvironmentUtil.getJetFiles(
|
||||||
.getJetFiles(getProject(), configuration.getList(CommonConfigurationKeys.SOURCE_ROOTS_KEY),
|
getProject(),
|
||||||
new Function1<String, Unit>() {
|
getSourceRootsCheckingForDuplicates(),
|
||||||
@Override
|
new Function1<String, Unit>() {
|
||||||
public Unit invoke(String s) {
|
@Override
|
||||||
report(ERROR, s);
|
public Unit invoke(String s) {
|
||||||
return Unit.INSTANCE$;
|
report(ERROR, s);
|
||||||
}
|
return Unit.INSTANCE$;
|
||||||
}));
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
JetScriptDefinitionProvider.getInstance(project).addScriptDefinitions(
|
JetScriptDefinitionProvider.getInstance(project).addScriptDefinitions(
|
||||||
configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY));
|
configuration.getList(CommonConfigurationKeys.SCRIPT_DEFINITIONS_KEY)
|
||||||
|
);
|
||||||
|
|
||||||
project.registerService(VirtualFileFinderFactory.class, new CliVirtualFileFinderFactory(classPath));
|
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
|
@NotNull
|
||||||
public List<JetFile> getSourceFiles() {
|
public List<JetFile> getSourceFiles() {
|
||||||
return sourceFiles;
|
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.*;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
import org.jetbrains.kotlin.codegen.state.Progress;
|
import org.jetbrains.kotlin.codegen.state.Progress;
|
||||||
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys;
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.context.ContextPackage;
|
import org.jetbrains.kotlin.context.ContextPackage;
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||||
@@ -161,10 +162,8 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
) {
|
) {
|
||||||
CompilerConfiguration configuration = base.copy();
|
CompilerConfiguration configuration = base.copy();
|
||||||
|
|
||||||
List<String> sourceRoots = Lists.newArrayList();
|
|
||||||
|
|
||||||
for (Module module : chunk) {
|
for (Module module : chunk) {
|
||||||
sourceRoots.addAll(getAbsolutePaths(directory, module));
|
configuration.addAll(CommonConfigurationKeys.SOURCE_ROOTS_KEY, getAbsolutePaths(directory, module));
|
||||||
|
|
||||||
for (String classpathRoot : module.getClasspathRoots()) {
|
for (String classpathRoot : module.getClasspathRoots()) {
|
||||||
configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File(classpathRoot));
|
configuration.add(JVMConfigurationKeys.CLASSPATH_KEY, new File(classpathRoot));
|
||||||
@@ -177,8 +176,6 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
configuration.add(JVMConfigurationKeys.MODULE_IDS, module.getModuleName());
|
configuration.add(JVMConfigurationKeys.MODULE_IDS, module.getModuleName());
|
||||||
}
|
}
|
||||||
|
|
||||||
CompileEnvironmentUtil.addSourceFilesCheckingForDuplicates(configuration, sourceRoots);
|
|
||||||
|
|
||||||
return configuration;
|
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
|
OK
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
WARNING: Duplicate source roots: $TESTDATA_DIR$/duplicateSourcesInModule.kt
|
WARNING: Duplicate source root: $TESTDATA_DIR$/duplicateSourcesInModule.kt
|
||||||
OK
|
OK
|
||||||
Reference in New Issue
Block a user