From 6aaf2c7c4dcd8053ae4e767e714e5e722dcb516b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 12 Dec 2016 20:29:25 +0300 Subject: [PATCH] Decrease number of reported runtime version diagnostics If there's at least one runtime newer than the compiler, do not report that it's inconsistent with the correct runtime --- .../JvmRuntimeVersionsConsistencyChecker.kt | 52 ++++++++++++------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JvmRuntimeVersionsConsistencyChecker.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JvmRuntimeVersionsConsistencyChecker.kt index 11c56aca239..40c761dcaa5 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JvmRuntimeVersionsConsistencyChecker.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/JvmRuntimeVersionsConsistencyChecker.kt @@ -110,38 +110,51 @@ object JvmRuntimeVersionsConsistencyChecker { classpathJarRoots: List ) { val runtimeJarsInfo = collectRuntimeJarsInfo(classpathJarRoots) - if (!runtimeJarsInfo.hasAnyJarsToCheck) return + if (runtimeJarsInfo.hasAnyJarsToCheck) { + val languageVersion = languageVersionSettings?.let { MavenComparableVersion(it.languageVersion) } ?: CURRENT_COMPILER_VERSION - val languageVersion = - languageVersionSettings?.let { MavenComparableVersion(it.languageVersion) } ?: CURRENT_COMPILER_VERSION - - // Even if language version option was explicitly specified, the JAR files SHOULD NOT be newer than the compiler. - runtimeJarsInfo.coreJars.forEach { - checkNotNewerThanCompiler(messageCollector, it) + checkCompilerClasspathConsistency(messageCollector, languageVersion, runtimeJarsInfo) } - - runtimeJarsInfo.coreJars.forEach { - checkCompatibleWithLanguageVersion(messageCollector, it, languageVersion) - } - - checkMatchingVersions(messageCollector, runtimeJarsInfo) } - private fun checkNotNewerThanCompiler(messageCollector: MessageCollector, jar: KotlinLibraryFile) { + private fun checkCompilerClasspathConsistency( + messageCollector: MessageCollector, + languageVersion: MavenComparableVersion, + runtimeJarsInfo: RuntimeJarsInfo + ): Boolean { + // Even if language version option was explicitly specified, the JAR files SHOULD NOT be newer than the compiler. + if (runtimeJarsInfo.coreJars.map { + checkNotNewerThanCompiler(messageCollector, it) + }.any { it }) return true + + if (runtimeJarsInfo.coreJars.map { + checkCompatibleWithLanguageVersion(messageCollector, it, languageVersion) + }.any { it }) return true + + return checkMatchingVersions(messageCollector, runtimeJarsInfo) + } + + private fun checkNotNewerThanCompiler(messageCollector: MessageCollector, jar: KotlinLibraryFile): Boolean { if (jar.version > CURRENT_COMPILER_VERSION) { messageCollector.issue(jar.file, "Runtime JAR file has version ${jar.version} which is newer than compiler version $CURRENT_COMPILER_VERSION") + return true } + return false } - private fun checkCompatibleWithLanguageVersion(messageCollector: MessageCollector, jar: KotlinLibraryFile, languageVersion: MavenComparableVersion) { + private fun checkCompatibleWithLanguageVersion( + messageCollector: MessageCollector, jar: KotlinLibraryFile, languageVersion: MavenComparableVersion + ): Boolean { if (jar.version < languageVersion) { messageCollector.issue(jar.file, "Runtime JAR file has version ${jar.version} which is older than required for language version $languageVersion") + return true } + return false } - private fun checkMatchingVersions(messageCollector: MessageCollector, runtimeJarsInfo: RuntimeJarsInfo) { - val oldestCoreJar = runtimeJarsInfo.coreJars.minBy { it.version } ?: return - val newestCoreJar = runtimeJarsInfo.coreJars.maxBy { it.version } ?: return + private fun checkMatchingVersions(messageCollector: MessageCollector, runtimeJarsInfo: RuntimeJarsInfo): Boolean { + val oldestCoreJar = runtimeJarsInfo.coreJars.minBy { it.version } ?: return false + val newestCoreJar = runtimeJarsInfo.coreJars.maxBy { it.version } ?: return false if (oldestCoreJar.version != newestCoreJar.version) { messageCollector.issue(null, buildString { @@ -150,7 +163,10 @@ object JvmRuntimeVersionsConsistencyChecker { appendln(" ${jar.file.path} (version ${jar.version})") } }.trimEnd()) + return true } + + return false } private fun MessageCollector.issue(file: VirtualFile?, message: String) {