mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
jps-bootstrap: module may have no production sources
GitOrigin-RevId: d08adeb14126fb1afd41f779591ba49b21ccfc44
This commit is contained in:
committed by
intellij-monorepo-bot
parent
674fc6cdbb
commit
665856499a
@@ -9,6 +9,7 @@ import org.jetbrains.intellij.build.dependencies.BuildDependenciesDownloader.dow
|
||||
import org.jetbrains.intellij.build.dependencies.BuildDependenciesDownloader.extractFileToCacheLocation
|
||||
import org.jetbrains.intellij.build.dependencies.BuildDependenciesLogging.verbose
|
||||
import org.jetbrains.jps.model.JpsProject
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
import org.jetbrains.jps.util.JpsPathUtil
|
||||
@@ -26,7 +27,7 @@ object ClassesFromCompileInc {
|
||||
const val MANIFEST_JSON_HTTP_PASSWORD_ENV_NAME = "JPS_BOOTSTRAP_MANIFEST_JSON_HTTP_PASSWORD"
|
||||
|
||||
@Throws(IOException::class, InterruptedException::class)
|
||||
fun downloadProjectClasses(project: JpsProject, communityRoot: BuildDependenciesCommunityRoot, modules: Collection<JpsModule?>?) {
|
||||
fun downloadProjectClasses(project: JpsProject, communityRoot: BuildDependenciesCommunityRoot, modules: Collection<JpsModule>) {
|
||||
val manifestUrl = System.getenv(MANIFEST_JSON_URL_ENV_NAME)
|
||||
check(!manifestUrl.isNullOrBlank()) { "Env variable '$MANIFEST_JSON_URL_ENV_NAME' is missing or empty" }
|
||||
verbose("Got manifest json url '$manifestUrl' from $MANIFEST_JSON_URL_ENV_NAME")
|
||||
@@ -59,22 +60,26 @@ object ClassesFromCompileInc {
|
||||
}
|
||||
}
|
||||
|
||||
private fun downloadProductionPartsFromMetadataJson(metadataJson: Path, communityRoot: BuildDependenciesCommunityRoot, modules: Collection<JpsModule?>?): Map<JpsModule, Path> {
|
||||
private fun downloadProductionPartsFromMetadataJson(metadataJson: Path, communityRoot: BuildDependenciesCommunityRoot, modules: Collection<JpsModule>): Map<JpsModule, Path> {
|
||||
var partsMetadata: CompilationPartsMetadata
|
||||
Files.newBufferedReader(metadataJson, StandardCharsets.UTF_8).use { manifestReader -> partsMetadata = Gson().fromJson(manifestReader, CompilationPartsMetadata::class.java) }
|
||||
check(partsMetadata.files!!.isNotEmpty()) { "partsMetadata.files is empty, check $metadataJson" }
|
||||
check(partsMetadata.files?.isNotEmpty() == true) { "partsMetadata.files is empty, check $metadataJson" }
|
||||
val tasks: MutableList<Callable<Pair<JpsModule, Path>>> = ArrayList()
|
||||
for (module in modules!!) {
|
||||
val c = Callable {
|
||||
val modulePrefix = "production/" + module!!.name
|
||||
val hash = partsMetadata.files!![modulePrefix]
|
||||
?: throw IllegalStateException("Unable to find module output by name '$modulePrefix' in $metadataJson")
|
||||
for (module in modules) {
|
||||
val modulePrefix = "production/" + module.name
|
||||
val hash = partsMetadata.files?.get(modulePrefix)
|
||||
if (hash == null) {
|
||||
check(module.getSourceRoots(JavaSourceRootType.SOURCE).none()) {
|
||||
"Unable to find module output by name '$modulePrefix' in $metadataJson"
|
||||
}
|
||||
continue
|
||||
}
|
||||
tasks += Callable {
|
||||
val outputPartUri = URI.create(partsMetadata.serverUrl + "/" + partsMetadata.prefix + "/" + modulePrefix + "/" + hash + ".jar")
|
||||
val outputPart = downloadFileToCacheLocation(communityRoot, outputPartUri)
|
||||
val outputPartExtracted = extractFileToCacheLocation(communityRoot, outputPart)
|
||||
module to outputPartExtracted
|
||||
}
|
||||
tasks.add(c)
|
||||
}
|
||||
return JpsBootstrapUtil.executeTasksInParallel(tasks).associate { it.first to it.second }
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.intellij.util.io.URLUtil
|
||||
import org.jetbrains.intellij.build.dependencies.BuildDependenciesLogging.info
|
||||
import org.jetbrains.jps.model.JpsElementFactory
|
||||
import org.jetbrains.jps.model.JpsModel
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.jps.model.java.JpsJavaDependenciesEnumerator
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.java.JpsJavaSdkType
|
||||
@@ -71,8 +72,8 @@ object JpsProjectUtils {
|
||||
// they're ok with missing output directory and a known case
|
||||
val m = allOutputDirectories[root]
|
||||
if (m != null) {
|
||||
val moduleWithEmptySources = m.sourceRoots.isEmpty() ||
|
||||
m.sourceRoots.all { !it.path.exists() || it.path.listDirectoryEntries().isEmpty() }
|
||||
val moduleWithEmptySources = m.getSourceRoots(JavaSourceRootType.SOURCE).none() ||
|
||||
m.sourceRoots.all { !it.path.exists() || it.path.listDirectoryEntries().isEmpty() }
|
||||
if (moduleWithEmptySources) {
|
||||
// skip it without error
|
||||
return@filter false
|
||||
|
||||
Reference in New Issue
Block a user