Skip to content

Commit 608242b

Browse files
authored
[dart][dart-dio] Improve prefixing of inner enums with classname (#8685)
* [dart][dart-dio] Improve prefixing of inner enums with classname * prevent further name conflicts by correctly naming the enum, until now there could potentially occur conflicts e.g. 2x `MapTestInnerEnum` by renaming the `items` child property * correctly set `enumName` to match `datatypeWithEnum` * Unrelated test regeneration
1 parent 3c4015b commit 608242b

13 files changed

Lines changed: 98 additions & 92 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/DartClientCodegen.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -539,12 +539,18 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
539539
// are prefix with the classname of the containing class in the template.
540540
// Here the datatypeWithEnum template variable gets updated to match that scheme.
541541
// Also taking into account potential collection types e.g. List<JustSymbolEnum> -> List<EnumArraysJustSymbolEnum>
542+
final String enumName = model.classname + property.enumName;
542543
if (property.items != null) {
543-
// basically inner items e.g. map of maps etc.
544-
property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.items.datatypeWithEnum, model.classname + property.items.datatypeWithEnum));
544+
// inner items e.g. enums in collections, only works for one level
545+
// but same is the case for DefaultCodegen
546+
property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.items.datatypeWithEnum, enumName));
547+
property.items.setDatatypeWithEnum(enumName);
548+
property.items.setEnumName(enumName);
545549
} else {
546-
property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.enumName, model.classname + property.enumName));
550+
// plain enum property
551+
property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.enumName, enumName));
547552
}
553+
property.setEnumName(enumName);
548554
}
549555
}
550556

modules/openapi-generator/src/main/resources/dart-dio/class.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
2323
{{classname}}._();
2424

