From 971ec1fbefa17f7a07ebdfd07bc9b6e09d3e8eeb Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 6 Apr 2016 13:03:08 +0200 Subject: [PATCH] [platform] IDE update strategy (minor optimization) --- .../updateSettings/impl/UpdateStrategy.kt | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.kt b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.kt index 98b5d41ba31a..4e07c91f15d7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.kt +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateStrategy.kt @@ -17,7 +17,6 @@ package com.intellij.openapi.updateSettings.impl import com.intellij.openapi.updateSettings.UpdateStrategyCustomization import com.intellij.openapi.util.BuildNumber -import java.util.* class UpdateStrategy(private val currentBuild: BuildNumber, private val updates: UpdatesInfo, private val settings: UserUpdateSettings) { enum class State { @@ -34,10 +33,10 @@ class UpdateStrategy(private val currentBuild: BuildNumber, private val updates: val ignoredBuilds = settings.ignoredBuildNumbers.toSet() val result = product.channels.asSequence() - .filter { it.status.compareTo(selectedChannel) >= 0 } - .sortedWith(Comparator { ch1, ch2 -> ch1.status.compareTo(ch2.status) }) // by stability, asc - .map { ch -> ch.builds.asSequence().filter { build -> isApplicable(build, ignoredBuilds) } to ch } - .map { p -> candidateBuild(p.first) to p.second } + .filter { ch -> ch.status >= selectedChannel } // filter out inapplicable channels + .sortedBy { ch -> ch.status } // sort by stability, asc + .map { ch -> ch.builds.asSequence().filter { build -> isApplicable(build, ignoredBuilds) } to ch } // filter out inapplicable builds + .map { p -> maxBuild(p.first) to p.second } // max build in a channel, preferring same baseline .filter { p -> p.first != null } .maxBy { p -> p.first!!.number } @@ -49,11 +48,8 @@ class UpdateStrategy(private val currentBuild: BuildNumber, private val updates: candidate.number.asStringWithoutProductCode() !in ignoredBuilds && candidate.target?.inRange(currentBuild) ?: true - private fun candidateBuild(builds: Sequence) = - latestBuild(builds.filter { it.number.baselineVersion == currentBuild.baselineVersion }) ?: latestBuild(builds) - - private fun latestBuild(builds: Sequence) = - builds.fold(null as BuildInfo?) { best, candidate -> if (best == null || candidate.number > best.number) candidate else best } + private fun maxBuild(builds: Sequence) = + builds.filter { it.number.baselineVersion == currentBuild.baselineVersion }.maxBy { it.number } ?: builds.maxBy { it.number } //