K2: add a check for duplicate source root
This commit is contained in:
committed by
Space Team
parent
9bff7e3045
commit
a73442f90f
+4
-16
@@ -52,7 +52,6 @@ import org.jetbrains.kotlin.cli.common.CliModuleVisibilityManagerImpl
|
|||||||
import org.jetbrains.kotlin.cli.common.CompilerSystemProperties
|
import org.jetbrains.kotlin.cli.common.CompilerSystemProperties
|
||||||
import org.jetbrains.kotlin.cli.common.config.ContentRoot
|
import org.jetbrains.kotlin.cli.common.config.ContentRoot
|
||||||
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot
|
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.environment.setIdeaIoUseFallback
|
||||||
import org.jetbrains.kotlin.cli.common.extensions.ScriptEvaluationExtension
|
import org.jetbrains.kotlin.cli.common.extensions.ScriptEvaluationExtension
|
||||||
import org.jetbrains.kotlin.cli.common.extensions.ShellExtension
|
import org.jetbrains.kotlin.cli.common.extensions.ShellExtension
|
||||||
@@ -195,7 +194,10 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
val project = projectEnvironment.project
|
val project = projectEnvironment.project
|
||||||
project.registerService(DeclarationProviderFactoryService::class.java, CliDeclarationProviderFactoryService(sourceFiles))
|
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)
|
collectAdditionalSources(project)
|
||||||
|
|
||||||
@@ -402,20 +404,6 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
private fun findJarRoot(file: File): VirtualFile? =
|
private fun findJarRoot(file: File): VirtualFile? =
|
||||||
projectEnvironment.jarFileSystem.findFileByPath("$file${URLUtil.JAR_SEPARATOR}")
|
projectEnvironment.jarFileSystem.findFileByPath("$file${URLUtil.JAR_SEPARATOR}")
|
||||||
|
|
||||||
private fun getSourceRootsCheckingForDuplicates(): List<KotlinSourceRoot> {
|
|
||||||
val uniqueSourceRoots = hashSetOf<String>()
|
|
||||||
val result = mutableListOf<KotlinSourceRoot>()
|
|
||||||
|
|
||||||
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<KtFile> =
|
fun getSourceFiles(): List<KtFile> =
|
||||||
ProcessSourcesBeforeCompilingExtension.getInstances(project)
|
ProcessSourcesBeforeCompilingExtension.getInstances(project)
|
||||||
.fold(sourceFiles as Collection<KtFile>) { files, extension ->
|
.fold(sourceFiles as Collection<KtFile>) { files, extension ->
|
||||||
|
|||||||
+16
@@ -15,6 +15,7 @@ import com.intellij.openapi.vfs.VirtualFileManager
|
|||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot
|
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.CompilerMessageLocation
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
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<KotlinSourceRoot> {
|
||||||
|
val uniqueSourceRoots = hashSetOf<String>()
|
||||||
|
val result = mutableListOf<KotlinSourceRoot>()
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.forAllFiles
|
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.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
@@ -59,7 +60,7 @@ fun collectSources(
|
|||||||
compilerConfiguration.getBoolean(CommonConfigurationKeys.USE_LIGHT_TREE)
|
compilerConfiguration.getBoolean(CommonConfigurationKeys.USE_LIGHT_TREE)
|
||||||
var skipScriptsInLtModeWarning = false
|
var skipScriptsInLtModeWarning = false
|
||||||
|
|
||||||
compilerConfiguration.kotlinSourceRoots.forAllFiles(
|
getSourceRootsCheckingForDuplicates(compilerConfiguration, messageCollector).forAllFiles(
|
||||||
compilerConfiguration,
|
compilerConfiguration,
|
||||||
project
|
project
|
||||||
) { virtualFile, isCommon, moduleName ->
|
) { virtualFile, isCommon, moduleName ->
|
||||||
|
|||||||
Reference in New Issue
Block a user