| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of protoc; | 5 part of protoc; |
| 6 | 6 |
| 7 class EnumAlias { | 7 class EnumAlias { |
| 8 final EnumValueDescriptorProto value; | 8 final EnumValueDescriptorProto value; |
| 9 final EnumValueDescriptorProto canonicalValue; | 9 final EnumValueDescriptorProto canonicalValue; |
| 10 EnumAlias(this.value, this.canonicalValue); | 10 EnumAlias(this.value, this.canonicalValue); |
| 11 } | 11 } |
| 12 | 12 |
| 13 class EnumGenerator implements ProtobufContainer { | 13 class EnumGenerator implements ProtobufContainer { |
| 14 final ProtobufContainer _parent; |
| 14 final String classname; | 15 final String classname; |
| 15 final String fqname; | 16 final String fqname; |
| 16 final List<EnumValueDescriptorProto> _canonicalValues = | 17 final List<EnumValueDescriptorProto> _canonicalValues = |
| 17 <EnumValueDescriptorProto>[]; | 18 <EnumValueDescriptorProto>[]; |
| 18 final List<EnumAlias> _aliases = <EnumAlias>[]; | 19 final List<EnumAlias> _aliases = <EnumAlias>[]; |
| 19 | 20 |
| 20 EnumGenerator( | 21 EnumGenerator( |
| 21 EnumDescriptorProto descriptor, | 22 EnumDescriptorProto descriptor, |
| 22 ProtobufContainer parent, | 23 ProtobufContainer parent, |
| 23 GenerationContext context) | 24 GenerationContext context) |
| 24 : classname = (parent == null || parent is FileGenerator) ? | 25 : _parent = parent, |
| 26 classname = (parent == null || parent is FileGenerator) ? |
| 25 descriptor.name : '${parent.classname}_${descriptor.name}', | 27 descriptor.name : '${parent.classname}_${descriptor.name}', |
| 26 fqname = (parent == null || parent.fqname == null) ? descriptor.name : | 28 fqname = (parent == null || parent.fqname == null) ? descriptor.name : |
| 27 (parent.fqname == '.' ? | 29 (parent.fqname == '.' ? |
| 28 '.${descriptor.name}' : '${parent.fqname}.${descriptor.name}') { | 30 '.${descriptor.name}' : '${parent.fqname}.${descriptor.name}') { |
| 29 for (EnumValueDescriptorProto value in descriptor.value) { | 31 for (EnumValueDescriptorProto value in descriptor.value) { |
| 30 EnumValueDescriptorProto canonicalValue = | 32 EnumValueDescriptorProto canonicalValue = |
| 31 descriptor.value.firstWhere((v) => v.number == value.number); | 33 descriptor.value.firstWhere((v) => v.number == value.number); |
| 32 if (value == canonicalValue) { | 34 if (value == canonicalValue) { |
| 33 _canonicalValues.add(value); | 35 _canonicalValues.add(value); |
| 34 } else { | 36 } else { |
| 35 _aliases.add(new EnumAlias(value, canonicalValue)); | 37 _aliases.add(new EnumAlias(value, canonicalValue)); |
| 36 } | 38 } |
| 37 } | 39 } |
| 38 context.register(this); | 40 context.register(this); |
| 39 } | 41 } |
| 40 | 42 |
| 43 String get package => _parent.package; |
| 44 |
| 41 void generate(IndentingWriter out) { | 45 void generate(IndentingWriter out) { |
| 42 out.addBlock('class ${classname} extends ProtobufEnum {', '}\n', () { | 46 out.addBlock('class ${classname} extends ProtobufEnum {', '}\n', () { |
| 43 // ----------------------------------------------------------------- | 47 // ----------------------------------------------------------------- |
| 44 // Define enum types. | 48 // Define enum types. |
| 45 for (EnumValueDescriptorProto val in _canonicalValues) { | 49 for (EnumValueDescriptorProto val in _canonicalValues) { |
| 46 out.println( | 50 out.println( |
| 47 'static const ${classname} ${val.name}${SP}=${SP}' | 51 'static const ${classname} ${val.name}${SP}=${SP}' |
| 48 "const ${classname}._(${val.number},${SP}'${val.name}');"); | 52 "const ${classname}._(${val.number},${SP}'${val.name}');"); |
| 49 } | 53 } |
| 50 if (!_aliases.isEmpty) { | 54 if (!_aliases.isEmpty) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 69 '${SP}ProtobufEnum.initByValue(values);'); | 73 '${SP}ProtobufEnum.initByValue(values);'); |
| 70 out.println('static ${classname} valueOf(int value)${SP}=>' | 74 out.println('static ${classname} valueOf(int value)${SP}=>' |
| 71 '${SP}_byValue[value];'); | 75 '${SP}_byValue[value];'); |
| 72 out.println(); | 76 out.println(); |
| 73 | 77 |
| 74 out.println('const ${classname}._(int v,${SP}String n)${SP}' | 78 out.println('const ${classname}._(int v,${SP}String n)${SP}' |
| 75 ':${SP}super(v,${SP}n);'); | 79 ':${SP}super(v,${SP}n);'); |
| 76 }); | 80 }); |
| 77 } | 81 } |
| 78 } | 82 } |
| OLD | NEW |