| 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 ExtensionGenerator { | 7 class ExtensionGenerator { |
| 8 final FieldDescriptorProto _descriptor; | 8 final FieldDescriptorProto _descriptor; |
| 9 final ProtobufContainer _parent; | 9 final ProtobufContainer _parent; |
| 10 | 10 |
| 11 // populated by resolve() | 11 // populated by resolve() |
| 12 ProtobufField _field; | 12 ProtobufField _field; |
| 13 String _extensionName; |
| 13 String _extendedClassName = ""; | 14 String _extendedClassName = ""; |
| 14 | 15 |
| 15 ExtensionGenerator(this._descriptor, this._parent); | 16 ExtensionGenerator(this._descriptor, this._parent); |
| 16 | 17 |
| 17 void resolve(GenerationContext ctx) { | 18 void resolve(GenerationContext ctx) { |
| 18 _field = new ProtobufField(_descriptor, null, _parent, ctx); | 19 _extensionName = extensionName(_descriptor); |
| 20 _field = new ProtobufField.extension(_descriptor, _parent, ctx); |
| 19 | 21 |
| 20 ProtobufContainer extendedType = ctx.getFieldType(_descriptor.extendee); | 22 ProtobufContainer extendedType = ctx.getFieldType(_descriptor.extendee); |
| 21 // TODO(skybrian) When would this be null? | 23 // TODO(skybrian) When would this be null? |
| 22 if (extendedType != null) { | 24 if (extendedType != null) { |
| 23 _extendedClassName = extendedType.classname; | 25 _extendedClassName = extendedType.classname; |
| 24 } | 26 } |
| 25 } | 27 } |
| 26 | 28 |
| 27 String get package => _parent.package; | 29 String get package => _parent.package; |
| 28 | 30 |
| 29 /// The generator of the .pb.dart file where this extension will be defined. | 31 /// The generator of the .pb.dart file where this extension will be defined. |
| 30 FileGenerator get fileGen => _parent.fileGen; | 32 FileGenerator get fileGen => _parent.fileGen; |
| 31 | 33 |
| 32 String get name { | 34 String get name { |
| 33 if (_field == null) throw new StateError("resolve not called"); | 35 if (_field == null) throw new StateError("resolve not called"); |
| 34 String name = _field.dartFieldName; | 36 String name = _extensionName; |
| 35 return _parent is MessageGenerator ? '${_parent.classname}.$name' : name; | 37 return _parent is MessageGenerator ? '${_parent.classname}.$name' : name; |
| 36 } | 38 } |
| 37 | 39 |
| 38 bool get needsFixnumImport { | 40 bool get needsFixnumImport { |
| 39 if (_field == null) throw new StateError("resolve not called"); | 41 if (_field == null) throw new StateError("resolve not called"); |
| 40 return _field.needsFixnumImport; | 42 return _field.needsFixnumImport; |
| 41 } | 43 } |
| 42 | 44 |
| 43 /// Adds dependencies of [generate] to [imports]. | 45 /// Adds dependencies of [generate] to [imports]. |
| 44 /// | 46 /// |
| (...skipping 20 matching lines...) Expand all Loading... |
| 65 /// For each .pb.dart file that the generated code needs to import, | 67 /// For each .pb.dart file that the generated code needs to import, |
| 66 /// add its generator. | 68 /// add its generator. |
| 67 void addConstantImportsTo(Set<FileGenerator> imports) { | 69 void addConstantImportsTo(Set<FileGenerator> imports) { |
| 68 if (_field == null) throw new StateError("resolve not called"); | 70 if (_field == null) throw new StateError("resolve not called"); |
| 69 // No dependencies - nothing to do. | 71 // No dependencies - nothing to do. |
| 70 } | 72 } |
| 71 | 73 |
| 72 void generate(IndentingWriter out) { | 74 void generate(IndentingWriter out) { |
| 73 if (_field == null) throw new StateError("resolve not called"); | 75 if (_field == null) throw new StateError("resolve not called"); |
| 74 | 76 |
| 75 String name = _field.dartFieldName; | 77 String name = _extensionName; |
| 76 var type = _field.baseType; | 78 var type = _field.baseType; |
| 77 var dartType = type.getDartType(package); | 79 var dartType = type.getDartType(package); |
| 78 | 80 |
| 79 if (_field.isRepeated) { | 81 if (_field.isRepeated) { |
| 80 out.print('static final Extension $name = ' | 82 out.print('static final Extension $name = ' |
| 81 'new Extension<$dartType>.repeated(\'$_extendedClassName\',' | 83 'new Extension<$dartType>.repeated(\'$_extendedClassName\',' |
| 82 ' \'$name\', ${_field.number}, ${_field.typeConstant}'); | 84 ' \'$name\', ${_field.number}, ${_field.typeConstant}'); |
| 83 if (type.isMessage || type.isGroup) { | 85 if (type.isMessage || type.isGroup) { |
| 84 out.println(', $dartType.$checkItem, $dartType.create);'); | 86 out.println(', $dartType.$checkItem, $dartType.create);'); |
| 85 } else if (type.isEnum) { | 87 } else if (type.isEnum) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 102 var dartEnum = type.getDartType(package); | 104 var dartEnum = type.getDartType(package); |
| 103 String valueOf = '(var v) => $dartEnum.valueOf(v)'; | 105 String valueOf = '(var v) => $dartEnum.valueOf(v)'; |
| 104 out.println(", $initializer, null, $valueOf);"); | 106 out.println(", $initializer, null, $valueOf);"); |
| 105 } else if (initializer != null) { | 107 } else if (initializer != null) { |
| 106 out.println(", $initializer);"); | 108 out.println(", $initializer);"); |
| 107 } else { | 109 } else { |
| 108 out.println(");"); | 110 out.println(");"); |
| 109 } | 111 } |
| 110 } | 112 } |
| 111 } | 113 } |
| OLD | NEW |