Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl

Issue 364063006: JAVA BINDINGS WIP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updates Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
diff --git a/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
index 329fa2ff90802c9f9b0b750066c7ec4c4a719808..b48a6187fb2cf2e0dcd03a95581a04cd2f815b73 100644
--- a/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
+++ b/mojo/public/tools/bindings/generators/java_templates/interface_definition.tmpl
@@ -1,9 +1,10 @@
{% from "constant_definition.tmpl" import constant_def %}
{% from "enum_definition.tmpl" import enum_def %}
+{% from "struct_definition.tmpl" import struct_def %}
-{%- macro declare_params(parameters) %}
+{%- macro declare_params(parameters, boxed=false) %}
{%- for param in parameters -%}
-{{param.kind|java_type(False)}} {{param|name}}
+{{param.kind|java_type(boxed)}} {{param|name}}
{%- if not loop.last %}, {% endif %}
{%- endfor %}
{%- endmacro %}
@@ -17,6 +18,7 @@
{% endmacro %}
{%- macro declare_callback(method) -%}
+
interface {{method|interface_response_name}} extends org.chromium.mojo.bindings.Callbacks.Callback{{method.response_parameters|length}}<
{%- for param in method.response_parameters -%}
{{param.kind|java_type(True)}}
@@ -25,6 +27,15 @@ interface {{method|interface_response_name}} extends org.chromium.mojo.bindings.
> { }
{%- endmacro -%}
+{%- macro run_callback(variable, parameters) -%}
+{%- if parameters -%}
+{%- for param in parameters -%}
+{{variable}}.{{param|name}}
+{%- if not loop.last %}, {% endif %}
+{%- endfor -%}
+{%- endif -%}
+{%- endmacro -%}
+
{%- macro super_class(client) -%}
{%- if client -%}
org.chromium.mojo.bindings.InterfaceWithClient<{{client|java_type}}>
@@ -33,6 +44,16 @@ org.chromium.mojo.bindings.Interface
{%- endif -%}
{%- endmacro -%}
+{%- macro flags(method, is_parameter) -%}
+{%- if not method.response_parameters -%}
+0
+{%- elif is_parameter: -%}
+org.chromium.mojo.bindings.MessageHeader.MESSAGE_EXPECTS_RESPONSE_FLAG
+{%- else -%}
+org.chromium.mojo.bindings.MessageHeader.MESSAGE_IS_RESPONSE_FLAG
+{%- endif -%}
+{%- endmacro -%}
+
{% macro interface_def(interface, client) %}
public interface {{interface|name}} extends {{super_class(client)}} {
{% for constant in interface.constants %}
@@ -43,6 +64,22 @@ public interface {{interface|name}} extends {{super_class(client)}} {
{{enum_def(enum, false)|indent(4)}}
{% endfor %}
+
+ public static final Builder<{% if client %}{{client|java_type}}, {% endif %}{{interface|name}}, Proxy> BUILDER = new Builder<{% if client %}{{client|java_type}}, {% endif %}{{interface|name}}, Proxy>({% if client %}{% if client == interface %}null{% else %}{{client|java_type}}.BUILDER{% endif %}{% endif %}) {
+
+ public Proxy buildProxy(org.chromium.mojo.system.Core core, org.chromium.mojo.bindings.MessageReceiverWithResponder messageReceiver) {
+ return new Proxy(core, messageReceiver);
+ }
+
+ public Stub buildStub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
+ return new Stub(core, impl);
+ }
+
+ public {{interface|name}}[] newArray(int size) {
+ return new {{interface|name}}[size];
+ }
+
+ };
{% for method in interface.methods %}
void {{method|name}}({{declare_request_params(method)}});
@@ -51,5 +88,153 @@ public interface {{interface|name}} extends {{super_class(client)}} {
{% endif %}
{% endfor %}
+ public final class Proxy extends {% if client %}org.chromium.mojo.bindings.InterfaceWithClient.Proxy<{{client|java_type}}>{% else %}org.chromium.mojo.bindings.Interface.Proxy{% endif %} implements {{interface|name}} {
+
+ public Proxy(org.chromium.mojo.system.Core core, org.chromium.mojo.bindings.MessageReceiverWithResponder messageReceiver) {
+ super(core, messageReceiver);
+ }
+{% for method in interface.methods %}
+
+ @Override
+ public void {{method|name}}({{declare_request_params(method)}}) {
+{% set request_struct = method|struct_from_method %}
+ {{interface|name}}Internal.{{request_struct|name}} message = new {{interface|name}}Internal.{{request_struct|name}}();
+{% for param in method.parameters %}
+ message.{{param|name}} = {{param|name}};
+{% endfor %}
+{% if method.response_parameters %}
+ getMessageReceiver().acceptWithResponder(
+ message.serializeWithHeader(getCore(),
+ new org.chromium.mojo.bindings.MessageHeader({{method.ordinal}}, {{flags(method, True)}}, 0)),
+ new {{interface|name}}Internal.{{method|response_struct_from_method|name }}ForwardToCallback(callback));
+{% else %}
+ getMessageReceiver().accept(message.serializeWithHeader(getCore(),
+ new org.chromium.mojo.bindings.MessageHeader({{method.ordinal}}, {{flags(method, True)}})));
+{% endif %}
+ }
+{% endfor %}
+
+ }
+
+ public final class Stub extends org.chromium.mojo.bindings.Interface.Stub<{{interface|name}}> {
+
+ public Stub(org.chromium.mojo.system.Core core, {{interface|name}} impl) {
+ super(core, impl);
+ }
+
+ @Override
+ public boolean accept(org.chromium.mojo.bindings.Message message) {
+ try {
+ org.chromium.mojo.bindings.MessageHeader header = message.getHeader();
+ org.chromium.mojo.bindings.Message payload = message.getPayload();
+ switch(header.getType()) {
+{% for method in interface.methods %}
+{% if not method.response_parameters %}
+{% set request_struct = method|struct_from_method %}
+ case {{method.ordinal}}: {
+ if (!header.validateHeader({{flags(method, True)}})) {
+ return false;
+ }
+ {{interface|name}}Internal.{{request_struct|name}} data = {{interface|name}}Internal.{{request_struct|name}}.deserialize(payload);
+ getImpl().{{method|name}}({{run_callback('data', method.parameters)}});
+ return true;
+ }
+{% endif %}
+{% endfor %}
+ }
+ } catch (org.chromium.mojo.bindings.DeserializationException e) {
+ }
+ return false;
+ }
+
+ @Override
+ public boolean acceptWithResponder(org.chromium.mojo.bindings.Message message, org.chromium.mojo.bindings.MessageReceiver receiver) {
+ try {
+ org.chromium.mojo.bindings.MessageHeader header = message.getHeader();
+ org.chromium.mojo.bindings.Message payload = message.getPayload();
+ switch(header.getType()) {
+{% for method in interface.methods %}
+{% if method.response_parameters %}
+{% set request_struct = method|struct_from_method %}
+{% set response_struct = method|response_struct_from_method %}
+ case {{method.ordinal}}: {
+ if (!header.validateHeader({{flags(method, True)}})) {
+ return false;
+ }
+ {{interface|name}}Internal.{{request_struct|name}} data = {{interface|name}}Internal.{{request_struct|name}}.deserialize(payload);
+ getImpl().{{method|name}}({{run_callback('data', method.parameters)}}{% if method.parameters %}, {% endif %}new {{interface|name}}Internal.{{response_struct|name}}ProxyToResponder(getCore(), receiver, header.getRequestId()));
+ return true;
+ }
+{% endif %}
+{% endfor %}
+ }
+ } catch (org.chromium.mojo.bindings.DeserializationException e) {
+ }
+ return false;
+ }
+
+ }
+}
+{% endmacro %}
+
+{% macro interface_internal_def(interface) %}
+class {{interface|name}}Internal {
+{% for method in interface.methods %}
+
+ {{ struct_def(method|struct_from_method, True)|indent(4) }}
+{% if method.response_parameters %}
+{% set response_struct = method|response_struct_from_method %}
+
+ {{ struct_def(response_struct, True)|indent(4) }}
+
+ static class {{response_struct|name}}ForwardToCallback implements org.chromium.mojo.bindings.MessageReceiver {
+ private final {{interface|name}}.{{method|interface_response_name}} mCallback;
+
+ {{response_struct|name}}ForwardToCallback({{interface|name}}.{{method|interface_response_name}} callback) {
+ this.mCallback = callback;
+ }
+
+ @Override
+ public boolean accept(org.chromium.mojo.bindings.Message message) {
+ try {
+ org.chromium.mojo.bindings.MessageHeader header = message.getHeader();
+ if (!header.validateHeader({{method.ordinal}}, {{flags(method, False)}})) {
+ return false;
+ }
+ org.chromium.mojo.bindings.Message payload = message.getPayload();
+ {{response_struct|name}} response = {{response_struct|name}}.deserialize(payload);
+ mCallback.call({{run_callback('response', method.response_parameters)}});
+ return true;
+ } catch (org.chromium.mojo.bindings.DeserializationException e) {
+ return false;
+ }
+ }
+ }
+
+ static class {{response_struct|name}}ProxyToResponder implements {{interface|name}}.{{method|interface_response_name}} {
+
+ private final org.chromium.mojo.system.Core mCore;
+ private final org.chromium.mojo.bindings.MessageReceiver mMessageReceiver;
+ private final long mRequestId;
+
+ {{response_struct|name}}ProxyToResponder(org.chromium.mojo.system.Core core, org.chromium.mojo.bindings.MessageReceiver messageReceiver, long requestId) {
+ mCore = core;
+ mMessageReceiver = messageReceiver;
+ mRequestId = requestId;
+ }
+
+ @Override
+ public void call({{declare_params(method.response_parameters, true)}}) {
+ {{response_struct|name}} response = new {{response_struct|name}}();
+{% for param in method.response_parameters %}
+ response.{{param|name}} = {{param|name}};
+{% endfor %}
+ org.chromium.mojo.bindings.Message message = response.serializeWithHeader(mCore, new org.chromium.mojo.bindings.MessageHeader({{method.ordinal}}, {{flags(method, False)}}, mRequestId));
+ mMessageReceiver.accept(message);
+ }
+ }
+{% endif %}
+{% endfor %}
+
}
{% endmacro %}

Powered by Google App Engine
This is Rietveld 408576698