Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1045)

Unified Diff: lib/message_generator.dart

Issue 2043913005: Change how to set the Dart name of a field (Closed) Base URL: git@github.com:dart-lang/dart-protoc-plugin.git@master
Patch Set: better error checking, clean up pubspec Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/extension_generator.dart ('k') | lib/names.dart » ('j') | lib/names.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/message_generator.dart
diff --git a/lib/message_generator.dart b/lib/message_generator.dart
index a3d47b64474ebf29c23f668b7a8f05feaf4ea9d0..4dd64bba2066d855bef896a69e4a1f39d2dc033c 100644
--- a/lib/message_generator.dart
+++ b/lib/message_generator.dart
@@ -4,57 +4,7 @@
part of protoc;
-/// A Dart function called on each item added to a repeated list
-/// to check its type and range.
-const checkItem = '\$checkItem';
-
class MessageGenerator extends ProtobufContainer {
- // List of Dart language reserved words in names which cannot be used in a
- // subclass of GeneratedMessage.
- static final List<String> reservedWords = [
- 'assert',
- 'break',
- 'case',
- 'catch',
- 'class',
- 'const',
- 'continue',
- 'default',
- 'do',
- 'else',
- 'enum',
- 'extends',
- 'false',
- 'final',
- 'finally',
- 'for',
- 'if',
- 'in',
- 'is',
- 'new',
- 'null',
- 'rethrow',
- 'return',
- 'super',
- 'switch',
- 'this',
- 'throw',
- 'true',
- 'try',
- 'var',
- 'void',
- 'while',
- 'with'
- ];
-
- // List of names used in the generated class itself
- static final List<String> generatedNames = [
- 'create',
- 'createRepeated',
- 'getDefault',
- checkItem
- ];
-
// Returns the mixin for this message, or null if none.
static PbMixin _getMixin(DescriptorProto desc, PbMixin defaultValue) {
if (!desc.hasOptions()) return defaultValue;
@@ -82,9 +32,6 @@ class MessageGenerator extends ProtobufContainer {
// populated by resolve()
List<ProtobufField> _fieldList;
- // Used during generation.
- final Set<String> _methodNames = new Set<String>();
-
MessageGenerator(DescriptorProto descriptor, ProtobufContainer parent,
PbMixin defaultMixin)
: _descriptor = descriptor,
@@ -158,17 +105,12 @@ class MessageGenerator extends ProtobufContainer {
void resolve(GenerationContext ctx) {
if (_fieldList != null) throw new StateError("message already resolved");
- var sorted = new List<FieldDescriptorProto>.from(_descriptor.field)
- ..sort((FieldDescriptorProto a, FieldDescriptorProto b) {
- if (a.number < b.number) return -1;
- if (a.number > b.number) return 1;
- throw "multiple fields defined for tag ${a.number} in $fqname";
- });
+ var reserved = mixin?.findReservedNames() ?? const <String>[];
+ var fields = messageFieldNames(_descriptor, reserved: reserved);
_fieldList = <ProtobufField>[];
- for (FieldDescriptorProto field in sorted) {
- int index = _fieldList.length;
- _fieldList.add(new ProtobufField(field, index, this, ctx));
+ for (MemberNames names in fields.values) {
+ _fieldList.add(new ProtobufField.message(names, this, ctx));
}
for (var m in _messageGenerators) {
@@ -242,15 +184,6 @@ class MessageGenerator extends ProtobufContainer {
void generate(IndentingWriter out) {
checkResolved();
- _methodNames.clear();
- _methodNames.addAll(reservedWords);
- _methodNames.addAll(GeneratedMessage_reservedNames);
- _methodNames.addAll(generatedNames);
-
- if (mixin != null) {
- _methodNames.addAll(mixin.findReservedNames());
- }
-
for (MessageGenerator m in _messageGenerators) {
m.generate(out);
}
@@ -267,7 +200,8 @@ class MessageGenerator extends ProtobufContainer {
'static final BuilderInfo _i = new BuilderInfo(\'${classname}\')',
';', () {
for (ProtobufField field in _fieldList) {
- out.println(field.generateBuilderInfoCall(package));
+ var dartFieldName = field.memberNames.fieldName;
+ out.println(field.generateBuilderInfoCall(package, dartFieldName));
}
if (_descriptor.extensionRange.length > 0) {
@@ -366,49 +300,29 @@ class MessageGenerator extends ProtobufContainer {
for (ProtobufField field in _fieldList) {
out.println();
- // Choose non-conflicting names.
- String identifier = field.dartFieldName;
- String hasIdentifier = field.hasMethodName;
- String clearIdentifier = field.clearMethodName;
- if (!field.isRepeated) {
- while (_methodNames.contains(identifier) ||
- _methodNames.contains(hasIdentifier) ||
- _methodNames.contains(clearIdentifier)) {
- identifier += '_' + field.number.toString();
- hasIdentifier += '_' + field.number.toString();
- clearIdentifier += '_' + field.number.toString();
- }
- _methodNames.add(identifier);
- _methodNames.add(hasIdentifier);
- _methodNames.add(clearIdentifier);
- } else {
- while (_methodNames.contains(identifier)) {
- identifier += '_' + field.number.toString();
- }
- _methodNames.add(identifier);
- }
-
var fieldTypeString = field.getDartType(package);
var defaultExpr = field.getDefaultExpr();
- out.println('${fieldTypeString} get ${identifier}'
+ var names = field.memberNames;
+
+ out.println('${fieldTypeString} get ${names.fieldName}'
' => \$_get('
'${field.index}, ${field.number}, $defaultExpr);');
if (!field.isRepeated) {
var fastSetter = field.baseType.setter;
if (fastSetter != null) {
- out.println('void set $identifier'
+ out.println('void set ${names.fieldName}'
'($fieldTypeString v) { '
'$fastSetter(${field.index}, ${field.number}, v);'
' }');
} else {
- out.println('void set $identifier'
+ out.println('void set ${names.fieldName}'
'($fieldTypeString v) { '
'setField(${field.number}, v);'
' }');
}
- out.println('bool $hasIdentifier() =>'
+ out.println('bool ${names.hasMethodName}() =>'
' \$_has(${field.index}, ${field.number});');
- out.println('void $clearIdentifier() =>'
+ out.println('void ${names.clearMethodName}() =>'
' clearField(${field.number});');
}
}
« no previous file with comments | « lib/extension_generator.dart ('k') | lib/names.dart » ('j') | lib/names.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698