Chromium Code Reviews| Index: mojo/public/tools/bindings/generators/dart_templates/mojom_type_macros.tmpl | 
| diff --git a/mojo/public/tools/bindings/generators/dart_templates/mojom_type_macros.tmpl b/mojo/public/tools/bindings/generators/dart_templates/mojom_type_macros.tmpl | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..e4c7a0306eb006d8752cd523869eab56ca5f05ec | 
| --- /dev/null | 
| +++ b/mojo/public/tools/bindings/generators/dart_templates/mojom_type_macros.tmpl | 
| @@ -0,0 +1,158 @@ | 
| +// 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. | 
| + | 
| +{%- macro writeMojomTypeDef(type, typepkg, pkg) -%} | 
| +{%- if should_gen_mojom_types -%} | 
| +{%- if type|is_enum_kind -%} | 
| +{{typepkg}}MojomEnum {{type|mojom_type_identifier}}() { | 
| + return {{ writeMojomType(type, typepkg, pkg) }}; | 
| +} | 
| +{%- elif type|is_struct_kind -%} | 
| +{{typepkg}}MojomStruct {{type|mojom_type_identifier}}() { | 
| + return {{ writeMojomType(type, typepkg, pkg) }}; | 
| +} | 
| +{%- elif type|is_union_kind -%} | 
| +{{typepkg}}MojomUnion {{type|mojom_type_identifier}}() { | 
| + return {{ writeMojomType(type, typepkg, pkg) }}; | 
| +} | 
| +{%- elif type|is_interface_kind -%} | 
| +{{typepkg}}MojomInterface {{type|mojom_type_identifier}}() { | 
| + return new {{typepkg}}MojomInterface() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = "{{type|name}}") | 
| + ..interfaceName = "{{type|name}}" | 
| + ..methods = <int, {{typepkg}}MojomMethod>{ | 
| +{% for method in type.methods -%} | 
| + k{{type|name}}_{{method|name}}_name: new {{typepkg}}MojomMethod() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = "{{method|name|upper_camel}}") | 
| + ..ordinal = k{{type|name}}_{{method|name}}_name | 
| +{%- if method.response_parameters != None %} | 
| + ..responseParams = {{method.response_param_struct|mojom_type_identifier}}() | 
| +{%- endif -%} | 
| + ..parameters = {{method.param_struct|mojom_type_identifier}}(), | 
| +{%- endfor %} | 
| + }; | 
| +} | 
| + | 
| +{%- else -%} | 
| +BAD TYPE NAME GIVEN | 
| 
 
zra
2015/11/24 17:34:44
In the Dart parser/compiler is not the right place
 
alexfandrianto
2015/12/18 01:53:19
Added a failure mode.
 
 | 
