Skip to content

Commit 7679550

Browse files
fix: update JavaRenderer and remove unnecessary code from presets (#103)
1 parent 0e21f49 commit 7679550

File tree

12 files changed

+123
-91
lines changed

12 files changed

+123
-91
lines changed

src/generators/java/JavaRenderer.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ export abstract class JavaRenderer extends AbstractRenderer<JavaOptions> {
2626
if (model.$ref !== undefined) {
2727
return model.$ref;
2828
}
29-
return this.toClassType(this.toJavaType(model.type, model));
29+
const format = model.getFromSchema('format');
30+
return this.toClassType(this.toJavaType(format || model.type, model));
3031
}
3132

3233
toJavaType(type: string | undefined, model: CommonModel): string {
@@ -83,16 +84,28 @@ export abstract class JavaRenderer extends AbstractRenderer<JavaOptions> {
8384
}
8485
}
8586

86-
renderAnnotation(annotation: any): string;
87-
renderAnnotation(annotations: Array<any>): string;
88-
renderAnnotation(annotation: Array<any> | any): string {
89-
if (Array.isArray(annotation)) {
90-
return annotation.map(ann => this.renderAnnotation(ann)).join(' ');
91-
}
92-
const name = `@${FormatHelpers.upperFirst(annotation.name)}`;
93-
if (annotation.body) {
94-
return `${name}(${annotation.body})`;
87+
renderComments(lines: string | string[]): string {
88+
lines = FormatHelpers.breakLines(lines);
89+
return `/**
90+
${lines.map(line => ` * ${line}`).join('\n')}
91+
*/`;
92+
}
93+
94+
renderAnnotation(annotationName: string, value?: any | Record<string, any>): string {
95+
const name = `@${FormatHelpers.upperFirst(annotationName)}`;
96+
let values = undefined;
97+
if (value !== undefined) {
98+
if (typeof value === 'object') {
99+
values = Object.entries(value || {}).map(([paramName, value]) => {
100+
if (paramName && value !== undefined) {
101+
return `${paramName}=${value}`;
102+
}
103+
return value;
104+
}).filter(v => v !== undefined).join(', ');
105+
} else {
106+
values = `${value}`;
107+
}
95108
}
96-
return name;
109+
return values !== undefined ? `${name}(${values})` : name;
97110
}
98111
}

src/generators/java/renderers/ClassRenderer.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ export class ClassRenderer extends JavaRenderer {
1717
await this.runAdditionalContentPreset(),
1818
];
1919

20-
return `public class ${this.model.$id} {
20+
const formattedName = this.model.$id && FormatHelpers.toPascalCase(this.model.$id);
21+
return `public class ${formattedName} {
2122
${this.indent(this.renderBlock(content, 2))}
2223
}`;
2324
}
@@ -31,36 +32,36 @@ ${this.indent(this.renderBlock(content, 2))}
3132
const content: string[] = [];
3233

3334
for (const [propertyName, property] of Object.entries(properties)) {
34-
const rendererProperty = await this.runPropertyPreset(propertyName, property, this.model);
35+
const rendererProperty = await this.runPropertyPreset(propertyName, property);
3536
content.push(rendererProperty);
3637
}
3738

3839
return this.renderBlock(content);
3940
}
4041

41-
async runPropertyPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
42-
return this.runPreset('property', { propertyName, property, parentModel });
42+
async runPropertyPreset(propertyName: string, property: CommonModel): Promise<string> {
43+
return this.runPreset('property', { propertyName, property });
4344
}
4445

4546
async renderAccessors(): Promise<string> {
4647
const properties = this.model.properties || {};
4748
const content: string[] = [];
4849

4950
for (const [propertyName, property] of Object.entries(properties)) {
50-
const getter = await this.runGetterPreset(propertyName, property, this.model);
51-
const setter = await this.runSetterPreset(propertyName, property, this.model);
51+
const getter = await this.runGetterPreset(propertyName, property);
52+
const setter = await this.runSetterPreset(propertyName, property);
5253
content.push(this.renderBlock([getter, setter]));
5354
}
5455

5556
return this.renderBlock(content, 2);
5657
}
5758

58-
async runGetterPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
59-
return this.runPreset('getter', { propertyName, property, parentModel });
59+
async runGetterPreset(propertyName: string, property: CommonModel): Promise<string> {
60+
return this.runPreset('getter', { propertyName, property });
6061
}
6162

62-
async runSetterPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
63-
return this.runPreset('setter', { propertyName, property, parentModel });
63+
async runSetterPreset(propertyName: string, property: CommonModel): Promise<string> {
64+
return this.runPreset('setter', { propertyName, property });
6465
}
6566
}
6667

src/generators/java/renderers/EnumRenderer.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { JavaRenderer } from '../JavaRenderer';
22

3-
import { CommonModel, EnumPreset } from '../../../models';
3+
import { EnumPreset } from '../../../models';
44
import { FormatHelpers } from '../../../helpers';
55

66
/**
@@ -15,7 +15,8 @@ export class EnumRenderer extends JavaRenderer {
1515
await this.runAdditionalContentPreset(),
1616
];
1717

18-
return `public enum ${this.model.$id} {
18+
const formattedName = this.model.$id && FormatHelpers.toPascalCase(this.model.$id);
19+
return `public enum ${formattedName} {
1920
${this.indent(this.renderBlock(content, 2))}
2021
}`;
2122
}
@@ -25,7 +26,7 @@ ${this.indent(this.renderBlock(content, 2))}
2526
const items: string[] = [];
2627

2728
for (const value of enums) {
28-
const renderedItem = await this.runItemPreset(value, this.model);
29+
const renderedItem = await this.runItemPreset(value);
2930
items.push(renderedItem);
3031
}
3132

@@ -55,8 +56,8 @@ ${this.indent(this.renderBlock(content, 2))}
5556
}
5657
}
5758

