fun buildManifest()

in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/hotswap/ClassFileManifestBuilder.kt [69:115]


  fun buildManifest(session: HotSwappableDebugSession, progress: HotSwapProgress?): ClassFileManifest.Diff? {
    val env = session.env
    val configuration = getConfiguration(env) ?: return null
    val project = configuration.getProject()
    if (!HotSwapUtils.canHotSwap(env, project)) {
      return null
    }
    val jvmEnvDeferred: Deferred<JvmEnvironmentItem?> =
      BazelCoroutineService.getInstance(project).startAsync fn@{
        val targets = configuration.getAffectedTargets()
        if (targets.isEmpty()) {
          progress?.addMessage(
            session.session,
            MessageCategory.WARNING,
            BazelHotSwapBundle.message("hotswap.message.manifest.empty.target.error"),
          )
          return@fn null
        }
        val target = targets.first()
        val isTest = target.isTestTarget(project)
        return@fn queryJvmEnvironment(project, target)
      }
    progress?.setCancelWorker { jvmEnvDeferred.cancel() }
    val result =
      try {
        runBlocking { jvmEnvDeferred.await() }
      } catch (_: InterruptedException) {
        jvmEnvDeferred.cancel()
        throw RunCanceledByUserException()
      } catch (_: CancellationException) {
        jvmEnvDeferred.cancel()
        throw RunCanceledByUserException()
      } catch (e: ExecutionException) {
        throw com.intellij.execution.ExecutionException(e)
      }
    if (result == null) {
      return null
    }
    val jars =
      result.classpath
        .distinct()
        .filter { Files.isRegularFile(it) && it.extension == "jar" }
    val oldManifest = env.getManifest()
    val newManifest = ClassFileManifest.build(jars, oldManifest)
    env.getManifestRef()?.set(newManifest)
    return ClassFileManifest.modifiedClasses(oldManifest, newManifest)
  }