| +{%- endif -%} | 
| +{%- endif -%} | 
| +{%- endmacro -%} | 
| + | 
| + | 
| +{%- macro writeMojomType(type, typepkg, pkg, topLevel=true) -%} | 
| +{%- if type|mojom_type_value(typepkg) != "" -%}{#- simple kind case -#} | 
| + {{type|mojom_type_value(typepkg)}} | 
| +{%- elif type|is_array_kind -%} | 
| + {{writeTypeArrayType(type, typepkg, pkg)}} | 
| +{%- elif type|is_map_kind -%} | 
| + {{writeTypeMapType(type, typepkg, pkg)}} | 
| +{%- elif type|is_enum_kind or type|is_struct_kind or type|is_union_kind -%} | 
| + {%- if topLevel -%} | 
| + {%- if type|is_enum_kind -%} | 
| + {{writeMojomEnumType(type, typepkg, pkg)}} | 
| + {%- elif type|is_struct_kind -%} | 
| + {{writeMojomStructType(type, typepkg, pkg)}} | 
| + {%- else -%} {#- Must be a union -#} | 
| + {{writeMojomUnionType(type, typepkg, pkg)}} | 
| + {%- endif -%} | 
| + {%- else -%} | 
| + {{writeTypeTypeReference(type, typepkg, pkg)}} | 
| + {%- endif -%} | 
| +{%- elif type|is_interface_kind or type|is_interface_request_kind -%} | 
| + {{writeTypeTypeReference(type, typepkg, pkg)}} | 
| +{%- else -%} | 
| + ERROR: UNSUPPORTED TYPE | 
| 
 
zra
2015/11/24 17:34:44
ditto
 
alexfandrianto
2015/12/18 01:53:19
Done.
 
 | 
| +{%- endif -%} | 
| +{%- endmacro -%} | 
| + | 
| + | 
| +{%- macro writeTypeArrayType(type, typepkg, pkg) -%} | 
| + new {{typepkg}}Type()..arrayType = (new {{typepkg}}ArrayType() | 
| + {%- if type|is_nullable_kind %} | 
| + ..nullable = true | 
| + {% endif -%} | 
| + {%- if type.length is not none -%} | 
| + ..fixedLength = {{type.length}} | 
| + {%- endif %} | 
| + ..elementType = ({{writeMojomType(type.kind, typepkg, pkg, false)}})) | 
| +{%- endmacro -%} | 
| + | 
| +{%- macro writeTypeMapType(type, typepkg, pkg) -%} | 
| + new {{typepkg}}Type()..mapType = (new {{typepkg}}MapType() | 
| + {%- if type|is_nullable_kind %} | 
| + ..nullable = true | 
| + {% endif %} | 
| + ..keyType = ({{writeMojomType(type.key_kind, typepkg, pkg, false)}}) | 
| + ..valueType = ({{writeMojomType(type.value_kind, typepkg, pkg, false)}})) | 
| +{%- endmacro -%} | 
| + | 
| +{%- macro writeMojomEnumType(type, typepkg, pkg) -%} | 
| + new {{typepkg}}MojomEnum() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = "{{type|name}}") | 
| + ..values = <{{typepkg}}EnumValue>[ | 
| + {%- for field in type.fields -%} | 
| + new {{typepkg}}EnumValue() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = "{{field|name}}") | 
| + ..enumTypeKey = {{writePackagedTypeID(type)}} | 
| + ..intValue = {{field.numeric_value}}, | 
| + {%- endfor -%} | 
| + ] | 
| +{%- endmacro -%} | 
| + | 
| + | 
| +{%- macro writeTypeTypeReference(type, typepkg, pkg) -%} | 
| + new {{typepkg}}Type() | 
| + ..typeReference = ({{writeTypeReference(type, typepkg, pkg)}}) | 
| +{%- endmacro -%} | 
| + | 
| +{%- macro writeTypeReference(type, typepkg, pkg) -%} | 
| + new {{typepkg}}TypeReference() | 
| + {%- if type|is_nullable_kind %} | 
| + ..nullable = true | 
| + {% endif %} | 
| + {% if type|is_interface_request_kind %}{# Interface request collapses to interface. #} | 
| + ..isInterfaceRequest = true | 
| + ..identifier = {{writePackagedTypeID(type.kind)}} | 
| + ..typeKey = {{writePackagedTypeID(type.kind)}} | 
| + {% else %} | 
| + ..identifier = {{writePackagedTypeID(type)}} | 
| + ..typeKey = {{writePackagedTypeID(type)}} | 
| + {% endif -%} | 
| +{%- endmacro -%} | 
| + | 
| +{%- macro writePackagedTypeID(type) -%} | 
| + '{{type|mojom_type_identifier}}' | 
| +{%- endmacro -%} | 
| + | 
| +{%- macro writeMojomStructType(type, typepkg, pkg) -%} | 
| + new {{typepkg}}MojomStruct() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = '{{type|name}}') | 
| + {%- if type|is_nullable_kind %} | 
| + ..nullable = true | 
| + {% endif %} | 
| + ..fields = <{{typepkg}}StructField>[ | 
| + {%- for field in type.fields %} | 
| + new {{typepkg}}StructField() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = '{{field|name|upper_camel}}') | 
| + ..type = ({{writeMojomType(field.kind, typepkg, pkg, false)}}), | 
| + {% endfor -%} | 
| + ] | 
| +{%- endmacro -%} | 
| + | 
| +{%- macro writeMojomUnionType(type, typepkg, pkg) -%} | 
| + new {{typepkg}}MojomUnion() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = '{{type|name}}') | 
| + {%- if type|is_nullable_kind %} | 
| + ..nullable = true | 
| + {% endif %} | 
| + ..fields = <{{typepkg}}UnionField>[ | 
| + {%- for field in type.fields %} | 
| + new {{typepkg}}UnionField() | 
| + ..declData = (new {{typepkg}}DeclarationData()..shortName = '{{field|name|upper_camel}}') | 
| + ..type = ({{writeMojomType(field.kind, typepkg, pkg, false)}}) | 
| + ..tag = {{field.ordinal}}, | 
| + {% endfor -%} | 
| + ] | 
| +{%- endmacro -%} |