aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2013-11-15 00:13:13 +0200
committerVaadin Code Review <review@vaadin.com>2014-04-01 08:15:56 +0000
commita636bb70c20277228468345017a2f8d42d39857c (patch)
treeefd29a551c2eb90a3cb529d0ccbe5897b68768a2 /client
parent25bc9089614c959f5bb97fce174407eef537044b (diff)
downloadvaadin-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.java53
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);
+
+}