fun runBuild()

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