def detectArtifactLocation()

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)
    )
  }