I would like to see proof of value. 
I believe the lookup of an action is insignificant compared to the message 
conversion between js and native. 
Please write some tests to justify your position. 


> On Apr 29, 2018, at 7:59 AM, julio cesar sanchez <jcesarmob...@gmail.com> 
> wrote:
> 
> I think it's a good idea.
> 
> FYI, there is a plugin that already allows this, you just have to add it as
> a dependency, but it's not backward compatible
> https://github.com/edewit/aerogear-reflect-cordova
> 
> 2018-04-29 16:44 GMT+02:00 Wojciech Trocki <wtro...@redhat.com>:
> 
>> Hi Maksim
>> 
>> `if (METHOD_1.equals(action))` is very similar way to how redux works.
>> 
>> I have playing with your proposition to see how this could be implemented.
>> What I found is that processing annotations on runtime can contribute to
>> slower application startup due to fact that annotation needs to be
>> processed at runtime.
>> Deviceready event is delivered later, which is not desired. This could be
>> also processed on build time (something like dagger), but I did not
>> investigated that.
>> 
>> I figured out simple way to extend this without any sacrifice on
>> performance.
>> This will simplify end user api and also still provide full backwards
>> compatibility.
>> We could make improvement for developers without affecting end user app
>> performance.
>> 
>> Linking gist with the idea:
>> https://gist.github.com/wtrocki/43bfdda18c086a3283bb8ba3bf2d052e
>> 
>> Happy to contribute that back to the Cordova.
>> 
>> *Note: *I'm not maintainer of Cordova Android platform so my response do
>> not mean that there will be approval for this change.
>> 
>> 
>> On Sun, Apr 29, 2018 at 9:58 AM, chemeri...@gmail.com <
>> chemeri...@gmail.com>
>> wrote:
>> 
>>> Hi guys. cordova-ios has a nice method binding for plugins. Unfortunately
>>> cordova-android requires at present boilerplate implementation of method
>>> execute:
>>> 
>>> public class MyPlugin extends CordovaPlugin {
>>>    ...
>>>    @Override
>>>    public boolean execute(String action, JSONArray args, CallbackContext
>>> callbackContext) throws JSONException {
>>>        if (METHOD_1.equals(action)) {
>>>            method1(args, callbackContext);
>>>        } else if (METHOD_2.equals(action)) {
>>>            method2(args, callbackContext);
>>>        ...
>>>        } else {
>>>            return false;
>>>        }
>>>        return true;
>>>    }
>>>    ...
>>> }
>>> 
>>> I suggest to implement support for @CordovaMethod that will allow for
>>> plugin authors to reduce boilerplate code, so the implementation above
>> will
>>> look like:
>>> 
>>> public class MyPlugin extends CordovaPlugin {
>>>    ...
>>>    @CordovaMethod
>>>    private void method1(JSONArray args, CallbackContext callbackContext)
>>> throws JSONException {
>>>        ...
>>>    }
>>> 
>>>    @CordovaMethod
>>>    private void method2(JSONArray args, CallbackContext callbackContext)
>>> throws JSONException {
>>>        ...
>>>    }
>>>    ...
>>> }
>>> 
>>> Implementation of method execute in CordovaPlugin.java will check for
>>> methods marked with @CordovaMethod and if action argument matches a
>> method
>>> with @CordovaMethod, the method will be invoked. Developer can also
>> specify
>>> action manually via the name parameter:
>>> 
>>> public class MyPlugin extends CordovaPlugin {
>>>    ...
>>>    @CordovaMethod(name = "method1")
>>>    private void myMethod(JSONArray args, CallbackContext
>> callbackContext)
>>> throws JSONException {
>>>        ...
>>>    }
>>>    ...
>>> }
>>> 
>>> Important to note that backward compatibility is preserved - old plugins
>>> didn't have @CordovaMethod, but new ones can use it to simplify code.
>>> 
>>> What do you think?
>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
>>> For additional commands, e-mail: dev-h...@cordova.apache.org
>>> 
>>> 
>> 
>> 
>> --
>> 
>> WOJCIECH TROCKI
>> 
>> Red Hat Mobile <https://www.redhat.com/>
>> 
>> IM: wtrocki
>> <https://red.ht/sig>
>> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org
For additional commands, e-mail: dev-h...@cordova.apache.org

Reply via email to