1
1
package hxmake ;
2
2
3
- using hxmake .utils .TaskTools ;
4
-
5
3
class Task {
6
-
4
+
7
5
public var name : String ;
8
6
public var description : String = " " ;
9
7
public var enabled : Bool = true ;
10
8
11
9
/**
12
- * `Module` associated with this Task
10
+ * `Module` associated with this task node
13
11
**/
14
- public var module (default , null ): Module ;
12
+ public var module (get , never ): Module ;
15
13
16
14
/**
17
15
* `Project` of associated module
18
16
* `null` if task is not linked to any module
19
17
**/
20
18
public var project (get , never ): Project ;
21
19
22
- public var chainBefore (default , null ): Array <Task > = [];
23
- public var chainAfter (default , null ): Array <Task > = [];
24
-
25
20
public var parent (default , null ): Task ;
26
21
22
+ /** Task attached directly to this task **/
23
+ var _module : Module ;
24
+
25
+ /** Children before run BEFORE parent **/
26
+ var _childrenBefore : Array <Task > = [];
27
+
28
+ /** Children before run AFTER parent **/
29
+ var _childrenAfter : Array <Task > = [];
30
+
27
31
var __after : Map <String , String > = new Map ();
28
32
var __before : Map <String , String > = new Map ();
29
33
var __finalized : Map <String , String > = new Map ();
30
34
var __depends : Map <String , String > = new Map ();
31
35
32
- var _doFirst : Array <Task -> Void > = [];
33
- var _doLast : Array <Task -> Void > = [];
34
-
35
- function _configure () {
36
- this .logStep (" Configuration BEGIN" );
37
- configure ();
38
- this .logStep (" Sub-tasks configuration (BEFORE)" );
39
- for (chained in chainBefore ) {
40
- chained ._configure ();
41
- }
42
- this .logStep (" Sub-tasks configuration (AFTER)" );
43
- for (chained in chainAfter ) {
44
- chained ._configure ();
45
- }
46
- this .logStep (" Configuration END" );
47
- }
48
-
49
- function _run () {
50
- this .logStep (" Run BEGIN" );
51
- this .logStep (" Run BEFORE tasks" );
52
-
53
- for (chained in chainBefore ) {
54
- chained ._run ();
55
- }
56
- for (cb in _doFirst ) {
57
- cb (this );
58
- }
59
- this .logStep (" Running" );
60
- run ();
61
-
62
- this .logStep (" Run AFTER tasks" );
63
- for (cb in _doLast ) {
64
- cb (this );
65
- }
66
- for (chained in chainAfter ) {
67
- chained ._run ();
68
- }
69
- this .logStep (" Run END" );
70
- }
36
+ var _doFirst = new Array <Task -> Void >();
37
+ var _doLast = new Array <Task -> Void >();
71
38
72
39
public function runAfter (task : String ): Task {
73
40
__after .set (task , task );
@@ -90,22 +57,30 @@ class Task {
90
57
return this ;
91
58
}
92
59
60
+ public function toString () {
61
+ return ' Task $name ( $description )' ;
62
+ }
63
+
93
64
public function configure () {}
94
65
95
66
public function run () {}
96
67
97
- public function then <T : Task >(task : T ): T {
98
- chainAfter .push (task );
99
- task .parent = this ;
100
- task .module = module ;
101
- return task ;
68
+ public function prepend (task : Task ): Task {
69
+ return attachChild (task , _childrenBefore , true );
102
70
}
103
71
104
- public function prepend <T : Task >(task : T ): T {
105
- chainBefore .push (task );
106
- task .parent = this ;
107
- task .module = module ;
108
- return task ;
72
+ public function then (task : Task ): Task {
73
+ return attachChild (task , _childrenAfter , false );
74
+ }
75
+
76
+ public function doFirst (func : Task -> Void ): Task {
77
+ _doFirst .insert (0 , func );
78
+ return this ;
79
+ }
80
+
81
+ public function doLast (func : Task -> Void ): Task {
82
+ _doLast .push (func );
83
+ return this ;
109
84
}
110
85
111
86
function fail (description : String = " " ) {
@@ -117,18 +92,24 @@ class Task {
117
92
}
118
93
}
119
94
120
- public function doFirst (func : Task -> Void ): Task {
121
- _doFirst .push (func );
122
- return this ;
123
- }
95
+ function attachChild (task : Task , array : Array <Task >, prepend : Bool ): Task {
96
+ if (task .parent != null ) project .logger .error (" Task is a child already (TODO: info)" );
97
+ task .parent = this ;
98
+
99
+ if (_childrenBefore .indexOf (task ) >= 0 || _childrenAfter .indexOf (task ) >= 0 ) project .logger .error (" Task is registered as child already (TODO: info)" );
100
+ if (prepend ) array .unshift (task );
101
+ else array .push (task );
124
102
125
- public function doLast (func : Task -> Void ): Task {
126
- _doLast .push (func );
127
103
return this ;
128
104
}
129
105
130
106
function get_project (): Project {
131
- return module != null ? module .project : null ;
107
+ var m = this .module ;
108
+ return m != null ? m .project : null ;
109
+ }
110
+
111
+ function get_module (): Module {
112
+ return _module != null ? _module : (parent != null ? parent .module : null );
132
113
}
133
114
134
115
public static function empty (name : String = null , description = " " ): Task {
@@ -137,6 +118,12 @@ class Task {
137
118
task .description = description ;
138
119
return task ;
139
120
}
121
+
122
+ public static function func (fn : Void -> Void , name : String = null , description = " " ): Task {
123
+ return empty (name , description ).doLast (function (_ ) {
124
+ fn ();
125
+ });
126
+ }
140
127
}
141
128
142
129
0 commit comments