9.5.2 @:autoBuild
If a class has the :autoBuild
metadata, the compiler generates :build
metadata on all extending classes. If an interface has the :autoBuild
metadata, the compiler generates :build
metadata on all implementing classes and all extending interfaces. Note that :autoBuild
does not imply :build
on the class/interface itself.
import haxe.macro.Context;
import haxe.macro.Expr;
class AutoBuildingMacro {
macro static public
function fromInterface():Array<Field> {
trace("fromInterface: " + Context.getLocalType());
return null;
}
macro static public
function fromBaseClass():Array<Field> {
trace("fromBaseClass: " + Context.getLocalType());
return null;
}
}
@:autoBuild(AutoBuildingMacro.fromInterface())
interface I { }
interface I2 extends I { }
@:autoBuild(AutoBuildingMacro.fromBaseClass())
class Base { }
class Main extends Base implements I2 {
static public function main() { }
}
This outputs during compilation:
AutoBuildingMacro.hx:6:
fromInterface: TInst(I2,[])
AutoBuildingMacro.hx:6:
fromInterface: TInst(Main,[])
AutoBuildingMacro.hx:11:
fromBaseClass: TInst(Main,[])
It is important to keep in mind that the order of these macro executions is undefined, which is detailed in Build Order.