From a73442f90f256c7503f054df6e22fa7ccc2f746e Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 22 Jun 2023 17:21:51 +0200 Subject: [PATCH] K2: add a check for duplicate source root --- .../cli/jvm/compiler/KotlinCoreEnvironment.kt | 20 ++++--------------- .../cli/jvm/compiler/coreEnvironmentUtils.kt | 16 +++++++++++++++ .../kotlin/cli/common/GroupedKtSources.kt | 3 ++- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index f3d4b631f3c..9bd9877c0dc 100644 --- a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -52,7 +52,6 @@ import org.jetbrains.kotlin.cli.common.CliModuleVisibilityManagerImpl import org.jetbrains.kotlin.cli.common.CompilerSystemProperties import org.jetbrains.kotlin.cli.common.config.ContentRoot import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot -import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback import org.jetbrains.kotlin.cli.common.extensions.ScriptEvaluationExtension import org.jetbrains.kotlin.cli.common.extensions.ShellExtension @@ -195,7 +194,10 @@ class KotlinCoreEnvironment private constructor( val project = projectEnvironment.project project.registerService(DeclarationProviderFactoryService::class.java, CliDeclarationProviderFactoryService(sourceFiles)) - sourceFiles += createSourceFilesFromSourceRoots(configuration, project, getSourceRootsCheckingForDuplicates()) + sourceFiles += createSourceFilesFromSourceRoots( + configuration, project, + getSourceRootsCheckingForDuplicates(configuration, configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]) + ) collectAdditionalSources(project) @@ -402,20 +404,6 @@ class KotlinCoreEnvironment private constructor( private fun findJarRoot(file: File): VirtualFile? = projectEnvironment.jarFileSystem.findFileByPath("$file${URLUtil.JAR_SEPARATOR}") - private fun getSourceRootsCheckingForDuplicates(): List { - val uniqueSourceRoots = hashSetOf() - val result = mutableListOf() - - for (root in configuration.kotlinSourceRoots) { - if (!uniqueSourceRoots.add(root.path)) { - report(STRONG_WARNING, "Duplicate source root: ${root.path}") - } - result.add(root) - } - - return result - } - fun getSourceFiles(): List = ProcessSourcesBeforeCompilingExtension.getInstances(project) .fold(sourceFiles as Collection) { files, extension -> diff --git a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/coreEnvironmentUtils.kt b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/coreEnvironmentUtils.kt index 157e37c149d..b72c11f6bf6 100644 --- a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/coreEnvironmentUtils.kt +++ b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/coreEnvironmentUtils.kt @@ -15,6 +15,7 @@ import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiManager import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot +import org.jetbrains.kotlin.cli.common.config.kotlinSourceRoots import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector @@ -143,3 +144,18 @@ fun CompilerConfiguration.applyModuleProperties(module: Module, buildFile: File? } } +fun getSourceRootsCheckingForDuplicates(configuration: CompilerConfiguration, messageCollector: MessageCollector?): List { + val uniqueSourceRoots = hashSetOf() + val result = mutableListOf() + + for (root in configuration.kotlinSourceRoots) { + if (!uniqueSourceRoots.add(root.path)) { + messageCollector?.report(CompilerMessageSeverity.STRONG_WARNING, "Duplicate source root: ${root.path}") + } + result.add(root) + } + + return result +} + + diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/GroupedKtSources.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/GroupedKtSources.kt index 2c02305204c..c2db3d364b7 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/GroupedKtSources.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/GroupedKtSources.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.forAllFiles +import org.jetbrains.kotlin.cli.jvm.compiler.getSourceRootsCheckingForDuplicates import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.idea.KotlinFileType @@ -59,7 +60,7 @@ fun collectSources( compilerConfiguration.getBoolean(CommonConfigurationKeys.USE_LIGHT_TREE) var skipScriptsInLtModeWarning = false - compilerConfiguration.kotlinSourceRoots.forAllFiles( + getSourceRootsCheckingForDuplicates(compilerConfiguration, messageCollector).forAllFiles( compilerConfiguration, project ) { virtualFile, isCommon, moduleName ->