58-
async runItemPreset(item: any, parentModel: CommonModel): Promise<string> {
59-
return this.runPreset('item', { item, parentModel });
59+
async runItemPreset(item: any): Promise<string> {
60+
return this.runPreset('item', { item });
6061
}
6162
}
6263

src/generators/javascript/renderers/ClassRenderer.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ export class ClassRenderer extends JavaScriptRenderer {
1717
await this.runAdditionalContentPreset(),
1818
];
1919

20-
return `class ${this.model.$id} {
20+
const formattedName = this.model.$id && FormatHelpers.toPascalCase(this.model.$id);
21+
return `class ${formattedName} {
2122
${this.indent(this.renderBlock(content, 2))}
2223
}`;
2324
}
@@ -31,20 +32,20 @@ ${this.indent(this.renderBlock(content, 2))}
3132
const content: string[] = [];
3233

3334
for (const [propertyName, property] of Object.entries(properties)) {
34-
const getter = await this.runGetterPreset(propertyName, property, this.model);
35-
const setter = await this.runSetterPreset(propertyName, property, this.model);
35+
const getter = await this.runGetterPreset(propertyName, property);
36+
const setter = await this.runSetterPreset(propertyName, property);
3637
content.push(this.renderBlock([getter, setter]));
3738
}
3839

3940
return this.renderBlock(content, 2);
4041
}
4142

42-
async runGetterPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
43-
return this.runPreset('getter', { propertyName, property, parentModel });
43+
async runGetterPreset(propertyName: string, property: CommonModel): Promise<string> {
44+
return this.runPreset('getter', { propertyName, property });
4445
}
4546

46-
async runSetterPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
47-
return this.runPreset('setter', { propertyName, property, parentModel });
47+
async runSetterPreset(propertyName: string, property: CommonModel): Promise<string> {
48+
return this.runPreset('setter', { propertyName, property });
4849
}
4950
}
5051

src/generators/typescript/TypeScriptRenderer.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export abstract class TypeScriptRenderer extends AbstractRenderer<TypeScriptOpti
3636
if (type === undefined) {
3737
return 'any';
3838
}
39-
switch (type) {
39+
switch (type) {
4040
case 'string':
4141
return 'string';
4242
case 'integer':
@@ -54,12 +54,22 @@ export abstract class TypeScriptRenderer extends AbstractRenderer<TypeScriptOpti
5454
}
5555
}
5656

57-
renderTypeSignature(type: CommonModel | CommonModel[], isRequired = true): string {
57+
renderTypeSignature(type: CommonModel | CommonModel[], {
58+
isRequired = true,
59+
orUndefined = false,
60+
}: {
61+
isRequired?: boolean;
62+
orUndefined?: boolean;
63+
} = {}): string {
5864
if (this.options.renderTypes === false) {
5965
return '';
6066
}
67+
6168
const annotation = isRequired ? ':' : '?:';
62-
return `${annotation} ${this.renderType(type)}`;
69+
let t = this.renderType(type);
70+
t = orUndefined ? `${t} | undefined` : t;
71+
72+
return `${annotation} ${t}`;
6373
}
6474

6575
renderComments(lines: string | string[]): string {
@@ -74,20 +84,20 @@ ${lines.map(line => ` * ${line}`).join('\n')}
7484
const content: string[] = [];
7585

7686
for (const [propertyName, property] of Object.entries(properties)) {
77-
const rendererProperty = await this.runPropertyPreset(propertyName, property, this.model);
87+
const rendererProperty = await this.runPropertyPreset(propertyName, property);
7888
content.push(rendererProperty);
7989
}
8090

8191
return this.renderBlock(content);
8292
}
8393

84-
renderProperty(propertyName: string, property: CommonModel, parentModel: CommonModel): string {
94+
renderProperty(propertyName: string, property: CommonModel): string {
8595
const name = FormatHelpers.toCamelCase(propertyName);
86-
const signature = this.renderTypeSignature(property, parentModel.isRequired(propertyName));
96+
const signature = this.renderTypeSignature(property, { isRequired: this.model.isRequired(propertyName) });
8797
return `${name}${signature};`;
8898
}
8999

90-
async runPropertyPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
91-
return this.runPreset('property', { propertyName, property, parentModel });
100+
async runPropertyPreset(propertyName: string, property: CommonModel): Promise<string> {
101+
return this.runPreset('property', { propertyName, property });
92102
}
93103
}

src/generators/typescript/renderers/ClassRenderer.ts

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ export class ClassRenderer extends TypeScriptRenderer {
1717
await this.runAdditionalContentPreset(),
1818
];
1919

20-
return `class ${this.model.$id} {
20+
const formattedName = this.model.$id && FormatHelpers.toPascalCase(this.model.$id);
21+
return `class ${formattedName} {
2122
${this.indent(this.renderBlock(content, 2))}
2223
}`;
2324
}
@@ -31,20 +32,20 @@ ${this.indent(this.renderBlock(content, 2))}
3132
const content: string[] = [];
3233

