Skip to content

Commit 4e7bba6

Browse files
authored
[dart] Fix compile error in inline enum properties with "default" values(#22120) (#22165)
1 parent 88bba25 commit 4e7bba6

38 files changed

+765
-303
lines changed

modules/openapi-generator/src/main/resources/dart/libraries/dio/serialization/built_value/class_members.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
@BuiltValueHook(initializeBuilder: true)
3434
static void _defaults({{{classname}}}Builder b) => b{{#vendorExtensions.x-parent-discriminator}}..{{propertyName}}=b.discriminatorValue{{/vendorExtensions.x-parent-discriminator}}{{#vendorExtensions.x-self-and-ancestor-only-props}}{{#defaultValue}}
35-
..{{{name}}} = {{#isEnum}}{{^isContainer}}{{{defaultValue}}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/defaultValue}}{{/vendorExtensions.x-self-and-ancestor-only-props}};
35+
..{{{name}}} = {{#isEnum}}{{^isContainer}}{{#enumName}}{{enumName}}.valueOf({{{defaultValue}}}){{/enumName}}{{^enumName}}{{{defaultValue}}}{{/enumName}}{{/isContainer}}{{/isEnum}}{{^isEnum}}{{{defaultValue}}}{{/isEnum}}{{/defaultValue}}{{/vendorExtensions.x-self-and-ancestor-only-props}};
3636

3737
{{/vendorExtensions.x-is-parent}} @BuiltValueSerializer(custom: true)
3838
static Serializer<{{classname}}> get serializer => _${{classname}}Serializer();

modules/openapi-generator/src/test/resources/3_0/dart/petstore-with-fake-endpoints-models-for-testing.yaml

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2079,22 +2079,29 @@ components:
20792079
TestEnum:
20802080
type: string
20812081
enum:
2082-
- ""
2083-
- "1"
2084-
- "2"
2082+
- ''
2083+
- 'value_one'
2084+
- 'value_two'
20852085
title: TestEnum
2086-
TestItem:
2086+
ObjectWithEnum:
20872087
type: object
2088-
required:
2089-
- test
20902088
properties:
2091-
test:
2092-
type: integer
2093-
title: test
2094-
testEmum:
2095-
$ref: '#/components/schemas/TestEnum'
2096-
default: ""
2097-
title: TestItem
2089+
attribute:
2090+
allOf:
2091+
- $ref: '#/components/schemas/TestEnum'
2092+
default: ''
2093+
title: ObjectWithEnum
2094+
ObjectWithInlineEnumDefaultValue:
2095+
type: object
2096+
properties:
2097+
attribute:
2098+
description: 'Object one attribute enum with default value'
2099+
type: 'string'
2100+
enum: [
2101+
'value_one',
2102+
'value_two'
2103+
]
2104+
default: 'value_one'
20982105
ObjectWithInlineEnum:
20992106
type: object
21002107
properties:

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/.openapi-generator/FILES

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ doc/NumberOnly.md
4343
doc/ObjectThatReferencesObjectsWithDuplicateInlineEnums.md
4444
doc/ObjectWithDeprecatedFields.md
4545
doc/ObjectWithDuplicateInlineEnum.md
46+
doc/ObjectWithEnum.md
4647
doc/ObjectWithInlineEnum.md
48+
doc/ObjectWithInlineEnumDefaultValue.md
4749
doc/Order.md
4850
doc/OuterComposite.md
4951
doc/OuterEnum.md
@@ -61,7 +63,6 @@ doc/StoreApi.md
6163
doc/Tag.md
6264
doc/TestEnum.md
6365
doc/TestInlineFreeformAdditionalPropertiesRequest.md
64-
doc/TestItem.md
6566
doc/User.md
6667
doc/UserApi.md
6768
lib/openapi.dart
@@ -116,7 +117,9 @@ lib/src/model/number_only.dart
116117
lib/src/model/object_that_references_objects_with_duplicate_inline_enums.dart
117118
lib/src/model/object_with_deprecated_fields.dart
118119
lib/src/model/object_with_duplicate_inline_enum.dart
120+
lib/src/model/object_with_enum.dart
119121
lib/src/model/object_with_inline_enum.dart
122+
lib/src/model/object_with_inline_enum_default_value.dart
120123
lib/src/model/order.dart
121124
lib/src/model/outer_composite.dart
122125
lib/src/model/outer_enum.dart
@@ -132,6 +135,5 @@ lib/src/model/special_model_name.dart
132135
lib/src/model/tag.dart
133136
lib/src/model/test_enum.dart
134137
lib/src/model/test_inline_freeform_additional_properties_request.dart
135-
lib/src/model/test_item.dart
136138
lib/src/model/user.dart
137139
pubspec.yaml

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,9 @@ Class | Method | HTTP request | Description
154154
- [ObjectThatReferencesObjectsWithDuplicateInlineEnums](doc/ObjectThatReferencesObjectsWithDuplicateInlineEnums.md)
155155
- [ObjectWithDeprecatedFields](doc/ObjectWithDeprecatedFields.md)
156156
- [ObjectWithDuplicateInlineEnum](doc/ObjectWithDuplicateInlineEnum.md)
157+
- [ObjectWithEnum](doc/ObjectWithEnum.md)
157158
- [ObjectWithInlineEnum](doc/ObjectWithInlineEnum.md)
159+
- [ObjectWithInlineEnumDefaultValue](doc/ObjectWithInlineEnumDefaultValue.md)
158160
- [Order](doc/Order.md)
159161
- [OuterComposite](doc/OuterComposite.md)
160162
- [OuterEnum](doc/OuterEnum.md)
@@ -170,7 +172,6 @@ Class | Method | HTTP request | Description
170172
- [Tag](doc/Tag.md)
171173
- [TestEnum](doc/TestEnum.md)
172174
- [TestInlineFreeformAdditionalPropertiesRequest](doc/TestInlineFreeformAdditionalPropertiesRequest.md)
173-
- [TestItem](doc/TestItem.md)
174175
- [User](doc/User.md)
175176

176177

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# openapi.model.TestItem
1+
# openapi.model.ObjectWithEnum
22

33
## Load the model package
44
```dart
@@ -8,8 +8,7 @@ import 'package:openapi/api.dart';
88
## Properties
99
Name | Type | Description | Notes
1010
------------ | ------------- | ------------- | -------------
11-
**test** | **int** | |
12-
**testEmum** | [**TestEnum**](TestEnum.md) | | [optional]
11+
**attribute** | [**TestEnum**](TestEnum.md) | | [optional] [default to TestEnum.empty]
1312

1413
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
1514

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# openapi.model.ObjectWithInlineEnumDefaultValue
2+
3+
## Load the model package
4+
```dart
5+
import 'package:openapi/api.dart';
6+
```
7+
8+
## Properties
9+
Name | Type | Description | Notes
10+
------------ | ------------- | ------------- | -------------
11+
**attribute** | **String** | Object one attribute enum with default value | [optional] [default to 'value_one']
12+
13+
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
14+
15+

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/openapi.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ export 'package:openapi/src/model/number_only.dart';
5454
export 'package:openapi/src/model/object_that_references_objects_with_duplicate_inline_enums.dart';
5555
export 'package:openapi/src/model/object_with_deprecated_fields.dart';
5656
export 'package:openapi/src/model/object_with_duplicate_inline_enum.dart';
57+
export 'package:openapi/src/model/object_with_enum.dart';
5758
export 'package:openapi/src/model/object_with_inline_enum.dart';
59+
export 'package:openapi/src/model/object_with_inline_enum_default_value.dart';
5860
export 'package:openapi/src/model/order.dart';
5961
export 'package:openapi/src/model/outer_composite.dart';
6062
export 'package:openapi/src/model/outer_enum.dart';
@@ -70,6 +72,5 @@ export 'package:openapi/src/model/special_model_name.dart';
7072
export 'package:openapi/src/model/tag.dart';
7173
export 'package:openapi/src/model/test_enum.dart';
7274
export 'package:openapi/src/model/test_inline_freeform_additional_properties_request.dart';
73-
export 'package:openapi/src/model/test_item.dart';
7475
export 'package:openapi/src/model/user.dart';
7576

samples/openapi3/client/petstore/dart-dio/petstore_client_lib_fake-json_serializable/lib/src/deserialize.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ import 'package:openapi/src/model/number_only.dart';
3434
import 'package:openapi/src/model/object_that_references_objects_with_duplicate_inline_enums.dart';
3535
import 'package:openapi/src/model/object_with_deprecated_fields.dart';
3636
import 'package:openapi/src/model/object_with_duplicate_inline_enum.dart';
37+
import 'package:openapi/src/model/object_with_enum.dart';
3738
import 'package:openapi/src/model/object_with_inline_enum.dart';
39+
import 'package:openapi/src/model/object_with_inline_enum_default_value.dart';
3840
import 'package:openapi/src/model/order.dart';
3941
import 'package:openapi/src/model/outer_composite.dart';
4042
import 'package:openapi/src/model/outer_object_with_enum_property.dart';
@@ -44,7 +46,6 @@ import 'package:openapi/src/model/read_only_first.dart';
4446
import 'package:openapi/src/model/special_model_name.dart';
4547
import 'package:openapi/src/model/tag.dart';
4648
import 'package:openapi/src/model/test_inline_freeform_additional_properties_request.dart';
47-
import 'package:openapi/src/model/test_item.dart';
4849
import 'package:openapi/src/model/user.dart';
4950

5051
final _regList = RegExp(r'^List<(.*)>$');
@@ -140,8 +141,12 @@ final _regMap = RegExp(r'^Map<String,(.*)>$');
140141
return ObjectWithDeprecatedFields.fromJson(value as Map<String, dynamic>) as ReturnType;
141142
case 'ObjectWithDuplicateInlineEnum':
142143
return ObjectWithDuplicateInlineEnum.fromJson(value as Map<String, dynamic>) as ReturnType;
144+
case 'ObjectWithEnum':
145+
return ObjectWithEnum.fromJson(value as Map<String, dynamic>) as ReturnType;
143146
case 'ObjectWithInlineEnum':
144147
return ObjectWithInlineEnum.fromJson(value as Map<String, dynamic>) as ReturnType;
148+
case 'ObjectWithInlineEnumDefaultValue':
149+
return ObjectWithInlineEnumDefaultValue.fromJson(value as Map<String, dynamic>) as ReturnType;
145150
case 'Order':
146151
return Order.fromJson(value as Map<String, dynamic>) as ReturnType;
147152
case 'OuterComposite':
@@ -178,8 +183,6 @@ final _regMap = RegExp(r'^Map<String,(.*)>$');
178183

179184
case 'TestInlineFreeformAdditionalPropertiesRequest':
180185
return TestInlineFreeformAdditionalPropertiesRequest.fromJson(value as Map<String, dynamic>) as ReturnType;
181-
case 'TestItem':
182-
return TestItem.fromJson(value as Map<String, dynamic>) as ReturnType;
183186
case 'User':
184187
return User.fromJson(value as Map<String, dynamic>) as ReturnType;
185188
default:
Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'package:openapi/src/model/test_enum.dart';
77
import 'package:copy_with_extension/copy_with_extension.dart';
88
import 'package:json_annotation/json_annotation.dart';
99

10-
part 'test_item.g.dart';
10+
part 'object_with_enum.g.dart';
1111

1212

1313
@CopyWith()
@@ -17,55 +17,39 @@ part 'test_item.g.dart';
1717
disallowUnrecognizedKeys: false,
1818
explicitToJson: true,
1919
)
20-
class TestItem {
21-
/// Returns a new [TestItem] instance.
22-
TestItem({
20+
class ObjectWithEnum {
21+
/// Returns a new [ObjectWithEnum] instance.
22+
ObjectWithEnum({
2323

24-
required this.test,
25-
26-
this.testEmum,
24+
this.attribute = TestEnum.empty,
2725
});
2826

2927
@JsonKey(
30-
31-
name: r'test',
32-
required: true,
33-
includeIfNull: false,
34-
)
35-
36-
37-
final int test;
38-
39-
40-
41-
@JsonKey(
42-
43-
name: r'testEmum',
28+
defaultValue: TestEnum.empty,
29+
name: r'attribute',
4430
required: false,
4531
includeIfNull: false,
4632
unknownEnumValue: TestEnum.unknownDefaultOpenApi,
4733
)
4834

4935

50-
final TestEnum? testEmum;
36+
final TestEnum? attribute;
5137

5238

5339

5440

5541

5642
@override
57-
bool operator ==(Object other) => identical(this, other) || other is TestItem &&
58-
other.test == test &&
59-
other.testEmum == testEmum;
43+
bool operator ==(Object other) => identical(this, other) || other is ObjectWithEnum &&
44+
other.attribute == attribute;
6045

6146
@override
6247
int get hashCode =>
63-
test.hashCode +
64-
testEmum.hashCode;
48+
attribute.hashCode;
6549

66-
factory TestItem.fromJson(Map<String, dynamic> json) => _$TestItemFromJson(json);
50+
factory ObjectWithEnum.fromJson(Map<String, dynamic> json) => _$ObjectWithEnumFromJson(json);
6751

68-
Map<String, dynamic> toJson() => _$TestItemToJson(this);
52+
Map<String, dynamic> toJson() => _$ObjectWithEnumToJson(this);
6953

7054
@override
7155
String toString() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
//
2+
// AUTO-GENERATED FILE, DO NOT MODIFY!
3+
//
4+
5+
// ignore_for_file: unused_element
6+
import 'package:copy_with_extension/copy_with_extension.dart';
7+
import 'package:json_annotation/json_annotation.dart';
8+
9+
part 'object_with_inline_enum_default_value.g.dart';
10+
11+
12+
@CopyWith()
13+
@JsonSerializable(
14+
checked: true,
15+
createToJson: true,
16+
disallowUnrecognizedKeys: false,
17+
explicitToJson: true,
18+
)
19+
class ObjectWithInlineEnumDefaultValue {
20+
/// Returns a new [ObjectWithInlineEnumDefaultValue] instance.
21+
ObjectWithInlineEnumDefaultValue({
22+
23+
this.attribute = const ObjectWithInlineEnumDefaultValueAttributeEnum._('value_one'),
24+
});
25+
26+
/// Object one attribute enum with default value
27+
@JsonKey(
28+
defaultValue: 'value_one',
29+
name: r'attribute',
30+
required: false,
31+
includeIfNull: false,
32+
unknownEnumValue: ObjectWithInlineEnumDefaultValueAttributeEnum.unknownDefaultOpenApi,
33+
)
34+
35+
36+
final ObjectWithInlineEnumDefaultValueAttributeEnum? attribute;
37+
38+
39+
40+
41+
42+
@override
43+
bool operator ==(Object other) => identical(this, other) || other is ObjectWithInlineEnumDefaultValue &&
44+
other.attribute == attribute;
45+
46+
@override
47+
int get hashCode =>
48+
attribute.hashCode;
49+
50+
factory ObjectWithInlineEnumDefaultValue.fromJson(Map<String, dynamic> json) => _$ObjectWithInlineEnumDefaultValueFromJson(json);
51+
52+
Map<String, dynamic> toJson() => _$ObjectWithInlineEnumDefaultValueToJson(this);
53+
54+
@override
55+
String toString() {
56+
return toJson().toString();
57+
}
58+
59+
}
60+
61+
/// Object one attribute enum with default value
62+
enum ObjectWithInlineEnumDefaultValueAttributeEnum {
63+
/// Object one attribute enum with default value
64+
@JsonValue(r'value_one')
65+
valueOne(r'value_one'),
66+
/// Object one attribute enum with default value
67+
@JsonValue(r'value_two')
68+
valueTwo(r'value_two'),
69+
/// Object one attribute enum with default value
70+
@JsonValue(r'unknown_default_open_api')
71+
unknownDefaultOpenApi(r'unknown_default_open_api');
72+
73+
const ObjectWithInlineEnumDefaultValueAttributeEnum(this.value);
74+
75+
final String value;
76+
77+
@override
78+
String toString() => value;
79+
}
80+
81+

0 commit comments

Comments
 (0)