From 7fe246e8d386e6450eb70eedab56d919a411aa61 Mon Sep 17 00:00:00 2001 From: shmyga Date: Mon, 22 Apr 2019 10:36:07 +0300 Subject: [PATCH] [dispatcher] rename signal vars --- demo/src/demo/Demo.hx | 24 +++++++++++----------- demo/src/demo/dispatch/DemoDispatcher.hx | 10 ++++----- src/main/haxework/macro/DispatcherMacro.hx | 14 ++++++++++--- src/main/haxework/parser/Parser.hx | 17 ++++++++++----- 4 files changed, 40 insertions(+), 25 deletions(-) diff --git a/demo/src/demo/Demo.hx b/demo/src/demo/Demo.hx index 12b4617..51a47ca 100644 --- a/demo/src/demo/Demo.hx +++ b/demo/src/demo/Demo.hx @@ -43,15 +43,15 @@ class Demo extends App implements DemoListener { var dispatcher = new DemoDispatcher(); dispatcher.connect(app); - dispatcher.test1Change.emit(); - dispatcher.test2Change.emit(1); - dispatcher.test3Change.emit(1, "test"); - dispatcher.test4Change.emit(app); + dispatcher.test1Signal.emit(); + dispatcher.test2Signal.emit(1); + dispatcher.test3Signal.emit(1, "test"); + dispatcher.test4Signal.emit(app); dispatcher.disconnect(app); - dispatcher.test1Change.emit(); - dispatcher.test2Change.emit(1); - dispatcher.test3Change.emit(1, "test"); - dispatcher.test4Change.emit(app); + dispatcher.test1Signal.emit(); + dispatcher.test2Signal.emit(1); + dispatcher.test3Signal.emit(1, "test"); + dispatcher.test4Signal.emit(app); new JsonLoader().GET("http://umix.tv/channel/data2/renova.json") .then(function(data:Array) { @@ -61,19 +61,19 @@ class Demo extends App implements DemoListener { .catchError(function(error) trace(error)); } - public function test1():Void { + public function onTest1():Void { trace('test1'); } - public function test2(a:Int):Void { + public function onTest2(a:Int):Void { trace('test2', a); } - public function test3(a:Int, b:String):Void { + public function onTest3(a:Int, b:String):Void { trace('test3', a, b); } - public function test4(app: App):Void { + public function onTest4(app: App):Void { trace('test4', app); } diff --git a/demo/src/demo/dispatch/DemoDispatcher.hx b/demo/src/demo/dispatch/DemoDispatcher.hx index f6cbb7f..cc64886 100644 --- a/demo/src/demo/dispatch/DemoDispatcher.hx +++ b/demo/src/demo/dispatch/DemoDispatcher.hx @@ -3,12 +3,12 @@ package demo.dispatch; import haxework.App; interface DemoListener { - public function test1():Void; - public function test2(a:Int):Void; - public function test3(a:Int, b:String):Void; - public function test4(app:App):Void; + public function onTest1():Void; + public function onTest2(a:Int):Void; + public function onTest3(a:Int, b:String):Void; + public function onTest4(app:App):Void; } -@:dispatcher(DemoListener) class DemoDispatcher { +@:yield @:dispatcher(DemoListener) class DemoDispatcher { public function new() {} } diff --git a/src/main/haxework/macro/DispatcherMacro.hx b/src/main/haxework/macro/DispatcherMacro.hx index 0a57d94..b76b78f 100644 --- a/src/main/haxework/macro/DispatcherMacro.hx +++ b/src/main/haxework/macro/DispatcherMacro.hx @@ -22,6 +22,14 @@ class DispatcherMacro { this.fields = fields; } + private static inline function signalName(fieldName:String):String { + if (fieldName.substr(0, 2) == "on") { + return fieldName.substr(2, 1).toLowerCase() + fieldName.substr(3) + "Signal"; + } else { + return fieldName + "Signal"; + } + } + public function apply():Array { var result:Array = fields.slice(0); var typeName = ExprTools.toString(classType.meta.extract(metaName)[0].params[0]); @@ -43,7 +51,7 @@ class DispatcherMacro { params: argsTypes.map(function(t) return TPType(TypeTools.toComplexType(t))), }); result.push({ - name: '${field.name}Change', + name: signalName(field.name), access: [APublic], pos: Context.currentPos(), kind: FProp('default', 'null', type, Context.parse('new haxework.signal.Signal.${signal}()', Context.currentPos())), @@ -63,7 +71,7 @@ class DispatcherMacro { }], ret: null, expr: macro $b{fields.map(function(field) { - return Context.parse('${field.name}Change.connect(listener.${field.name})', Context.currentPos()); + return Context.parse('${signalName(field.name)}.connect(listener.${field.name})', Context.currentPos()); })}, }), }); @@ -81,7 +89,7 @@ class DispatcherMacro { }], ret: null, expr: macro $b{fields.map(function(field) { - return Context.parse('${field.name}Change.disconnect(listener.${field.name})', Context.currentPos()); + return Context.parse('${signalName(field.name)}.disconnect(listener.${field.name})', Context.currentPos()); })}, }), }); diff --git a/src/main/haxework/parser/Parser.hx b/src/main/haxework/parser/Parser.hx index 71c6616..0b5b779 100644 --- a/src/main/haxework/parser/Parser.hx +++ b/src/main/haxework/parser/Parser.hx @@ -1,5 +1,6 @@ package haxework.parser; +import haxe.macro.TypeTools; import haxe.macro.Context; import haxe.macro.Expr; import haxe.macro.Type; @@ -10,15 +11,20 @@ import haxework.macro.TemplateMacro; class Parser { + private static var processed:Map = new Map(); + private static function auto():Void { haxe.macro.Compiler.addGlobalMetadata("", "@:build(haxework.parser.Parser.autoRun())", true, true, false); } private static macro function autoRun():Array { - var t:Type = Context.getLocalType(); - switch (t) { - case null: return null; + var localType = Context.getLocalType(); + return switch localType { case Type.TInst(_.get() => ct, _): + var localName = TypeTools.toString(localType); + if (processed.exists(localName)) { + return null; + } var modify:Bool = false; var fields:Array = Context.getBuildFields(); var result:Array = []; @@ -51,8 +57,9 @@ class Parser { var dispatcher = new DispatcherMacro(ct, fields); fields = dispatcher.apply(); } - return modify ? fields : null; - default: return null; + processed.set(localName, true); + modify ? fields : null; + default: null; } } }