diff options
author | Leif Åstrand <leif@vaadin.com> | 2013-11-15 00:13:13 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-04-01 08:15:56 +0000 |
commit | a636bb70c20277228468345017a2f8d42d39857c (patch) | |
tree | efd29a551c2eb90a3cb529d0ccbe5897b68768a2 /client | |
parent | 25bc9089614c959f5bb97fce174407eef537044b (diff) | |
download | vaadin-framework-a636bb70c20277228468345017a2f8d42d39857c.tar.gz vaadin-framework-a636bb70c20277228468345017a2f8d42d39857c.zip |
Make Invoker support non-public methods (#12959)
Change-Id: Ie449489f3c9222bbe4a4221841c4ebc20693f969
Diffstat (limited to 'client')
-rw-r--r-- | client/src/com/vaadin/client/metadata/JsniInvoker.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/client/src/com/vaadin/client/metadata/JsniInvoker.java b/client/src/com/vaadin/client/metadata/JsniInvoker.java new file mode 100644 index 0000000000..4692a18cfe --- /dev/null +++ b/client/src/com/vaadin/client/metadata/JsniInvoker.java @@ -0,0 +1,53 @@ +/* + * Copyright 2000-2013 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.client.metadata; + +import com.google.gwt.core.client.JavaScriptObject; +import com.vaadin.client.JsArrayObject; + +/** + * Special {@link Invoker} that uses JSNI to invoke methods with limited + * visibility. + * + * @since 7.2 + * @author Vaadin Ltd + */ +public abstract class JsniInvoker implements Invoker { + + @Override + public Object invoke(Object target, Object... params) { + JsArrayObject<Object> jsParams = JavaScriptObject.createArray().cast(); + for (Object object : params) { + jsParams.add(object); + } + return jsniInvoke(target, jsParams); + } + + /** + * Abstract method that will be generated to contain JSNI for invoking the + * actual method. + * + * @param target + * the object upon which to invoke the method + * @param params + * a js array with arguments to pass to the method + * @return the value returned by the invoked method, or <code>null</code> if + * the target method return type is <code>void</code>. + */ + protected abstract Object jsniInvoke(Object target, + JsArrayObject<Object> params); + +} |