flutter_flutter/engine/bindings/scripts/templates/interface_dart.template
Matt Perry 7382a261aa Change the way we provide custom dart code for IDL bindings.
Rather than appending the custom Foo.dart code to the end of the generated
interface, we now copy it to a CustomFoo.dart file in the output directory.
This allows us to declare it as a proper dependency.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1171743002
2015-06-08 17:26:51 -04:00

62 lines
2.5 KiB
Plaintext

// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// WARNING: Do not edit - generated code.
part of dart.sky;
{% macro args_macro(args) -%}
{%- for arg in args -%}
{%- if arg.is_optional and (loop.first or not args[arg.index-1].is_optional) -%}
{{ '{' if arg.is_named else '[' }}
{%- endif -%}
{{ arg.dart_type }} {{ arg.name }}
{%- if arg.is_optional %} {{ ':' if arg.is_named else '='}} {{ arg.dart_default_value }}
{#- TODO(eseidel): This does not support having both optional and named arguments! -#}
{%- if loop.last -%}{{ '}' if arg.is_named else ']' }}{%- endif -%}
{%- endif -%}
{%- if not loop.last %}, {% endif %}
{%- endfor -%}
{%- endmacro -%}
{%- set prefix = "_" if private_dart else "" -%}
{% if not constructors and not custom_constructors %}abstract {% endif -%}
class {{prefix}}{{interface_name}} extends
{{ parent_interface if parent_interface else 'NativeFieldWrapperClass2' }} {
// Constructors
{# TODO(eseidel): We only ever have one constructor. #}
{%- for constructor in constructors + custom_constructors %}
void _constructor(
{%- for arg in constructor.arguments -%}
{{ arg.dart_type }} {{ arg.name }}{% if not loop.last %}, {% endif %}
{%- endfor -%}
) native "{{interface_name}}_constructorCallback";
{{prefix}}{{interface_name}}({{ args_macro(constructor.arguments) }}) { _constructor(
{%- for arg in constructor.arguments -%}
{{ arg.name }}{% if not loop.last %}, {% endif %}
{%- endfor -%}
); }
{% endfor %}
// Attributes
{% for attribute in attributes %}
{{ attribute.dart_type }} get {{prefix}}{{ attribute.name }} native "{{interface_name}}_{{ attribute.name }}_Getter";
{% if not attribute.is_read_only %}
void set {{prefix}}{{ attribute.name }}({{ attribute.dart_type }} value) native "{{interface_name}}_{{ attribute.name }}_Setter";
{% endif %}
{% endfor %}
// Methods
{% for method in methods %}
{{method.dart_type}} {{prefix}}{{method.name}}({{ args_macro(method.arguments)}}) native "{{interface_name}}_{{ method.name }}_Callback";
{% endfor %}
// Operators
{% if named_property_getter %}
String operator[](String name) native "{{interface_name}}___getter___Callback";
{% endif %}
{% if named_property_setter %}
void operator[]=(String name, String value) native "{{interface_name}}___setter___Callback";
{% endif %}
}