From ea4256088ae0eb7aa91cf35e679a913ebe3e643d Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Mon, 26 Nov 2018 09:11:39 +0300 Subject: [PATCH] JPS: Report "Cyclically dependent modules should have same compiler" as build error rather than exception #KT-27285 Fixed Original commit: 3c8b15ca542357434ce7b2cfb68a95ce2a61d89e --- .../src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt | 8 ++++++++ .../src/org/jetbrains/kotlin/jps/build/KotlinChunk.kt | 8 ++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index d89283ea9dd..2a2fd5374c3 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -336,6 +336,14 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { val kotlinContext = context.kotlin val kotlinChunk = chunk.toKotlinChunk(context)!! + if (!kotlinChunk.haveSameCompiler) { + messageCollector.report( + ERROR, + "Cyclically dependent modules ${kotlinChunk.presentableModulesToCompilersList} should have same compiler." + ) + return ABORT + } + if (representativeTarget is KotlinUnsupportedModuleBuildTarget) { val msg = "${representativeTarget.kind} is not yet supported in IDEA internal build system. " + "Please use Gradle to build ${kotlinChunk.presentableShortName}." diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinChunk.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinChunk.kt index b28a19750d2..eb4c8cf54ae 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinChunk.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinChunk.kt @@ -37,14 +37,10 @@ class KotlinChunk internal constructor(val context: KotlinCompileContext, val ta val representativeTarget get() = targets.first() - private val presentableModulesToCompilersList: String + val presentableModulesToCompilersList: String get() = targets.joinToString { "${it.module.name} (${it.globalLookupCacheId})" } - init { - check(targets.all { it.javaClass == representativeTarget.javaClass }) { - "Cyclically dependent modules $presentableModulesToCompilersList should have same compiler." - } - } + val haveSameCompiler = targets.all { it.javaClass == representativeTarget.javaClass } private val defaultLanguageVersion = VersionView.RELEASED_VERSION