diff --git a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index f3a057e4f7a..af4f5cce8e9 100644 --- a/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -72,8 +72,7 @@ class K2Native : CLICompiler() { } if (arguments.freeArgs.isEmpty() && !arguments.isUsefulWithoutFreeArgs) { - val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY) - messageCollector.report(ERROR, "You have not specified any compilation arguments. No output has been produced.") + configuration.report(ERROR, "You have not specified any compilation arguments. No output has been produced.") } // TODO: catch Errors and IllegalStateException. diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt index 555ae3da506..ef8f96c85cf 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt @@ -24,6 +24,9 @@ import org.jetbrains.kotlin.backend.konan.util.File import org.jetbrains.kotlin.backend.konan.util.profile import org.jetbrains.kotlin.backend.konan.util.removeSuffixIfPresent import org.jetbrains.kotlin.backend.konan.util.suffixIfNot +import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity +import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.* import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl @@ -69,7 +72,9 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration private val repositories = configuration.getList(KonanConfigKeys.REPOSITORIES) ?: emptyList() private val resolver = KonanLibrarySearchPathResolver(repositories, distribution.klib, distribution.localKonanDir) private val librariesFound: List by lazy { - libraryNames.map{it -> resolver.resolve(it)} + val resolvedLibraries = libraryNames.map{it -> resolver.resolve(it)} + checkLibraryDuplicates(resolvedLibraries) + resolvedLibraries } internal val libraries: List by lazy { @@ -106,4 +111,14 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration loadedDescriptors } + + private fun checkLibraryDuplicates(resolvedLibraries: List) { + val duplicates = resolvedLibraries.groupBy { it.absolutePath } .values.filter { it.size > 1 } + duplicates.forEach { + configuration.report(STRONG_WARNING, "library included more than once: ${it.first().absolutePath}") + } + } } + +fun CompilerConfiguration.report(priority: CompilerMessageSeverity, message: String) + = this.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(priority, message)