3334
for (const [propertyName, property] of Object.entries(properties)) {
34-
const getter = await this.runGetterPreset(propertyName, property, this.model);
35-
const setter = await this.runSetterPreset(propertyName, property, this.model);
35+
const getter = await this.runGetterPreset(propertyName, property);
36+
const setter = await this.runSetterPreset(propertyName, property);
3637
content.push(this.renderBlock([getter, setter]));
3738
}
3839

3940
return this.renderBlock(content, 2);
4041
}
4142

42-
runGetterPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
43-
return this.runPreset('getter', { propertyName, property, parentModel });
43+
runGetterPreset(propertyName: string, property: CommonModel): Promise<string> {
44+
return this.runPreset('getter', { propertyName, property });
4445
}
4546

46-
runSetterPreset(propertyName: string, property: CommonModel, parentModel: CommonModel): Promise<string> {
47-
return this.runPreset('setter', { propertyName, property, parentModel });
47+
runSetterPreset(propertyName: string, property: CommonModel): Promise<string> {
48+
return this.runPreset('setter', { propertyName, property });
4849
}
4950
}
5051

@@ -60,7 +61,7 @@ export const TS_DEFAULT_CLASS_PRESET: ClassPreset<ClassRenderer> = {
6061
});
6162
const ctorProperties: string[] = [];
6263
for (const [propertyName, property] of Object.entries(properties)) {
63-
const rendererProperty = renderer.renderProperty(propertyName, property, model).replace(';', ',');
64+
const rendererProperty = renderer.renderProperty(propertyName, property).replace(';', ',');
6465
ctorProperties.push(rendererProperty);
6566
}
6667

