From 84044c3271569ab485942ca0fecda521f5cd4d69 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Wed, 28 Jun 2017 04:40:54 +0300 Subject: [PATCH] java getters/setters generation added --- Java/Class.java.twig | 2 + Java/blocks/class/fields-getters-setters.twig | 22 +++++++ Java/blocks/class/fields-initialization.twig | 9 +-- Java/blocks/class/init-parameters-fields.twig | 2 +- Java/utils.twig | 62 +++++++++++++++++++ 5 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 Java/blocks/class/fields-getters-setters.twig diff --git a/Java/Class.java.twig b/Java/Class.java.twig index fd29182..6f463fa 100644 --- a/Java/Class.java.twig +++ b/Java/Class.java.twig @@ -23,4 +23,6 @@ public class {% include 'blocks/class/classtype.twig' with { type: type } %} ext {%- include 'blocks/class/fields-initialization.twig' with { fields: fields } %} } {% endif %} +{%- include 'blocks/class/fields-getters-setters.twig' with { fields: fields } %} + } \ No newline at end of file diff --git a/Java/blocks/class/fields-getters-setters.twig b/Java/blocks/class/fields-getters-setters.twig new file mode 100644 index 0000000..bbdb748 --- /dev/null +++ b/Java/blocks/class/fields-getters-setters.twig @@ -0,0 +1,22 @@ +{%- import '../../utils.twig' as utils -%} + +{%- if fields is not empty -%} +{%- for field in fields %} + /** + * {{ field.description }} + */ + {{ utils.writeNullCheckAnnotation(field.type.type.baseTypeName, field.nullable, field.optional) }} + //TODO: getter with is**** + public {{ utils.formatValueType(field.type.type, field.nullable, field.optional) }} get{{ utils.capitalize(field.name) }}() { + {{ utils.formatValueGetter(field.name, field.type.type, field.nullable, field.optional) }} + } + + /** + * {{ field.description }} + */ + //TODO: setter with is**** + public void set{{ utils.capitalize(field.name) }}({{ utils.writeNullCheckAnnotation(field.type.type.baseTypeName, field.nullable, field.optional) }} final {{ utils.formatValueType(field.type.type, field.nullable, field.optional) }} {{ field.name }}) { + {{ utils.formatValueSetter(field.name, field.type.type.baseTypeName, fiel.nullable, field.optional ) }} + } +{% endfor -%} +{%- endif -%} \ No newline at end of file diff --git a/Java/blocks/class/fields-initialization.twig b/Java/blocks/class/fields-initialization.twig index 3e81e18..1414f84 100644 --- a/Java/blocks/class/fields-initialization.twig +++ b/Java/blocks/class/fields-initialization.twig @@ -1,11 +1,4 @@ {%- import '../../utils.twig' as utils -%} {%- for field in fields %} -{%- if field.type.type.baseTypeName == "List" %} - this.{{ field.name }} = new ArrayList<>({{ field.name }}); -{%- elseif field.type.type.baseTypeName == "Map" %} - this.{{ field.name }} = new HashMap<>({{ field.name }}); -{%- else %} -//TODO NULLABLE COLLECTIONS - this.{{ field.name }} = {{ field.name }}; -{%- endif -%} + {{ utils.formatValueSetter(field.name, field.type.type.baseTypeName, field.nullable, field.optional ) }} {%- endfor -%} \ No newline at end of file diff --git a/Java/blocks/class/init-parameters-fields.twig b/Java/blocks/class/init-parameters-fields.twig index bdab74a..c65bd3c 100644 --- a/Java/blocks/class/init-parameters-fields.twig +++ b/Java/blocks/class/init-parameters-fields.twig @@ -2,6 +2,6 @@ {%- if fields is not empty -%} {%- for field in fields -%} - {{ utils.writeNullCheckAnnotation(field.type.type.baseTypeName) }} final {{ utils.formatValueType(field.type.type, field.nullable, field.optional) }} {{ field.name }} {%- if not (loop.last) %}, {% endif %} + {{ utils.writeNullCheckAnnotation(field.type.type.baseTypeName, field.nullable, field.optional) }} final {{ utils.formatValueType(field.type.type, field.nullable, field.optional) }} {{ field.name }} {%- if not (loop.last) %}, {% endif %} {%- endfor -%} {%- endif -%} \ No newline at end of file diff --git a/Java/utils.twig b/Java/utils.twig index 498b37a..7f2bf5d 100644 --- a/Java/utils.twig +++ b/Java/utils.twig @@ -2,6 +2,10 @@ {{- concat(slice(text, 0, 1) | lower, slice(text, 1, text | length)) -}} {% endmacro %} +{% macro capitalize(text) %} +{{- concat(slice(text, 0, 1) | upper, slice(text, 1, text | length)) -}} +{% endmacro %} + {% macro enumType(valuesTypes) %} {%- if valuesTypes == "STRING" -%} String @@ -63,6 +67,64 @@ JsonOptional<{{ self.formatNonOptionalValueType(valueType, false) }}> {{- self.formatValueType(valueType, true, false) -}} {% endmacro %} +{% macro formatNullableValueSetter(fieldName, valueType, nullable) %} +{%- if valueType == "List" -%} +{%- if nullable -%} +{{ fieldName }} != null ? new ArrayList<>({{ fieldName }}) : null +{%- else -%} +new ArrayList<>({{ fieldName }}) +{%- endif -%} +{%- elseif valueType == "Map" -%} +{%- if nullable -%} +{{ fieldName }} != null ? new HashMap<>({{ fieldName }}) : null +{%- else -%} +new HashMap<>({{ fieldName }}) +{%- endif -%} +{%- else -%} +{{ fieldName }} +{%- endif -%} +{% endmacro %} + +{% macro formatValueSetter(fieldName, valueType, nullable, optional) %} +{% import _self as self %} +{%- if optional -%} +this.{{ fieldName }} = new JsonOptional({{- self.formatNullableValueSetter(fieldName, valueType, nullable) -}}); +{%- elseif nullable -%} +this.{{ fieldName }} = self.formatNullableValueSetter(fieldName, valueType, nullable) -}}; +{%- else -%} +this.{{ fieldName }} = {{ fieldName }}; +{%- endif -%} +{% endmacro %} + +{% macro formatNullableValueGetter(fieldName, valueType, nullable) %} +{%- if valueType == "List" -%} +{%- if nullable -%} +{{ fieldName }} != null ? Collections.unmodifiableList({{ fieldName }}) : null +{%- else -%} +Collections.unmodifiableList({{ fieldName }}) +{%- endif -%} +{%- elseif valueType == "Map" -%} +{%- if nullable -%} +{{ fieldName }} != null ? Collections.unmodifiableMap({{ fieldName }}) : null +{%- else -%} +Collections.unmodifiableMap({{ fieldName }}) +{%- endif -%} +{%- else -%} +{{ fieldName }} +{%- endif -%} +{% endmacro %} + +{% macro formatValueGetter(fieldName, valueType, nullable, optional) %} +{% import _self as self %} +{%- if optional -%} +return new JsonOptional({{- self.formatNullableValueGetter(fieldName, valueType, nullable) -}}); +{%- elseif nullable -%} +return self.formatNullableValueGetter(fieldName, valueType, nullable) -}}; +{%- else -%} +return this.{{ fieldName }}; +{%- endif -%} +{% endmacro %} + {% macro escapeIfNeeded(expr) %} {%- if expr == "default" -%} `{{ expr }}`