> It's nice but it's just syntactic sugar so if it is slower than the
current
method I'd say no.

Linked PR[1] has no performance impact for end users.
It's not changing any current Cordova API etc. so it's pretty safe.

As for original idea:
On my testing devices most performant annotation reader is 5-6 times slower
than normal method call.
Most the Android frameworks using reflection on *build time* and this is
the most standard way to deal with them in Android at the moment[2]

[1] https://github.com/apache/cordova-android/pull/439

[2]
https://medium.com/@iammert/annotation-processing-dont-repeat-yourself-generate-your-code-8425e60c6657

On Mon, Apr 30, 2018 at 7:24 PM, Simon MacDonald <simon.macdon...@gmail.com>
wrote:

> It's nice but it's just syntactic sugar so if it is slower than the current
> method I'd say no. If it impacts the speed of the current method I'd say no
> as well.
>
> So I'd like to see some performance tests of the various methods before
> going ahead with this.
>
> Simon
>
> On Mon, Apr 30, 2018, 15:13 Joe Bowser <bows...@gmail.com> wrote:
>
> > I'm fine with this.  The problem we have now with our extensive use of
> > reflection on Android is both with performance, as well as with being
> able
> > to use obfuscation tools like ProGuard, which many auditors want to use
> to
> > determine whether their code is "actually secure".  I don't think
> > obfuscation makes anything more secure at all, but I don't write these
> > security analyzers.  That's why I'm against adding more reflection into
> it.
> >
> > Also, I've been doing this long enough to remember the old
> > addJavascriptInterface reflection exploit.
> >
> >
> >
> > On Sun, Apr 29, 2018 at 2:43 PM, Wojciech Trocki <wtro...@gmail.com>
> > wrote:
> >
> > > I have created PR in Android repository to show idea.
> > >
> > > https://github.com/apache/cordova-android/pull/439
> > >
> > > This change do not use reflection/annotations mentioned in original
> > > proposition.
> > > IMHO with this change plugin interface will be much simpler and more
> > object
> > > oriented.
> > >
> > > On Sun, Apr 29, 2018 at 4:55 PM, Rabindra Nayak <
> > rabindra.mob...@gmail.com
> > > >
> > > wrote:
> > >
> > > > How about iOS annotation @CordovaMethod.Because the way Android and
> iOS
> > > and
> > > > other OS plugin implementation should be same.We need think that
> > aspect.
> > > >
> > > >
> > > > On Sun, Apr 29, 2018, 21:08 Joe Bowser <bows...@gmail.com> wrote:
> > > >
> > > > > Cordova should be reducing the use of Reflection, not increasing
> > it.  I
> > > > > don't think this is a good idea.
> > > > >
> > > > > On Sun, Apr 29, 2018, 8:28 AM Jesse, <purplecabb...@gmail.com>
> > wrote:
> > > > >
> > > > > > 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
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > >
> > > WOJCIECH TROCKI
> > >
> > > Red Hat Mobile <https://www.redhat.com/>
> > >
> > > IM: wtrocki
> > > <https://red.ht/sig>
> > >
> >
>

Reply via email to