in jps-wrapper/src/main/kotlin/jps/wrapper/BuildRunnerUtil.kt [22:80]
fun runBuild(
loader: JpsModelLoader,
dataStorageRoot: Path,
modulesSet: Set<String>,
filePaths: List<String>,
forceBuild: Boolean,
allModules: Boolean,
includeTests: Boolean,
messageHandler: MessageHandler
) {
val scopes: MutableList<TargetTypeBuildScope> = ArrayList()
if (filePaths.isNotEmpty()) {
val jpsModel = loader.loadModel()
val targetsByType = HashMap<BuildTargetType<*>, MutableSet<String>>()
val jpsModules = jpsModel.project.modules.toMutableList()
for (filePath in filePaths) {
findBuildTarget(filePath, jpsModules)?.let { (targetType, moduleName) ->
targetsByType.getOrPut(targetType, ::HashSet).add(moduleName)
}
}
for ((buildTargetType, modules) in targetsByType) {
val builder = TargetTypeBuildScope.newBuilder().setTypeId(buildTargetType.typeId).setForceBuild(forceBuild)
for (moduleName in modules) {
builder.addTargetId(moduleName)
}
scopes.add(builder.build())
}
}
if (modulesSet.isNotEmpty() || allModules) {
for (type in JavaModuleBuildTargetType.ALL_TYPES) {
if (includeTests || !type.isTests) {
val builder = TargetTypeBuildScope.newBuilder().setTypeId(type.typeId).setForceBuild(forceBuild)
if (allModules) {
scopes.add(builder.setAllTargets(true).build())
} else if (modulesSet.isNotEmpty()) {
scopes.add(builder.addAllTargetId(modulesSet).build())
}
}
}
}
val buildRunner = BuildRunner(loader)
if (filePaths.isNotEmpty()) {
buildRunner.setFilePaths(filePaths)
}
val descriptor = buildRunner.load(messageHandler, dataStorageRoot, BuildFSState(true))
try {
buildRunner.runBuild(
descriptor,
CanceledStatus.NULL,
messageHandler,
BuildType.BUILD,
scopes,
false
)
} finally {
descriptor.release()
}
}