Skip to content
Open
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
2 changes: 1 addition & 1 deletion protoc_plugin/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ update-pregenerated: $(PLUGIN_PATH) $(PREGENERATED_SRCS)
protos: $(PLUGIN_PATH) $(TEST_PROTO_LIBS)

run-tests: protos
dart test
dart test && dart -Dprotobuf.omit_enum_names=true test --use-data-isolate-strategy --tags tests_omit_enum_names

update-goldens: protos
rm -rf test/goldens
Expand Down
4 changes: 4 additions & 0 deletions protoc_plugin/dart_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
tags:
# Tests that change their behavior base on `protobuf.omit_enum_names`.
# Thos tests should also be run with `-Dprotobuf.omit_enum_names=true`
tests_omit_enum_names: {}
46 changes: 23 additions & 23 deletions protoc_plugin/lib/src/enum_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,10 @@ class EnumGenerator extends ProtobufContainer {
out.println('@$coreImportPrefix.Deprecated(\'This enum is deprecated\')');
}
out.addAnnotatedBlock(
'class $classname extends $protobufImportPrefix.ProtobufEnum {',
'enum $classname implements $protobufImportPrefix.ProtobufEnum {',
'}\n', [
NamedLocation(
name: classname, fieldPathSegment: fieldPath, start: 'class '.length)
name: classname, fieldPathSegment: fieldPath, start: 'enum '.length)
], () {
// -----------------------------------------------------------------
// Define enum types.
Expand All @@ -137,16 +137,14 @@ class EnumGenerator extends ProtobufContainer {
'@$coreImportPrefix.Deprecated(\'This enum value is deprecated\')');
}

out.printlnAnnotated(
'static const $classname $name = '
'$classname._(${val.number}, $conditionalValName);',
[
NamedLocation(
name: name,
fieldPathSegment: fieldPathSegment,
start: 'static const $classname '.length)
]);
out.printlnAnnotated('$name(${val.number}, $conditionalValName),', [
NamedLocation(
name: name, fieldPathSegment: fieldPathSegment, start: 0)
]);
out.println();
}
out.println(';');

if (_aliases.isNotEmpty) {
out.println();
for (var i = 0; i < _aliases.length; i++) {
Expand All @@ -164,27 +162,29 @@ class EnumGenerator extends ProtobufContainer {
]);
}
}
out.println();

out.println('static const $coreImportPrefix.List<$classname> values ='
' <$classname> [');
for (final val in _canonicalValues) {
final name = dartNames[val.name];
out.println(' $name,');
}
out.println('];');
out.println();

out.println(
'static final $coreImportPrefix.Map<$coreImportPrefix.int, $classname> _byValue ='
' $protobufImportPrefix.ProtobufEnum.initByValue(values);');
out.println('static $classname? valueOf($coreImportPrefix.int value) =>'
' _byValue[value];');
out.println();

out.println();
out.println('@$coreImportPrefix.override');
out.println('final $coreImportPrefix.int value;');
out.println();
out.println('@$coreImportPrefix.override');
out.println('final $coreImportPrefix.String name;');
out.println();
out.println('const $classname(this.value, this.name);');
out.println();
out.println(
'const $classname._($coreImportPrefix.int v, $coreImportPrefix.String n) '
': super(v, n);');
"/// Returns this enum's [name] or the [value] if names are not"
' represented.');
out.println('@$coreImportPrefix.override');
out.println("$coreImportPrefix.String toString() => name == '' ? "
'value.toString() : name;');
Copy link
Author

Choose a reason for hiding this comment

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

I had to generate a "custom" toString method for each enum, since the default enum toString takes priority over the one from ProtobufEnum.

This method is designed to be 100% compatible, but it might be better to return Enum.name (super.toString()) instead of name.

});
}

Expand Down
1 change: 0 additions & 1 deletion protoc_plugin/lib/src/file_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -644,7 +644,6 @@ class FileGenerator extends ProtobufContainer {
// Generated code. Do not modify.
// source: ${descriptor.name}
//
// @dart = 2.12
Copy link
Author

Choose a reason for hiding this comment

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

I've removed all of them, since they would mess up the enum files and I don't think they serve any purpose.

''');
ignorelines.forEach(out.println);
out.println('');
Expand Down
5 changes: 3 additions & 2 deletions protoc_plugin/lib/src/generated/dart_options.pb.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading