in ideaSupport/src/main/scala/org/jetbrains/sbtidea/download/idea/IntellijVersionUtils.scala [46:100]
def detectArtifactLocation(platform: BuildInfo, artifactSuffix: String): IntellijArtifactLocationDescriptor = {
val intellijVersion = platform.buildNumber
val coordinates = getCoordinates(platform.edition)
val intellijVersionWithoutTail =
if (intellijVersion.contains("."))
intellijVersion.substring(0, intellijVersion.lastIndexOf('.'))
else
intellijVersion
import BuildInfo.*
val (artifactVersion, repositoryUrl) =
if (intellijVersion == LATEST_EAP_SNAPSHOT)
(intellijVersion, IntellijRepositories.Eap)
else if (intellijVersion.endsWith(EAP_SNAPSHOT_SUFFIX))
(intellijVersion, IntellijRepositories.Eap)
else if (intellijVersion.endsWith(EAP_CANDIDATE_SNAPSHOT_SUFFIX))
(intellijVersion, IntellijRepositories.Eap)
else if (intellijVersion.endsWith(SNAPSHOT_SUFFIX))
(intellijVersion, IntellijRepositories.Nightly)
else if (intellijVersion.count(_ == '.') == 1) {
//222.2270 -> 222-SNAPSHOT
val intellijVersionNightly = intellijVersionWithoutTail + SNAPSHOT_SUFFIX
(intellijVersionNightly, IntellijRepositories.Nightly)
} else {
//failed to determine kind of a build statically
//try to dynamically determine which version is it from Internet
//222.2270.15 -> 222.2270.15-EAP-SNAPSHOT
val intellijVersionEap = intellijVersion + EAP_SNAPSHOT_SUFFIX
//222.2270.15 -> 222.2270-EAP-CANDIDATE-SNAPSHOT
val intellijVersionEapCandidate = intellijVersionWithoutTail + EAP_CANDIDATE_SNAPSHOT_SUFFIX
if (isReleaseBuildAvailable(coordinates, intellijVersion, artifactSuffix))
(intellijVersion, IntellijRepositories.Releases)
else if (isEapBuildAvailable(coordinates, intellijVersionEap, artifactSuffix))
(intellijVersionEap, IntellijRepositories.Eap)
else if (isEapBuildAvailable(coordinates, intellijVersionEapCandidate, artifactSuffix))
(intellijVersionEapCandidate, IntellijRepositories.Eap)
else {
val fallback = (intellijVersionEapCandidate, IntellijRepositories.Eap)
log.warn(s"[$LoggerName] Cannot detect artifact location for version $intellijVersion, fallback to: $fallback")
fallback
}
}
val urlString = buildIntelliJArtifactUrl(repositoryUrl, coordinates, artifactVersion, artifactSuffix)
IntellijArtifactLocationDescriptor(
artifactVersion,
repositoryUrl,
url(urlString)
)
}