2525
static void _initializeBuilder({{{classname}}}Builder b) => b{{#vars}}{{#defaultValue}}
26-
..{{{name}}} = {{#isEnum}}{{^isContainer}}const {{{classname}}}{{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/vars}};
26+
..{{{name}}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/vars}};
2727

2828
factory {{classname}}([void updates({{classname}}Builder b)]) = _${{classname}};
2929
static Serializer<{{classname}}> get serializer => _${{#lambda.camelcase}}{{{classname}}}{{/lambda.camelcase}}Serializer;
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
class {{{classname}}}{{{enumName}}} extends EnumClass {
1+
class {{{enumName}}} extends EnumClass {
22
33
{{#allowableValues}}
44
{{#enumVars}}
55
{{#description}}
66
/// {{{description}}}
77
{{/description}}
88
@BuiltValueEnumConst({{#isInteger}}wireNumber: {{{value}}}{{/isInteger}}{{^isInteger}}wireName: r{{#lambda.escapeBuiltValueEnum}}{{{value}}}{{/lambda.escapeBuiltValueEnum}}{{/isInteger}})
9-
static const {{{classname}}}{{{enumName}}} {{name}} = _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}_{{name}};
9+
static const {{{enumName}}} {{name}} = _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}_{{name}};
1010
{{/enumVars}}
1111
{{/allowableValues}}
1212

13-
static Serializer<{{{classname}}}{{{enumName}}}> get serializer => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}Serializer;
13+
static Serializer<{{{enumName}}}> get serializer => _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}Serializer;
1414

15-
const {{{classname}}}{{{enumName}}}._(String name): super(name);
15+
const {{{enumName}}}._(String name): super(name);
1616

17-
static BuiltSet<{{{classname}}}{{{enumName}}}> get values => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}Values;
18-
static {{{classname}}}{{{enumName}}} valueOf(String name) => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}ValueOf(name);
17+
static BuiltSet<{{{enumName}}}> get values => _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}Values;
18+
static {{{enumName}}} valueOf(String name) => _${{#lambda.camelcase}}{{{enumName}}}{{/lambda.camelcase}}ValueOf(name);
1919
}

modules/openapi-generator/src/main/resources/dart2/class.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ class {{{classname}}} {
22
/// Returns a new [{{{classname}}}] instance.
33
{{{classname}}}({
44
{{#vars}}
5-
{{#required}}{{^defaultValue}}@required {{/defaultValue}}{{/required}}this.{{{name}}}{{^isNullable}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{classname}}}{{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/isNullable}},
5+
{{#required}}{{^defaultValue}}@required {{/defaultValue}}{{/required}}this.{{{name}}}{{^isNullable}}{{#defaultValue}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/isNullable}},
66
{{/vars}}
77
});
88

@@ -151,7 +151,7 @@ class {{{classname}}} {
151151
{{^complexType}}
152152
{{#isArray}}
153153
{{#isEnum}}
154-
{{{name}}}: {{{classname}}}{{{items.datatypeWithEnum}}}.listFromJson(json[r'{{{baseName}}}']),
154+
{{{name}}}: {{{items.datatypeWithEnum}}}.listFromJson(json[r'{{{baseName}}}']),
155155
{{/isEnum}}
156156
{{^isEnum}}
157157
{{{name}}}: json[r'{{{baseName}}}'] == null
@@ -176,7 +176,7 @@ class {{{classname}}} {
176176
{{{name}}}: json[r'{{{baseName}}}'],
177177
{{/isEnum}}
178178
{{#isEnum}}
179-
{{{name}}}: {{{classname}}}{{{enumName}}}.fromJson(json[r'{{{baseName}}}']),
179+
{{{name}}}: {{{enumName}}}.fromJson(json[r'{{{baseName}}}']),
180180
{{/isEnum}}
181181
{{/isNumber}}
182182
{{/isMap}}
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{#description}}/// {{{description}}}{{/description}}
2-
class {{{classname}}}{{{enumName}}} {
2+
class {{{enumName}}} {
33
/// Instantiate a new enum with the provided [value].
4-
const {{{classname}}}{{{enumName}}}._(this.value);
4+
const {{{enumName}}}._(this.value);
55

66
/// The underlying value of this enum member.
77
final {{{dataType}}} value;
@@ -13,52 +13,52 @@ class {{{classname}}}{{{enumName}}} {
1313

1414
{{#allowableValues}}
1515
{{#enumVars}}
16-
static const {{{name}}} = {{{classname}}}{{{enumName}}}._({{#isString}}r{{/isString}}{{{value}}});
16+
static const {{{name}}} = {{{enumName}}}._({{#isString}}r{{/isString}}{{{value}}});
1717
{{/enumVars}}
1818
{{/allowableValues}}
1919

20-
/// List of all possible values in this [enum][{{{classname}}}{{{enumName}}}].
21-
static const values = <{{{classname}}}{{{enumName}}}>[
20+
/// List of all possible values in this [enum][{{{enumName}}}].
21+
static const values = <{{{enumName}}}>[
2222
{{#allowableValues}}
2323
{{#enumVars}}
2424
{{{name}}},
2525
{{/enumVars}}
2626
{{/allowableValues}}
2727
];
2828

29-
static {{{classname}}}{{{enumName}}} fromJson(dynamic value) =>
30-
{{{classname}}}{{{enumName}}}TypeTransformer().decode(value);
29+
static {{{enumName}}} fromJson(dynamic value) =>
30+
{{{enumName}}}TypeTransformer().decode(value);
3131

32-
static List<{{{classname}}}{{{enumName}}}> listFromJson(List<dynamic> json, {bool emptyIsNull, bool growable,}) =>
32+
static List<{{{enumName}}}> listFromJson(List<dynamic> json, {bool emptyIsNull, bool growable,}) =>
3333
json == null || json.isEmpty
34-
? true == emptyIsNull ? null : <{{{classname}}}{{{enumName}}}>[]
34+
? true == emptyIsNull ? null : <{{{enumName}}}>[]
3535
: json
36-
.map((value) => {{{classname}}}{{{enumName}}}.fromJson(value))
36+
.map((value) => {{{enumName}}}.fromJson(value))
3737
.toList(growable: true == growable);
3838
}
3939

40-
/// Transformation class that can [encode] an instance of [{{{classname}}}{{{enumName}}}] to {{{dataType}}},
41-
/// and [decode] dynamic data back to [{{{classname}}}{{{enumName}}}].
42-
class {{{classname}}}{{{enumName}}}TypeTransformer {
43-
const {{{classname}}}{{{enumName}}}TypeTransformer._();
40+
/// Transformation class that can [encode] an instance of [{{{enumName}}}] to {{{dataType}}},
41+
/// and [decode] dynamic data back to [{{{enumName}}}].
42+
class {{{enumName}}}TypeTransformer {
43+
const {{{enumName}}}TypeTransformer._();
4444

45-
factory {{{classname}}}{{{enumName}}}TypeTransformer() => _instance ??= {{{classname}}}{{{enumName}}}TypeTransformer._();
45+
factory {{{enumName}}}TypeTransformer() => _instance ??= {{{enumName}}}TypeTransformer._();
4646

47-
{{{dataType}}} encode({{{classname}}}{{{enumName}}} data) => data.value;
47+
{{{dataType}}} encode({{{enumName}}} data) => data.value;
4848

49-
/// Decodes a [dynamic value][data] to a {{{classname}}}{{{enumName}}}.
49+
/// Decodes a [dynamic value][data] to a {{{enumName}}}.
5050
///
5151
/// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
5252
/// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
5353
/// cannot be decoded successfully, then an [UnimplementedError] is thrown.
5454
///
5555
/// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
5656
/// and users are still using an old app with the old code.
57-
{{{classname}}}{{{enumName}}} decode(dynamic data, {bool allowNull}) {
57+
{{{enumName}}} decode(dynamic data, {bool allowNull}) {
5858
switch (data) {
5959
{{#allowableValues}}
6060
{{#enumVars}}
61-
case {{#isString}}r{{/isString}}{{{value}}}: return {{{classname}}}{{{enumName}}}.{{{name}}};
61+
case {{#isString}}r{{/isString}}{{{value}}}: return {{{enumName}}}.{{{name}}};
6262
{{/enumVars}}
6363
{{/allowableValues}}
6464
default:
@@ -69,6 +69,6 @@ class {{{classname}}}{{{enumName}}}TypeTransformer {
6969
return null;
7070
}
7171

72-
/// Singleton [{{{classname}}}{{{enumName}}}TypeTransformer] instance.
73-
static {{{classname}}}{{{enumName}}}TypeTransformer _instance;
72+
/// Singleton [{{{enumName}}}TypeTransformer] instance.
73+
static {{{enumName}}}TypeTransformer _instance;
7474
}

samples/client/petstore/dart-dio/petstore_client_lib/test/api_response_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ void main() {
66
final instance = ApiResponse();
77

88
group(ApiResponse, () {
9-
// int code (default value: null)
9+
// int code
1010
test('to test the property `code`', () async {
1111
// TODO
1212
});
1313

14-
// String type (default value: null)
14+
// String type
1515
test('to test the property `type`', () async {
1616
// TODO
1717
});
1818

19-
// String message (default value: null)
19+
// String message
2020
test('to test the property `message`', () async {
2121
// TODO
2222
});

samples/client/petstore/dart-dio/petstore_client_lib/test/category_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ void main() {
66
final instance = Category();
77

88
group(Category, () {
9-
// int id (default value: null)
9+
// int id
1010
test('to test the property `id`', () async {
1111
// TODO
1212
});
1313

14-
// String name (default value: null)
14+
// String name
1515
test('to test the property `name`', () async {
1616
// TODO
1717
});

samples/client/petstore/dart-dio/petstore_client_lib/test/order_test.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,28 @@ void main() {
66
final instance = Order();
77

88
group(Order, () {
9-
// int id (default value: null)
9+
// int id
1010
test('to test the property `id`', () async {
1111
// TODO
1212
});
1313

14-
// int petId (default value: null)
14+
// int petId
1515
test('to test the property `petId`', () async {
1616
// TODO
1717
});
1818

19-
// int quantity (default value: null)
19+
// int quantity
2020
test('to test the property `quantity`', () async {
2121
// TODO
2222
});
2323

24-
// DateTime shipDate (default value: null)
24+
// DateTime shipDate
2525
test('to test the property `shipDate`', () async {
2626
// TODO
2727
});
2828

2929
// Order Status
30-
// String status (default value: null)
30+
// String status
3131
test('to test the property `status`', () async {
3232
// TODO
3333
});

samples/client/petstore/dart-dio/petstore_client_lib/test/pet_test.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,33 @@ void main() {
66
final instance = Pet();
77

88
group(Pet, () {
9-
// int id (default value: null)
9+
// int id
1010
test('to test the property `id`', () async {
1111
// TODO
1212
});
1313

14-
// Category category (default value: null)
14+
// Category category
1515
test('to test the property `category`', () async {
1616
// TODO
1717
});
1818

19-
// String name (default value: null)
19+
// String name
2020
test('to test the property `name`', () async {
2121
// TODO
2222
});
2323

24-
// BuiltList<String> photoUrls (default value: const [])
24+
// BuiltList<String> photoUrls
2525
test('to test the property `photoUrls`', () async {
2626
// TODO
2727
});
2828

29-
// BuiltList<Tag> tags (default value: const [])
29+
// BuiltList<Tag> tags
3030
test('to test the property `tags`', () async {
3131
// TODO
3232
});
3333

3434
// pet status in the store
35-
// String status (default value: null)
35+
// String status
3636
test('to test the property `status`', () async {
3737
// TODO
3838
});

samples/client/petstore/dart-dio/petstore_client_lib/test/tag_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ void main() {
66
final instance = Tag();
77

88
group(Tag, () {
9-
// int id (default value: null)
9+
// int id
1010
test('to test the property `id`', () async {
1111
// TODO
1212
});
1313

14-
// String name (default value: null)
14+
// String name
1515
test('to test the property `name`', () async {
1616
// TODO
1717
});

0 commit comments

Comments
 (0)