
mb.pie.runtime.exec.ExecContext.kt Maven / Gradle / Ivy
The newest version!
package mb.pie.runtime.exec
import mb.fs.api.node.FSNode
import mb.fs.api.path.FSPath
import mb.pie.api.*
import mb.pie.api.exec.Cancelled
import mb.pie.api.fs.stamp.FileSystemStamper
import mb.pie.api.fs.toNode
import mb.pie.api.stamp.*
internal class ExecContextImpl(
private val requireTask: RequireTask,
private val cancel: Cancelled,
private val taskDefs: TaskDefs,
private val resourceSystems: ResourceSystems,
private val store: Store,
private val defaultOutputStamper: OutputStamper,
override val defaultRequireFileSystemStamper: FileSystemStamper,
override val defaultProvideFileSystemStamper: FileSystemStamper,
override val logger: Logger
) : ExecContext {
private val taskRequires = arrayListOf()
private val resourceRequires = arrayListOf()
private val resourceProvides = arrayListOf()
override fun require(task: Task): O {
return require(task, defaultOutputStamper)
}
override fun require(task: Task, stamper: OutputStamper): O {
cancel.throwIfCancelled()
val key = task.key()
val output = requireTask.require(key, task, cancel)
val stamp = stamper.stamp(output)
taskRequires.add(TaskRequireDep(key, stamp))
Stats.addCallReq()
return output
}
override fun require(taskDef: TaskDef, input: I): O {
return require(Task(taskDef, input), defaultOutputStamper)
}
override fun require(taskDef: TaskDef, input: I, stamper: OutputStamper): O {
return require(Task(taskDef, input), stamper)
}
override fun require(task: STask): Out {
return require(task.toTask(taskDefs), defaultOutputStamper)
}
override fun require(task: STask, stamper: OutputStamper): Out {
return require(task.toTask(taskDefs), stamper)
}
override fun require(taskDefId: String, input: I): Out {
val taskDef = getTaskDef(taskDefId)
return require(Task(taskDef, input), defaultOutputStamper)
}
override fun require(taskDefId: String, input: I, stamper: OutputStamper): Out {
val taskDef = getTaskDef(taskDefId)
return require(Task(taskDef, input), stamper)
}
private fun getTaskDef(id: String) = taskDefs.getTaskDef(id)
?: throw RuntimeException("Cannot retrieve task with identifier $id, it cannot be found")
override fun require(resource: R, stamper: ResourceStamper) {
@Suppress("UNCHECKED_CAST") val stamp = stamper.stamp(resource) as ResourceStamp
resourceRequires.add(ResourceRequireDep(resource.key(), stamp))
Stats.addFileReq()
}
override fun provide(resource: R, stamper: ResourceStamper) {
@Suppress("UNCHECKED_CAST") val stamp = stamper.stamp(resource) as ResourceStamp
resourceProvides.add(ResourceProvideDep(resource.key(), stamp))
Stats.addFileGen()
}
override fun require(path: FSPath): FSNode {
return require(path, defaultRequireFileSystemStamper)
}
override fun require(path: FSPath, stamper: FileSystemStamper): FSNode {
val resourceSystem = resourceSystems.getResourceSystem(path.fileSystemId)
?: throw RuntimeException("Cannot get resource system for path $path; resource system with id ${path.fileSystemId} does not exist")
val node = path.toNode(resourceSystem)
require(node, stamper)
return node
}
override fun provide(path: FSPath) {
return provide(path, defaultProvideFileSystemStamper)
}
override fun provide(path: FSPath, stamper: FileSystemStamper) {
val resourceSystem = resourceSystems.getResourceSystem(path.fileSystemId)
?: throw RuntimeException("Cannot get resource system for path $path; resource system with id ${path.fileSystemId} does not exist")
val node = path.toNode(resourceSystem)
provide(node, stamper)
}
override fun toNode(path: FSPath): FSNode {
val resourceSystem = resourceSystems.getResourceSystem(path.fileSystemId)
?: throw RuntimeException("Cannot get resource system for path $path; resource system with id ${path.fileSystemId} does not exist")
val node = path.toNode(resourceSystem)
return node
}
data class Deps(val taskRequires: ArrayList, val resourceRequires: ArrayList, val resourceProvides: ArrayList)
fun deps() = Deps(taskRequires, resourceRequires, resourceProvides)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy