Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,25 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
return postProcessModelsEnum(objs);
}

@Override
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
super.postProcessModelProperty(model, property);
if (!model.isEnum && property.isEnum) {
// These are inner enums, enums which do not exist as models, just as properties.
// They are handled via the enum_inline template and and are generated in the
// same file as the containing class. To prevent name clashes the inline enum classes
// are prefix with the classname of the containing class in the template.
// Here the datatypeWithEnum template variable gets updated to match that scheme.
// Also taking into account potential collection types e.g. List<JustSymbolEnum> -> List<EnumArraysJustSymbolEnum>
if (property.items != null) {
// basically inner items e.g. map of maps etc.
property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.items.datatypeWithEnum, model.classname + property.items.datatypeWithEnum));
} else {
property.setDatatypeWithEnum(property.datatypeWithEnum.replace(property.enumName, model.classname + property.enumName));
}
}
}

@Override
public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List<Server> servers) {
final CodegenOperation op = super.fromOperation(path, httpMethod, operation, servers);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
@nullable
{{/isNullable}}
@BuiltValueField(wireName: r'{{baseName}}')
{{#isEnum}}{{classname}}{{{nameInCamelCase}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} get {{name}};
{{{datatypeWithEnum}}} get {{name}};
{{#allowableValues}}
{{#min}}// range from {{min}} to {{max}}{{/min}}//{{^min}} enum {{name}}Enum { {{#values}} {{.}}, {{/values}} };{{/min}}
{{/allowableValues}}
Expand All @@ -31,8 +31,15 @@ abstract class {{classname}} implements Built<{{classname}}, {{classname}}Builde
}}
{{#vars}}
{{#isEnum}}
{{^isContainer}}

{{>enum_inline}}
{{/isContainer}}
{{#isContainer}}
{{#mostInnerItems}}

{{>enum_inline}}
{{/mostInnerItems}}
{{/isContainer}}
{{/isEnum}}
{{/vars}}
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
class {{classname}}{{nameInCamelCase}} extends EnumClass {
class {{{classname}}}{{{enumName}}} extends EnumClass {

{{#allowableValues}}
{{#enumVars}}
{{#description}}
/// {{{description}}}
{{/description}}
@BuiltValueEnumConst({{#isInteger}}wireNumber: {{{value}}}{{/isInteger}}{{^isInteger}}wireName: r{{#lambda.escapeBuiltValueEnum}}{{{value}}}{{/lambda.escapeBuiltValueEnum}}{{/isInteger}})
static const {{classname}}{{nameInCamelCase}} {{name}} = _${{#lambda.camelcase}}{{classname}}{{nameInCamelCase}}{{/lambda.camelcase}}_{{name}};
static const {{{classname}}}{{{enumName}}} {{name}} = _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}_{{name}};
{{/enumVars}}
{{/allowableValues}}

static Serializer<{{classname}}{{nameInCamelCase}}> get serializer => _${{#lambda.camelcase}}{{classname}}{{nameInCamelCase}}{{/lambda.camelcase}}Serializer;
static Serializer<{{{classname}}}{{{enumName}}}> get serializer => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}Serializer;

const {{classname}}{{nameInCamelCase}}._(String name): super(name);
const {{{classname}}}{{{enumName}}}._(String name): super(name);

static BuiltSet<{{classname}}{{nameInCamelCase}}> get values => _${{#lambda.camelcase}}{{classname}}{{nameInCamelCase}}{{/lambda.camelcase}}Values;
static {{classname}}{{nameInCamelCase}} valueOf(String name) => _${{#lambda.camelcase}}{{classname}}{{nameInCamelCase}}{{/lambda.camelcase}}ValueOf(name);
static BuiltSet<{{{classname}}}{{{enumName}}}> get values => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}Values;
static {{{classname}}}{{{enumName}}} valueOf(String name) => _${{#lambda.camelcase}}{{{classname}}}{{{enumName}}}{{/lambda.camelcase}}ValueOf(name);
}
29 changes: 11 additions & 18 deletions modules/openapi-generator/src/main/resources/dart2/class.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,8 @@ class {{{classname}}} {
{{#maximum}}
// maximum: {{{maximum}}}
{{/maximum}}
{{{dataType}}} {{{name}}};
{{/isEnum}}
{{#isEnum}}
{{#isContainer}}
{{#isArray}}
List<{{{classname}}}{{{enumName}}}> {{{name}}};
{{/isArray}}
{{#isMap}}
Map<String, dynamic> {{{name}}};
{{/isMap}}
{{/isContainer}}
{{^isContainer}}
{{#allowableValues}}
{{{classname}}}{{{enumName}}} {{{name}}}{{#required}}{{#defaultValue}} = {{{classname}}}{{{enumName}}}._({{{defaultValue}}}){{/defaultValue}}{{/required}};
{{/allowableValues}}
{{/isContainer}}
{{/isEnum}}
{{{datatypeWithEnum}}} {{{name}}};
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure about all of this change, especially the enum default value. Currently all default values are set in the constructor. As far as I can tell in that case a wrong constructor default value would be generated.

Copy link
Contributor

@agilob agilob Dec 13, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the default value should stay as null, unless field is marked as non-nullable, required or has default value provided, this looks good to me. Dart generator doesn't support non-nullable so it's fine. It will get more complex.


{{/vars}}
@override
Expand Down Expand Up @@ -225,8 +210,16 @@ class {{{classname}}} {
}
}
{{#vars}}
{{#isEnum}}
{{#isEnum}}
{{^isContainer}}

{{>enum_inline}}
{{/isEnum}}
{{/isContainer}}
{{#isContainer}}
{{#mostInnerItems}}

{{>enum_inline}}
{{/mostInnerItems}}
{{/isContainer}}
{{/isEnum}}
{{/vars}}
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ public void testEnumValues() {
Assert.assertEquals(property1.baseName, "testStringEnum");
Assert.assertEquals(property1.dataType, "String");
Assert.assertEquals(property1.baseType, "String");
Assert.assertEquals(property1.datatypeWithEnum, "TestStringEnumEnum");
Assert.assertEquals(property1.datatypeWithEnum, "SampleTestStringEnumEnum");
Assert.assertEquals(property1.name, "testStringEnum");
Assert.assertTrue(property1.isEnum);
Assert.assertEquals(property1.allowableValues.size(), 2);
Expand All @@ -439,7 +439,7 @@ public void testEnumValues() {
Assert.assertEquals(property2.baseName, "testIntEnum");
Assert.assertEquals(property2.dataType, "int");
Assert.assertEquals(property2.baseType, "int");
Assert.assertEquals(property2.datatypeWithEnum, "TestIntEnumEnum");
Assert.assertEquals(property2.datatypeWithEnum, "SampleTestIntEnumEnum");
Assert.assertEquals(property2.name, "testIntEnum");
Assert.assertTrue(property2.isEnum);
Assert.assertEquals(property2.allowableValues.size(), 2);
Expand Down Expand Up @@ -482,7 +482,7 @@ public void testXEnumValuesExtension() {
Assert.assertEquals(property1.baseName, "testIntEnum");
Assert.assertEquals(property1.dataType, "int");
Assert.assertEquals(property1.baseType, "int");
Assert.assertEquals(property1.datatypeWithEnum, "TestIntEnumEnum");
Assert.assertEquals(property1.datatypeWithEnum, "SampleTestIntEnumEnum");
Assert.assertEquals(property1.name, "testIntEnum");
Assert.assertTrue(property1.isEnum);
Assert.assertEquals(property1.allowableValues.size(), 2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ abstract class Order implements Built<Order, OrderBuilder> {
/* Order Status */
@nullable
@BuiltValueField(wireName: r'status')
OrderStatus get status;
OrderStatusEnum get status;
// enum statusEnum { placed, approved, delivered, };

@nullable
Expand All @@ -39,24 +39,23 @@ abstract class Order implements Built<Order, OrderBuilder> {
static Serializer<Order> get serializer => _$orderSerializer;
}

class OrderStatus extends EnumClass {
class OrderStatusEnum extends EnumClass {

/// Order Status
@BuiltValueEnumConst(wireName: r'placed')
static const OrderStatus placed = _$orderStatus_placed;
static const OrderStatusEnum placed = _$orderStatusEnum_placed;
/// Order Status
@BuiltValueEnumConst(wireName: r'approved')
static const OrderStatus approved = _$orderStatus_approved;
static const OrderStatusEnum approved = _$orderStatusEnum_approved;
/// Order Status
@BuiltValueEnumConst(wireName: r'delivered')
static const OrderStatus delivered = _$orderStatus_delivered;
static const OrderStatusEnum delivered = _$orderStatusEnum_delivered;

static Serializer<OrderStatus> get serializer => _$orderStatusSerializer;
static Serializer<OrderStatusEnum> get serializer => _$orderStatusEnumSerializer;

const OrderStatus._(String name): super(name);
const OrderStatusEnum._(String name): super(name);

static BuiltSet<OrderStatus> get values => _$orderStatusValues;
static OrderStatus valueOf(String name) => _$orderStatusValueOf(name);
static BuiltSet<OrderStatusEnum> get values => _$orderStatusEnumValues;
static OrderStatusEnum valueOf(String name) => _$orderStatusEnumValueOf(name);
}


Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ abstract class Pet implements Built<Pet, PetBuilder> {
/* pet status in the store */
@nullable
@BuiltValueField(wireName: r'status')
PetStatus get status;
PetStatusEnum get status;
// enum statusEnum { available, pending, sold, };

// Boilerplate code needed to wire-up generated code
Expand All @@ -41,24 +41,23 @@ abstract class Pet implements Built<Pet, PetBuilder> {
static Serializer<Pet> get serializer => _$petSerializer;
}

class PetStatus extends EnumClass {
class PetStatusEnum extends EnumClass {

/// pet status in the store
@BuiltValueEnumConst(wireName: r'available')
static const PetStatus available = _$petStatus_available;
static const PetStatusEnum available = _$petStatusEnum_available;
/// pet status in the store
@BuiltValueEnumConst(wireName: r'pending')
static const PetStatus pending = _$petStatus_pending;
static const PetStatusEnum pending = _$petStatusEnum_pending;
/// pet status in the store
@BuiltValueEnumConst(wireName: r'sold')
static const PetStatus sold = _$petStatus_sold;
static const PetStatusEnum sold = _$petStatusEnum_sold;

static Serializer<PetStatus> get serializer => _$petStatusSerializer;
static Serializer<PetStatusEnum> get serializer => _$petStatusEnumSerializer;

const PetStatus._(String name): super(name);
const PetStatusEnum._(String name): super(name);

static BuiltSet<PetStatus> get values => _$petStatusValues;
static PetStatus valueOf(String name) => _$petStatusValueOf(name);
static BuiltSet<PetStatusEnum> get values => _$petStatusEnumValues;
static PetStatusEnum valueOf(String name) => _$petStatusEnumValueOf(name);
}


Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ abstract class Order implements Built<Order, OrderBuilder> {
/* Order Status */
@nullable
@BuiltValueField(wireName: r'status')
OrderStatus get status;
OrderStatusEnum get status;
// enum statusEnum { placed, approved, delivered, };

@nullable
Expand All @@ -39,24 +39,23 @@ abstract class Order implements Built<Order, OrderBuilder> {
static Serializer<Order> get serializer => _$orderSerializer;
}

class OrderStatus extends EnumClass {
class OrderStatusEnum extends EnumClass {

/// Order Status
@BuiltValueEnumConst(wireName: r'placed')
static const OrderStatus placed = _$orderStatus_placed;
static const OrderStatusEnum placed = _$orderStatusEnum_placed;
/// Order Status
@BuiltValueEnumConst(wireName: r'approved')
static const OrderStatus approved = _$orderStatus_approved;
static const OrderStatusEnum approved = _$orderStatusEnum_approved;
/// Order Status
@BuiltValueEnumConst(wireName: r'delivered')
static const OrderStatus delivered = _$orderStatus_delivered;
static const OrderStatusEnum delivered = _$orderStatusEnum_delivered;

static Serializer<OrderStatus> get serializer => _$orderStatusSerializer;
static Serializer<OrderStatusEnum> get serializer => _$orderStatusEnumSerializer;

const OrderStatus._(String name): super(name);
const OrderStatusEnum._(String name): super(name);

static BuiltSet<OrderStatus> get values => _$orderStatusValues;
static OrderStatus valueOf(String name) => _$orderStatusValueOf(name);
static BuiltSet<OrderStatusEnum> get values => _$orderStatusEnumValues;
static OrderStatusEnum valueOf(String name) => _$orderStatusEnumValueOf(name);
}


Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ abstract class Pet implements Built<Pet, PetBuilder> {
/* pet status in the store */
@nullable
@BuiltValueField(wireName: r'status')
PetStatus get status;
PetStatusEnum get status;
// enum statusEnum { available, pending, sold, };

// Boilerplate code needed to wire-up generated code
Expand All @@ -41,24 +41,23 @@ abstract class Pet implements Built<Pet, PetBuilder> {
static Serializer<Pet> get serializer => _$petSerializer;
}

class PetStatus extends EnumClass {
class PetStatusEnum extends EnumClass {

/// pet status in the store
@BuiltValueEnumConst(wireName: r'available')
static const PetStatus available = _$petStatus_available;
static const PetStatusEnum available = _$petStatusEnum_available;
/// pet status in the store
@BuiltValueEnumConst(wireName: r'pending')
static const PetStatus pending = _$petStatus_pending;
static const PetStatusEnum pending = _$petStatusEnum_pending;
/// pet status in the store
@BuiltValueEnumConst(wireName: r'sold')
static const PetStatus sold = _$petStatus_sold;
static const PetStatusEnum sold = _$petStatusEnum_sold;

static Serializer<PetStatus> get serializer => _$petStatusSerializer;
static Serializer<PetStatusEnum> get serializer => _$petStatusEnumSerializer;

const PetStatus._(String name): super(name);
const PetStatusEnum._(String name): super(name);

static BuiltSet<PetStatus> get values => _$petStatusValues;
static PetStatus valueOf(String name) => _$petStatusValueOf(name);
static BuiltSet<PetStatusEnum> get values => _$petStatusEnumValues;
static PetStatusEnum valueOf(String name) => _$petStatusEnumValueOf(name);
}


Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ abstract class EnumArrays implements Built<EnumArrays, EnumArraysBuilder> {

@nullable
@BuiltValueField(wireName: r'just_symbol')
EnumArraysJustSymbol get justSymbol;
EnumArraysJustSymbolEnum get justSymbol;
// enum justSymbolEnum { &gt;&#x3D;, $, };

@nullable
@BuiltValueField(wireName: r'array_enum')
EnumArraysArrayEnum get arrayEnum;
BuiltList<EnumArraysArrayEnumEnum> get arrayEnum;
// enum arrayEnumEnum { fish, crab, };

// Boilerplate code needed to wire-up generated code
Expand All @@ -24,35 +24,33 @@ abstract class EnumArrays implements Built<EnumArrays, EnumArraysBuilder> {
static Serializer<EnumArrays> get serializer => _$enumArraysSerializer;
}

class EnumArraysJustSymbol extends EnumClass {
class EnumArraysJustSymbolEnum extends EnumClass {

@BuiltValueEnumConst(wireName: r'>=')
static const EnumArraysJustSymbol greaterThanEqual = _$enumArraysJustSymbol_greaterThanEqual;
static const EnumArraysJustSymbolEnum greaterThanEqual = _$enumArraysJustSymbolEnum_greaterThanEqual;
@BuiltValueEnumConst(wireName: r'\$')
static const EnumArraysJustSymbol dollar = _$enumArraysJustSymbol_dollar;
static const EnumArraysJustSymbolEnum dollar = _$enumArraysJustSymbolEnum_dollar;

static Serializer<EnumArraysJustSymbol> get serializer => _$enumArraysJustSymbolSerializer;
static Serializer<EnumArraysJustSymbolEnum> get serializer => _$enumArraysJustSymbolEnumSerializer;

const EnumArraysJustSymbol._(String name): super(name);
const EnumArraysJustSymbolEnum._(String name): super(name);

static BuiltSet<EnumArraysJustSymbol> get values => _$enumArraysJustSymbolValues;
static EnumArraysJustSymbol valueOf(String name) => _$enumArraysJustSymbolValueOf(name);
static BuiltSet<EnumArraysJustSymbolEnum> get values => _$enumArraysJustSymbolEnumValues;
static EnumArraysJustSymbolEnum valueOf(String name) => _$enumArraysJustSymbolEnumValueOf(name);
}


class EnumArraysArrayEnum extends EnumClass {
class EnumArraysArrayEnumEnum extends EnumClass {

@BuiltValueEnumConst(wireName: r'fish')
static const EnumArraysArrayEnum fish = _$enumArraysArrayEnum_fish;
static const EnumArraysArrayEnumEnum fish = _$enumArraysArrayEnumEnum_fish;
@BuiltValueEnumConst(wireName: r'crab')
static const EnumArraysArrayEnum crab = _$enumArraysArrayEnum_crab;
static const EnumArraysArrayEnumEnum crab = _$enumArraysArrayEnumEnum_crab;

static Serializer<EnumArraysArrayEnum> get serializer => _$enumArraysArrayEnumSerializer;
static Serializer<EnumArraysArrayEnumEnum> get serializer => _$enumArraysArrayEnumEnumSerializer;

const EnumArraysArrayEnum._(String name): super(name);
const EnumArraysArrayEnumEnum._(String name): super(name);

static BuiltSet<EnumArraysArrayEnum> get values => _$enumArraysArrayEnumValues;
static EnumArraysArrayEnum valueOf(String name) => _$enumArraysArrayEnumValueOf(name);
static BuiltSet<EnumArraysArrayEnumEnum> get values => _$enumArraysArrayEnumEnumValues;
static EnumArraysArrayEnumEnum valueOf(String name) => _$enumArraysArrayEnumEnumValueOf(name);
}


Loading