@@ -70,18 +71,20 @@ ${renderer.indent(renderer.renderBlock(ctorProperties))}
7071
${renderer.indent(renderer.renderBlock(assigments))}
7172
}`;
7273
},
73-
property({ renderer, propertyName, property, parentModel }) {
74-
return `private _${renderer.renderProperty(propertyName, property, parentModel)}`;
74+
property({ renderer, propertyName, property }) {
75+
return `private _${renderer.renderProperty(propertyName, property)}`;
7576
},
76-
getter({ renderer, propertyName, property }) {
77-
propertyName = FormatHelpers.toCamelCase(propertyName);
78-
const signature = renderer.renderTypeSignature(property);
79-
return `get ${propertyName}()${signature} { return this._${propertyName}; }`;
77+
getter({ renderer, model, propertyName, property }) {
78+
const isRequired = model.isRequired(propertyName);
79+
const formattedName = FormatHelpers.toCamelCase(propertyName);
80+
const signature = renderer.renderTypeSignature(property, { orUndefined: !isRequired });
81+
return `get ${formattedName}()${signature} { return this._${formattedName}; }`;
8082
},
81-
setter({ renderer, propertyName, property }) {
82-
propertyName = FormatHelpers.toCamelCase(propertyName);
83-
const signature = renderer.renderTypeSignature(property);
84-
const arg = `${propertyName}${signature}`;
85-
return `set ${propertyName}(${arg}) { this._${propertyName} = ${propertyName}; }`;
83+
setter({ renderer, model, propertyName, property }) {
84+
const isRequired = model.isRequired(propertyName);
85+
const formattedName = FormatHelpers.toCamelCase(propertyName);
86+
const signature = renderer.renderTypeSignature(property, { orUndefined: !isRequired });
87+
const arg = `${formattedName}${signature}`;
88+
return `set ${formattedName}(${arg}) { this._${formattedName} = ${formattedName}; }`;
8689
},
8790
};

src/generators/typescript/renderers/EnumRenderer.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { TypeScriptRenderer } from '../TypeScriptRenderer';
22

3-
import { CommonModel, EnumPreset } from '../../../models';
3+
import { EnumPreset } from '../../../models';
44
import { FormatHelpers } from '../../../helpers';
55

66
/**
@@ -15,7 +15,8 @@ export class EnumRenderer extends TypeScriptRenderer {
1515
await this.runAdditionalContentPreset(),
1616
];
1717

18-
return `enum ${this.model.$id} {
18+
const formattedName = this.model.$id && FormatHelpers.toPascalCase(this.model.$id);
19+
return `enum ${formattedName} {
1920
${this.indent(this.renderBlock(content, 2))}
2021
}`;
2122
}
@@ -25,15 +26,15 @@ ${this.indent(this.renderBlock(content, 2))}
2526
const items: string[] = [];
2627

2728
for (const item of enums) {
28-
const renderedItem = await this.runItemPreset(item, this.model);
29+
const renderedItem = await this.runItemPreset(item);
2930
items.push(renderedItem);
3031
}
3132

3233
return this.renderBlock(items);
3334
}
3435

35-
runItemPreset(item: any, parentModel: CommonModel): Promise<string> {
36-
return this.runPreset('item', { item, parentModel });
36+
runItemPreset(item: any): Promise<string> {
37+
return this.runPreset('item', { item });
3738
}
3839
}
3940

src/generators/typescript/renderers/InterfaceRenderer.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { TypeScriptRenderer } from '../TypeScriptRenderer';
22

33
import { InterfacePreset } from '../../../models';
4+
import { FormatHelpers } from '../../../helpers';
45

56
/**
67
* Renderer for TypeScript's `interface` type
@@ -14,7 +15,8 @@ export class InterfaceRenderer extends TypeScriptRenderer {
1415
await this.runAdditionalContentPreset(),
1516
];
1617

17-
return `interface ${this.model.$id} {
18+
const formattedName = this.model.$id && FormatHelpers.toPascalCase(this.model.$id);
19+
return `interface ${formattedName} {
1820
${this.indent(this.renderBlock(content, 2))}
1921
}`;
2022
}
@@ -24,7 +26,7 @@ export const TS_DEFAULT_INTERFACE_PRESET: InterfacePreset<InterfaceRenderer> = {
2426
async self({ renderer }) {
2527
return `export ${await renderer.defaultSelf()}`;
2628
},
27-
property({ renderer, propertyName, property, parentModel }) {
28-
return renderer.renderProperty(propertyName, property, parentModel);
29+
property({ renderer, propertyName, property }) {
30+
return renderer.renderProperty(propertyName, property);
2931
},
3032
};

0 commit comments

Comments
 (0)