in ideaSupport/src/main/scala/org/jetbrains/sbtidea/tasks/UpdateWithIDEAInjectionTask.scala [38:100]
private def injectModules(
reportOriginal: UpdateReport,
intellijBaseDir: File,
intellijMainJars: Seq[File],
intellijTestJars: Seq[File],
intellijPluginClasspath: Seq[(PluginDescriptor, Classpath)],
buildNumber: String,
attachSources: Boolean,
): UpdateReport = {
val ideaModule: ModuleID = Modules.getIntellijSdkModule(buildNumber)
val ideaModuleTest: ModuleID = Modules.getIntellijSdkTestModule(buildNumber)
def findSourcesArchives(intellijBaseDir: File): Seq[File] = {
val sourcesDir = IdeaSourcesInstaller.sourcesRoot(intellijBaseDir.toPath).toFile
if (sourcesDir.isDirectory) FileUtils.listFiles(sourcesDir, Array("zip", "jar"), false).asScala.toSeq
else Seq()
}
val intelliJSourcesArchives = findSourcesArchives(intellijBaseDir)
val ideaArtifactsMapping: Seq[(sbt.Artifact, File)] = {
val mainJarsArtifact: Artifact = Artifacts.ideaMainJarsArtifact(intellijMainJars)
val sourcesArtifactMapping = if (attachSources) intelliJSourcesArchives.map(Artifacts.ideaSourcesArtifact -> _) else Seq.empty
intellijMainJars.map(mainJarsArtifact -> _) ++ sourcesArtifactMapping
}
val ideaTestArtifactMappings: Seq[(sbt.Artifact, File)] = {
//testFramework sources are located in the same archive as main sources
val sourcesArtifactMapping = if (attachSources) intelliJSourcesArchives.map(Artifacts.ideaTestSourcesArtifact -> _) else Seq.empty
val testJarsArtifact = Artifacts.ideaTestArtifact
intellijTestJars.map(testJarsArtifact -> _) ++ sourcesArtifactMapping
}
val pluginArtifactsMappings: Seq[(ModuleID, Seq[(Artifact, File)], Configuration)] = intellijPluginClasspath.flatMap { case (_, classpath) =>
val representativeJar = classpath.headOption
representativeJar.map { f =>
//NOTE: in current architecture plugins are attributed, but intellij jars are not?
// It's not consistent, and it's better to unify it in one place
val pluginModule = f.get(moduleID.key).get
val pluginArtifact = f.get(artifact.key).get
val mainArtifactMapping = classpath.map(pluginArtifact -> _.data)
//bundled plugin sources are located in the same archive as main sources
val sourcesArtifactMappings = intelliJSourcesArchives.map(Artifacts.pluginSourcesArtifact(pluginArtifact.name) -> _)
// bundled plugin has the same version as the platform; add sources
val mappings = if (attachSources && pluginModule.revision == buildNumber)
mainArtifactMapping ++ sourcesArtifactMappings
else
mainArtifactMapping
(pluginModule, mappings, Configurations.Compile)
}
}
val injectInfos: Seq[(sbt.ModuleID, Seq[(sbt.Artifact, sbt.File)], Configuration)] = Seq(
(ideaModule, ideaArtifactsMapping, Configurations.Compile),
(ideaModuleTest, ideaTestArtifactMappings, Configurations.Test),
) ++ pluginArtifactsMappings
val reportNew = injectInfos.foldLeft(reportOriginal) { case (previousReport, (module, artifactMappings, configuration)) =>
injectModulesIntoUpdateReport(previousReport, module, artifactMappings, configuration)
}
reportNew //keep a separate variable for easier debugging
}