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 @@ -16,7 +16,9 @@

package org.openapitools.codegen.languages;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.samskivert.mustache.Mustache;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConstants;
Expand Down Expand Up @@ -107,6 +109,18 @@ protected boolean isReservedWord(String word) {
return super.isReservedWord(word) || reservedBuiltValueWords.contains(word);
}

@Override
protected ImmutableMap.Builder<String, Mustache.Lambda> addMustacheLambdas() {
return super.addMustacheLambdas()
.put("escapeBuiltValueEnum", (fragment, writer) -> {
// Raw strings don't work correctly in built_value enum strings.
// Dollar signs need to be escaped in to make them work.
// @BuiltValueEnumConst(wireName: r'$') produces '$' in generated code.
// @BuiltValueEnumConst(wireName: r'\$') produces '\$' in generated code.
writer.write(fragment.execute().replace("$", "\\$"));
});
}

@Override
public String toDefaultValue(Schema schema) {
if (ModelUtils.isMapSchema(schema)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class {{classname}} extends EnumClass {
{{#description}}
/// {{{description}}}
{{/description}}
@BuiltValueEnumConst({{#isInteger}}wireNumber: {{{value}}}{{/isInteger}}{{^isInteger}}wireName: {{{value}}}{{/isInteger}})
@BuiltValueEnumConst({{#isInteger}}wireNumber: {{{value}}}{{/isInteger}}{{^isInteger}}wireName: r{{#lambda.escapeBuiltValueEnum}}{{{value}}}{{/lambda.escapeBuiltValueEnum}}{{/isInteger}})
static const {{classname}} {{name}} = _${{name}};
{{/enumVars}}
{{/allowableValues}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class {{classname}}{{nameInCamelCase}} extends EnumClass {
{{#description}}
/// {{{description}}}
{{/description}}
@BuiltValueEnumConst({{#isInteger}}wireNumber: {{{value}}}{{/isInteger}}{{^isInteger}}wireName: {{{value}}}{{/isInteger}})
@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}};
{{/enumVars}}
{{/allowableValues}}
Expand Down
18 changes: 6 additions & 12 deletions modules/openapi-generator/src/main/resources/dart2/enum.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,23 @@ class {{{classname}}} {
const {{{classname}}}._(this.value);

/// The underlying value of this enum member.
{{#isEnum}}
final String value;
{{/isEnum}}
{{^isEnum}}
final {{{dataType}}} value;
{{/isEnum}}

@override
bool operator ==(Object other) => identical(this, other) ||
other is {{{classname}}} && other.value == value ||
other is {{#isEnum}}String{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} && other == value;
other is {{{classname}}} && other.value == value;

@override
int get hashCode => toString().hashCode;

@override
String toString() => {{#isString}}value{{/isString}}{{^isString}}value.toString(){{/isString}};
String toString() => value{{^isString}}.toString(){{/isString}};

{{#isEnum}}String{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} toJson() => value;
{{{dataType}}} toJson() => value;

{{#allowableValues}}
{{#enumVars}}
static const {{{name}}} = {{{classname}}}._({{{value}}});
static const {{{name}}} = {{{classname}}}._({{#isString}}r{{/isString}}{{{value}}});
{{/enumVars}}
{{/allowableValues}}

Expand Down Expand Up @@ -57,7 +51,7 @@ class {{{classname}}}TypeTransformer {

factory {{{classname}}}TypeTransformer() => _instance ??= {{{classname}}}TypeTransformer._();

{{#isEnum}}String{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} encode({{{classname}}} data) => data.value;
{{{dataType}}} encode({{{classname}}} data) => data.value;

/// Decodes a [dynamic value][data] to a {{{classname}}}.
///
Expand All @@ -71,7 +65,7 @@ class {{{classname}}}TypeTransformer {
switch (data) {
{{#allowableValues}}
{{#enumVars}}
case {{{value}}}: return {{{classname}}}.{{{name}}};
case {{#isString}}r{{/isString}}{{{value}}}: return {{{classname}}}.{{{name}}};
{{/enumVars}}
{{/allowableValues}}
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,23 @@ class {{{classname}}}{{{enumName}}} {
const {{{classname}}}{{{enumName}}}._(this.value);

/// The underlying value of this enum member.
{{#isEnum}}
final String value;
{{/isEnum}}
{{^isEnum}}
final {{{dataType}}} value;
{{/isEnum}}

@override
bool operator ==(Object other) => identical(this, other) ||
other is {{{classname}}}{{{enumName}}} && other.value == value ||
other is {{#isEnum}}String{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} && other == value;
other is {{{classname}}}{{{enumName}}} && other.value == value;

@override
int get hashCode => toString().hashCode;

@override
String toString() => {{#isString}}value{{/isString}}{{^isString}}value.toString(){{/isString}};
String toString() => value{{^isString}}.toString(){{/isString}};

{{#isEnum}}String{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} toJson() => value;
{{{dataType}}} toJson() => value;

{{#allowableValues}}
{{#enumVars}}
static const {{{name}}} = {{{classname}}}{{{enumName}}}._({{{value}}});
static const {{{name}}} = {{{classname}}}{{{enumName}}}._({{#isString}}r{{/isString}}{{{value}}});
{{/enumVars}}
{{/allowableValues}}

Expand Down Expand Up @@ -57,7 +51,7 @@ class {{{classname}}}{{{enumName}}}TypeTransformer {

factory {{{classname}}}{{{enumName}}}TypeTransformer() => _instance ??= {{{classname}}}{{{enumName}}}TypeTransformer._();

{{#isEnum}}String{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}} encode({{{classname}}}{{{enumName}}} data) => data.value;
{{{dataType}}} encode({{{classname}}}{{{enumName}}} data) => data.value;

/// Decodes a [dynamic value][data] to a {{{classname}}}{{{enumName}}}.
///
Expand All @@ -71,7 +65,7 @@ class {{{classname}}}{{{enumName}}}TypeTransformer {
switch (data) {
{{#allowableValues}}
{{#enumVars}}
case {{{value}}}: return {{{classname}}}{{{enumName}}}.{{{name}}};
case {{#isString}}r{{/isString}}{{{value}}}: return {{{classname}}}{{{enumName}}}.{{{name}}};
{{/enumVars}}
{{/allowableValues}}
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ abstract class Order implements Built<Order, OrderBuilder> {
class OrderStatus extends EnumClass {

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

static Serializer<OrderStatus> get serializer => _$orderStatusSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ abstract class Pet implements Built<Pet, PetBuilder> {
class PetStatus extends EnumClass {

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

static Serializer<PetStatus> get serializer => _$petStatusSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,7 @@ class OrderStatusEnum {

@override
bool operator ==(Object other) => identical(this, other) ||
other is OrderStatusEnum && other.value == value ||
other is String && other == value;
other is OrderStatusEnum && other.value == value;

@override
int get hashCode => toString().hashCode;
Expand All @@ -143,9 +142,9 @@ class OrderStatusEnum {

String toJson() => value;

static const placed = OrderStatusEnum._('placed');
static const approved = OrderStatusEnum._('approved');
static const delivered = OrderStatusEnum._('delivered');
static const placed = OrderStatusEnum._(r'placed');
static const approved = OrderStatusEnum._(r'approved');
static const delivered = OrderStatusEnum._(r'delivered');

/// List of all possible values in this [enum][OrderStatusEnum].
static const values = <OrderStatusEnum>[
Expand Down Expand Up @@ -184,9 +183,9 @@ class OrderStatusEnumTypeTransformer {
/// and users are still using an old app with the old code.
OrderStatusEnum decode(dynamic data, {bool allowNull}) {
switch (data) {
case 'placed': return OrderStatusEnum.placed;
case 'approved': return OrderStatusEnum.approved;
case 'delivered': return OrderStatusEnum.delivered;
case r'placed': return OrderStatusEnum.placed;
case r'approved': return OrderStatusEnum.approved;
case r'delivered': return OrderStatusEnum.delivered;
default:
if (allowNull == false) {
throw ArgumentError('Unknown enum value to decode: $data');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,7 @@ class PetStatusEnum {

@override
bool operator ==(Object other) => identical(this, other) ||
other is PetStatusEnum && other.value == value ||
other is String && other == value;
other is PetStatusEnum && other.value == value;

@override
int get hashCode => toString().hashCode;
Expand All @@ -143,9 +142,9 @@ class PetStatusEnum {

String toJson() => value;

static const available = PetStatusEnum._('available');
static const pending = PetStatusEnum._('pending');
static const sold = PetStatusEnum._('sold');
static const available = PetStatusEnum._(r'available');
static const pending = PetStatusEnum._(r'pending');
static const sold = PetStatusEnum._(r'sold');

/// List of all possible values in this [enum][PetStatusEnum].
static const values = <PetStatusEnum>[
Expand Down Expand Up @@ -184,9 +183,9 @@ class PetStatusEnumTypeTransformer {
/// and users are still using an old app with the old code.
PetStatusEnum decode(dynamic data, {bool allowNull}) {
switch (data) {
case 'available': return PetStatusEnum.available;
case 'pending': return PetStatusEnum.pending;
case 'sold': return PetStatusEnum.sold;
case r'available': return PetStatusEnum.available;
case r'pending': return PetStatusEnum.pending;
case r'sold': return PetStatusEnum.sold;
default:
if (allowNull == false) {
throw ArgumentError('Unknown enum value to decode: $data');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ abstract class Order implements Built<Order, OrderBuilder> {
class OrderStatus extends EnumClass {

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

static Serializer<OrderStatus> get serializer => _$orderStatusSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ abstract class Pet implements Built<Pet, PetBuilder> {
class PetStatus extends EnumClass {

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

static Serializer<PetStatus> get serializer => _$petStatusSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ abstract class EnumArrays implements Built<EnumArrays, EnumArraysBuilder> {

class EnumArraysJustSymbol extends EnumClass {

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

static Serializer<EnumArraysJustSymbol> get serializer => _$enumArraysJustSymbolSerializer;
Expand All @@ -42,9 +42,9 @@ class EnumArraysJustSymbol extends EnumClass {

class EnumArraysArrayEnum extends EnumClass {

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

static Serializer<EnumArraysArrayEnum> get serializer => _$enumArraysArrayEnumSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ abstract class EnumTest implements Built<EnumTest, EnumTestBuilder> {

class EnumTestEnumString extends EnumClass {

@BuiltValueEnumConst(wireName: 'UPPER')
@BuiltValueEnumConst(wireName: r'UPPER')
static const EnumTestEnumString UPPER = _$enumTestEnumString_UPPER;
@BuiltValueEnumConst(wireName: 'lower')
@BuiltValueEnumConst(wireName: r'lower')
static const EnumTestEnumString lower = _$enumTestEnumString_lower;
@BuiltValueEnumConst(wireName: '')
@BuiltValueEnumConst(wireName: r'')
static const EnumTestEnumString empty = _$enumTestEnumString_empty;

static Serializer<EnumTestEnumString> get serializer => _$enumTestEnumStringSerializer;
Expand All @@ -78,11 +78,11 @@ class EnumTestEnumString extends EnumClass {

class EnumTestEnumStringRequired extends EnumClass {

@BuiltValueEnumConst(wireName: 'UPPER')
@BuiltValueEnumConst(wireName: r'UPPER')
static const EnumTestEnumStringRequired UPPER = _$enumTestEnumStringRequired_UPPER;
@BuiltValueEnumConst(wireName: 'lower')
@BuiltValueEnumConst(wireName: r'lower')
static const EnumTestEnumStringRequired lower = _$enumTestEnumStringRequired_lower;
@BuiltValueEnumConst(wireName: '')
@BuiltValueEnumConst(wireName: r'')
static const EnumTestEnumStringRequired empty = _$enumTestEnumStringRequired_empty;

static Serializer<EnumTestEnumStringRequired> get serializer => _$enumTestEnumStringRequiredSerializer;
Expand Down Expand Up @@ -112,9 +112,9 @@ class EnumTestEnumInteger extends EnumClass {

class EnumTestEnumNumber extends EnumClass {

@BuiltValueEnumConst(wireName: '1.1')
@BuiltValueEnumConst(wireName: r'1.1')
static const EnumTestEnumNumber number1Period1 = _$enumTestEnumNumber_number1Period1;
@BuiltValueEnumConst(wireName: '-1.2')
@BuiltValueEnumConst(wireName: r'-1.2')
static const EnumTestEnumNumber numberNegative1Period2 = _$enumTestEnumNumber_numberNegative1Period2;

static Serializer<EnumTestEnumNumber> get serializer => _$enumTestEnumNumberSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ abstract class InlineObject2 implements Built<InlineObject2, InlineObject2Builde
class InlineObject2EnumFormStringArray extends EnumClass {

/// Form parameter enum test (string array)
@BuiltValueEnumConst(wireName: '>')
@BuiltValueEnumConst(wireName: r'>')
static const InlineObject2EnumFormStringArray greaterThan = _$inlineObject2EnumFormStringArray_greaterThan;
/// Form parameter enum test (string array)
@BuiltValueEnumConst(wireName: '$')
@BuiltValueEnumConst(wireName: r'\$')
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Found a mismatch between dart-dio and dart. a few files below you will find:

static const dollar = EnumArraysJustSymbolEnum._(r'$');

You can see the $ isn't escaped with \ but it is here, both are raw strings. I suspect this is breaking compatibility between them?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ah thanks for that, missed comment. Well, it's fine then I expressed my opinion on use of built_value in another PR.

static const InlineObject2EnumFormStringArray dollar = _$inlineObject2EnumFormStringArray_dollar;

static Serializer<InlineObject2EnumFormStringArray> get serializer => _$inlineObject2EnumFormStringArraySerializer;
Expand All @@ -45,13 +45,13 @@ class InlineObject2EnumFormStringArray extends EnumClass {
class InlineObject2EnumFormString extends EnumClass {

/// Form parameter enum test (string)
@BuiltValueEnumConst(wireName: '_abc')
@BuiltValueEnumConst(wireName: r'_abc')
static const InlineObject2EnumFormString abc = _$inlineObject2EnumFormString_abc;
/// Form parameter enum test (string)
@BuiltValueEnumConst(wireName: '-efg')
@BuiltValueEnumConst(wireName: r'-efg')
static const InlineObject2EnumFormString efg = _$inlineObject2EnumFormString_efg;
/// Form parameter enum test (string)
@BuiltValueEnumConst(wireName: '(xyz)')
@BuiltValueEnumConst(wireName: r'(xyz)')
static const InlineObject2EnumFormString leftParenthesisXyzRightParenthesis = _$inlineObject2EnumFormString_leftParenthesisXyzRightParenthesis;

static Serializer<InlineObject2EnumFormString> get serializer => _$inlineObject2EnumFormStringSerializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ abstract class MapTest implements Built<MapTest, MapTestBuilder> {

class MapTestMapOfEnumString extends EnumClass {

@BuiltValueEnumConst(wireName: 'UPPER')
@BuiltValueEnumConst(wireName: r'UPPER')
static const MapTestMapOfEnumString UPPER = _$mapTestMapOfEnumString_UPPER;
@BuiltValueEnumConst(wireName: 'lower')
@BuiltValueEnumConst(wireName: r'lower')
static const MapTestMapOfEnumString lower = _$mapTestMapOfEnumString_lower;

static Serializer<MapTestMapOfEnumString> get serializer => _$mapTestMapOfEnumStringSerializer;
Expand Down
Loading