{{#if additionalProperties}}
{{{additionalProperties.nativeType}}} getAdditionalProperties();

{{{additionalProperties.component.nativeType}}} getAdditionalProperty(java.lang.String name);

void put(java.lang.String name, {{{additionalProperties.component.nativeType}}} value);

void setAdditionalProperties({{{additionalProperties.nativeType}}} additionalProperties);

{{{additionalProperties.nativeType}}} additionalProperties();

{{{className name}}} additionalProperties({{{additionalProperties.nativeType}}} additionalProperties);

{{/if}}
{{#if properties}}
{{#each properties}}
{{>frag/propertyDocumentation}}
{{>frag/propertyStatusAnnotations}}
{{className ../name}} {{identifier name}}({{{nativeType}}} {{identifier name}});

{{#or (isObject) (isMap) (isArray)}}
/**
 * Returns the {{identifier name}}, or if it's {@code null} it first creates a new object,
 * sets the property to the new object, and then returns it.
 */
{{>frag/propertyStatusAnnotations}}
{{{nativeType}}} {{identifier name}}();

{{/or}}
{{>frag/propertyStatusAnnotations}}
{{>frag/pojoPropertyType}} {{getter .}}();

{{>frag/propertyStatusAnnotations}}
void {{setter .}}({{>frag/pojoPropertyType}} {{identifier name}});
{{#if (isArray)}}

{{>frag/propertyStatusAnnotations}}
{{className ../name}} add{{capitalize (singular (identifier name))}}({{{schema.component.nativeType}}} {{identifier (singular name)}});
{{#if (isObject schema.component)}}

{{>frag/propertyStatusAnnotations}}
{{{schema.component.nativeType}}} add{{capitalize (singular (identifier name))}}();
{{/if}}
{{/if}}

{{/each}}
{{/if}}
