@@ -6,13 +6,17 @@ import haxe.macro.Context;
66import haxe .macro .Expr ;
77#if macro
88import sys .io .File ;
9+ import sys .FileSystem ;
910#end
1011
1112using StringTools ;
1213
1314class AssetsBuilder {
1415 #if macro
15- public static var files : Array <Dynamic >;
16+ @:persistent static var cache : Map <String , {time : Float , fields : Array <Field >}> = [];
17+ @:persistent static var files : Array <Dynamic >;
18+ @:persistent static var filesTime : Float = 0.0 ;
19+ static var debug = false ;
1620 #end
1721
1822 public static function findResources (): String {
@@ -51,18 +55,31 @@ class AssetsBuilder {
5155 }
5256
5357 macro static public function build (type : String ): Array <Field > {
54- var fields = Context .getBuildFields ();
55- if (files == null ) {
56- var content = Json .parse (File .getContent (findResources () + " files.json" ));
58+ final fields = Context .getBuildFields ();
59+ final resPath = findResources () + " files.json" ;
60+ Context .registerModuleDependency (Context .getLocalModule (), resPath );
61+
62+ final time = FileSystem .stat (resPath ).mtime .getTime ();
63+ if (cache [type ] != null && cache [type ].time == time ) {
64+ return cache [type ].fields ;
65+ }
66+
67+ if (files == null || filesTime != time ) {
68+ final content = Json .parse (File .getContent (resPath ));
5769 files = content .files ;
70+ filesTime = time ;
71+ if (debug )
72+ trace (" reparse files.json (Assets)" );
5873 }
74+ if (debug )
75+ trace (' invalidate Assets. $type ' );
5976
60- var names = new Array <Expr >();
77+ final names = new Array <Expr >();
6178
6279 for (file in files ) {
63- var name = file .name ;
80+ final name = file .name ;
6481 final pos = Context .currentPos ();
65- var filesize : Int = file .file_sizes [0 ];
82+ final filesize : Int = file .file_sizes [0 ];
6683
6784 if (file .type == type ) {
6885 names .push (macro $v {name });
@@ -210,6 +227,10 @@ class AssetsBuilder {
210227 kind : FVar (macro : Array < String > , macro $a {names }),
211228 pos : Context .currentPos ()
212229 });
230+ cache [type ] = {
231+ fields : fields ,
232+ time : time ,
233+ };
213234
214235 return fields ;
215236 }
0 commit comments