store bindable fields in meta
This commit is contained in:
+18
-8
@@ -25,13 +25,13 @@ class BindMacros {
|
|||||||
* default value: false
|
* default value: false
|
||||||
*/
|
*/
|
||||||
static public inline var FORCE = "force";
|
static public inline var FORCE = "force";
|
||||||
|
|
||||||
|
static public inline var BINDABLE_FIELDS = "bindableFields";
|
||||||
|
|
||||||
static var processed:Array<String> = [];
|
static var processed:Array<String> = [];
|
||||||
|
|
||||||
static var bindingSignalProvider:IBindingSignalProvider;
|
static var bindingSignalProvider:IBindingSignalProvider;
|
||||||
|
|
||||||
static var interfaceBindableFields:Map<String, Array<String>>;
|
|
||||||
|
|
||||||
macro static public function buildIBindable():Array<Field> {
|
macro static public function buildIBindable():Array<Field> {
|
||||||
var type = Context.getLocalType();
|
var type = Context.getLocalType();
|
||||||
var tName = type.toComplexType().toString();
|
var tName = type.toComplexType().toString();
|
||||||
@@ -44,7 +44,6 @@ class BindMacros {
|
|||||||
|
|
||||||
if (bindingSignalProvider == null) {
|
if (bindingSignalProvider == null) {
|
||||||
bindingSignalProvider = new bindx.BindSignal.BindSignalProvider();
|
bindingSignalProvider = new bindx.BindSignal.BindSignalProvider();
|
||||||
interfaceBindableFields = new Map();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var fields = Context.getBuildFields();
|
var fields = Context.getBuildFields();
|
||||||
@@ -61,7 +60,10 @@ class BindMacros {
|
|||||||
Context.warning('Interface doesn\'t support @:bindable meta params', m.pos);
|
Context.warning('Interface doesn\'t support @:bindable meta params', m.pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
interfaceBindableFields.set(typeName(classType), a);
|
var classMeta = classType.meta;
|
||||||
|
if (classMeta.has(BINDABLE_FIELDS))
|
||||||
|
classMeta.remove(BINDABLE_FIELDS);
|
||||||
|
classMeta.add(BINDABLE_FIELDS, [macro $v { a } ], classType.pos);
|
||||||
return fields;
|
return fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,10 +92,18 @@ class BindMacros {
|
|||||||
var interfaceFields = new Map();
|
var interfaceFields = new Map();
|
||||||
|
|
||||||
function iter(t:ClassType) {
|
function iter(t:ClassType) {
|
||||||
var a = interfaceBindableFields.get(typeName(t));
|
var meta = t.meta.get();
|
||||||
if (a != null) {
|
var m = meta.find(function (it) return it.name == BINDABLE_FIELDS);
|
||||||
for (i in a)
|
if (m != null && m.params.length > 0) {
|
||||||
interfaceFields.set(i, t);
|
var a = m.params[0];
|
||||||
|
switch a.expr {
|
||||||
|
case EArrayDecl(values):
|
||||||
|
for (v in values) {
|
||||||
|
var value = switch v.expr { case EConst(CString(s)): s; case _: null; };
|
||||||
|
interfaceFields.set(value, t);
|
||||||
|
}
|
||||||
|
case _:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (it in t.interfaces) iter(it.t.get());
|
for (it in t.interfaces) iter(it.t.get());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user