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 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 // The type of this extension is defined in a different file, | 48 // The type of this extension is defined in a different file, |
49 // so we need to import it. | 49 // so we need to import it. |
50 imports.add(typeGen.fileGen); | 50 imports.add(typeGen.fileGen); |
51 } | 51 } |
52 } | 52 } |
53 | 53 |
54 void generate(IndentingWriter out) { | 54 void generate(IndentingWriter out) { |
55 if (_field == null) throw new StateError("resolve not called"); | 55 if (_field == null) throw new StateError("resolve not called"); |
56 | 56 |
57 String name = _field.dartFieldName; | 57 String name = _field.dartFieldName; |
| 58 var type = _field.baseType; |
| 59 var dartType = type.getDartType(package); |
58 | 60 |
59 if (_field.isRepeated) { | 61 if (_field.isRepeated) { |
60 out.print('static final Extension $name = ' | 62 out.print('static final Extension $name = ' |
61 'new Extension.repeated(\'$_extendedClassName\', \'$name\', ' | 63 'new Extension<$dartType>.repeated(\'$_extendedClassName\',' |
62 '${_field.number}, ${_field.typeConstant}'); | 64 ' \'$name\', ${_field.number}, ${_field.typeConstant}'); |
63 var type = _field.baseType; | |
64 if (type.isMessage || type.isGroup) { | 65 if (type.isMessage || type.isGroup) { |
65 var dartClass = type.getDartType(package); | 66 out.println(', $dartType.$checkItem, $dartType.create);'); |
66 out.println(', $dartClass.$checkItem, $dartClass.create);'); | |
67 } else if (type.isEnum) { | 67 } else if (type.isEnum) { |
68 var dartClass = type.getDartType(package); | 68 out.println(', $dartType.$checkItem, null, $dartType.valueOf);'); |
69 out.println(', $dartClass.$checkItem, null, $dartClass.valueOf);'); | |
70 } else { | 69 } else { |
71 out.println(", getCheckFunction(${_field.typeConstant}));"); | 70 out.println(", getCheckFunction(${_field.typeConstant}));"); |
72 } | 71 } |
73 return; | 72 return; |
74 } | 73 } |
75 | 74 |
76 out.print('static final Extension $name = ' | 75 out.print('static final Extension $name = ' |
77 'new Extension(\'$_extendedClassName\', \'$name\', ' | 76 'new Extension<$dartType>(\'$_extendedClassName\', \'$name\', ' |
78 '${_field.number}, ${_field.typeConstant}'); | 77 '${_field.number}, ${_field.typeConstant}'); |
79 | 78 |
80 String initializer = _field.generateDefaultFunction(package); | 79 String initializer = _field.generateDefaultFunction(package); |
81 | 80 |
82 var type = _field.baseType; | |
83 if (type.isMessage || type.isGroup) { | 81 if (type.isMessage || type.isGroup) { |
84 var dartClass = type.getDartType(package); | 82 out.println(', $initializer, $dartType.create);'); |
85 out.println(', $initializer, $dartClass.create);'); | |
86 } else if (type.isEnum) { | 83 } else if (type.isEnum) { |
87 var dartEnum = type.getDartType(package); | 84 var dartEnum = type.getDartType(package); |
88 String valueOf = '(var v) => $dartEnum.valueOf(v)'; | 85 String valueOf = '(var v) => $dartEnum.valueOf(v)'; |
89 out.println(", $initializer, null, $valueOf);"); | 86 out.println(", $initializer, null, $valueOf);"); |
90 } else if (initializer != null) { | 87 } else if (initializer != null) { |
91 out.println(", $initializer);"); | 88 out.println(", $initializer);"); |
92 } else { | 89 } else { |
93 out.println(");"); | 90 out.println(");"); |
94 } | 91 } |
95 } | 92 } |
96 } | 93 } |
OLD | NEW |