package Ġio . paddle . project Ċ Ċ import Ġio . paddle . execution . Command Executor Ċ import Ġio . paddle . execution . local . Local Command Executor Ċ import Ġio . paddle . plugin . Plugin Ċ import Ġio . paddle . plugin . standard . extensions . Plugins Ċ import Ġio . paddle . terminal .* Ċ import Ġio . paddle . utils . config . Configuration Ċ import Ġio . paddle . utils . ext . Extend able Ċ import Ġjava . io . File Ċ Ċ class ĠProject ( val Ġconfig : ĠConfiguration , Ġval Ġwork Dir : ĠFile Ġ= ĠFile (". "), Ġval Ġoutput : ĠText Output Ġ= ĠText Output . Console ) Ġ{ ĊĠĠĠ Ġinterface ĠExtension < V : ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey : ĠExtend able . Key < V > ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( project : ĠProject ): ĠV ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtasks Ġ= ĠTasks () ĊĠĠĠ Ġval Ġextensions Ġ= ĠExtend able () ĊĠĠĠ Ġvar Ġexecutor : ĠCommand Executor Ġ= ĠLocal Command Executor ( output ) ĊĠĠĠ Ġval Ġterminal Ġ= ĠTerminal ( output ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġextensions . register ( Plugins . Extension . key , ĠPlugins . Extension . create ( this )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( plugin : ĠPlugin ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( extension Ġin Ġplugin . extensions ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextensions . register ( extension . key , Ġextension . create ( this )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( task Ġin Ġplugin . tasks ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . register ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplugin . configure ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( plugins : ĠIterable < Plugin >) Ġ{ ĊĠĠĠĠĠĠĠ Ġplugins . forEach Ġ{ Ġthis . register ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexecute ( id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġtasks . get ( id ) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġterminal . commands . stderr ( CommandOutput . Command . Task ( id , ĠCommand Output . Command . Task . Status . UNKNOWN )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtask . run () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġload ( file : ĠFile ): ĠProject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProject ( config Ġ= ĠConfiguration . from ( file )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