Chromium Code Reviews| Index: lib/protobuf_field.dart |
| diff --git a/lib/protobuf_field.dart b/lib/protobuf_field.dart |
| index 2a2b8c56ef660133f54886ff555ca425d1f1f001..bb2f6cc49d21b7001f61085fc271042eba2a9b79 100644 |
| --- a/lib/protobuf_field.dart |
| +++ b/lib/protobuf_field.dart |
| @@ -19,11 +19,15 @@ class ProtobufField { |
| final ProtobufContainer parent; |
| final GenerationContext context; |
| final String fqname; |
|
Siggi Cherem (dart-lang)
2013/12/20 18:27:36
I know this is unrelated, but what does 'fqname' s
Søren Gjesse
2014/01/02 08:52:33
fqname is the "fully qualified name", that is the
Siggi Cherem (dart-lang)
2014/01/02 18:29:46
I see, thanks for the clarification!
I think rena
|
| + final String typePackage; |
| final String baseType; |
| final String typeString; |
| + final String prefixedBaseType; |
|
Siggi Cherem (dart-lang)
2013/12/20 18:27:36
should we make these getters instead?
Søren Gjesse
2014/01/02 08:52:33
I decided to keep the current structure of final f
|
| + final String prefixedTypeString; |
| final String codedStreamType; |
| final bool repeats; |
| final String initialization; |
| + final String prefixedInitialization; |
| final bool required; |
| // True if the field is to be encoded with [packed=true] encoding. |
| final bool packed; |
| @@ -49,6 +53,13 @@ class ProtobufField { |
| FieldOptions get options => _field.options; |
| String get typeName => _field.typeName; |
| + String baseTypeForPackage(String package) => |
| + package == typePackage ? baseType : prefixedBaseType; |
| + String typeStringForPackage(String package) => |
| + package == typePackage ? typeString : prefixedTypeString; |
| + String initializationForPackage(String package) => |
| + package == typePackage ? initialization : prefixedInitialization; |
| + |
| String get shortTypeName { |
| String prefix; |
| if (required) { |
| @@ -86,8 +97,10 @@ class ProtobufField { |
| } |
| ProtobufField._( |
| - field, parent, this.context, this.baseType, this.typeString, |
| - this.codedStreamType, this.repeats, this.initialization, this.required, |
| + field, parent, this.context, this.typePackage, this.baseType, |
| + this.typeString, this.prefixedBaseType, this.prefixedTypeString, |
| + this.codedStreamType, this.repeats, |
| + this.initialization, this.prefixedInitialization, this.required, |
| this.packed, this.packable) : |
| this._field = field, |
| this.parent = parent, |
| @@ -109,11 +122,15 @@ class ProtobufField { |
| write = (String typeString) => typeString; |
| } |
| + String typePackage = ''; |
| String baseType; |
| String typeString; |
| + String prefixedBaseType; |
| + String prefixedTypeString; |
| bool packable = false; |
| String codedStreamType; |
| String initialization; |
| + String prefixedInitialization; |
| switch (field.type) { |
| case FieldDescriptorProto_Type.TYPE_BOOL: |
| baseType = 'bool'; |
| @@ -247,39 +264,55 @@ class ProtobufField { |
| case FieldDescriptorProto_Type.TYPE_GROUP: |
| ProtobufContainer groupType = context[field.typeName]; |
| if (groupType != null) { |
| + typePackage = groupType.package; |
| baseType = groupType.classname; |
| typeString = write(groupType.classname); |
| + prefixedBaseType = groupType.package + '.' + baseType; |
| + prefixedTypeString = write(prefixedBaseType); |
| codedStreamType = 'Group'; |
| } else { |
| throw 'FAILURE: Unknown group type reference ${field.typeName}'; |
| } |
| initialization = '()${SP}=>${SP}new ${baseType}()'; |
| + prefixedInitialization = '()${SP}=>${SP}new ${prefixedBaseType}()'; |
| break; |
| case FieldDescriptorProto_Type.TYPE_MESSAGE: |
| ProtobufContainer messageType = context[field.typeName]; |
| if (messageType != null) { |
| + typePackage = messageType.package; |
| baseType = messageType.classname; |
| - typeString = write(messageType.classname); |
| + typeString = write(baseType); |
| + prefixedBaseType = messageType.package + '.' + baseType; |
| + prefixedTypeString = write(prefixedBaseType); |
| codedStreamType = 'Message'; |
| } else { |
| throw 'FAILURE: Unknown message type reference ${field.typeName}'; |
| } |
| initialization = '()${SP}=>${SP}new ${baseType}()'; |
| + prefixedInitialization = '()${SP}=>${SP}new ${prefixedBaseType}()'; |
| break; |
| case FieldDescriptorProto_Type.TYPE_ENUM: |
| EnumGenerator enumType = context[field.typeName]; |
| if (enumType != null) { |
| + typePackage = enumType.package; |
| baseType = enumType.classname; |
| typeString = write(enumType.classname); |
| codedStreamType = 'Enum'; |
| + prefixedBaseType = enumType.package + '.' + baseType; |
| + prefixedTypeString = write(prefixedBaseType); |
| packable = true; |
| if (!repeats) { |
| if (field.hasDefaultValue() && !field.defaultValue.isEmpty) { |
| initialization = |
| - '()${SP}=>${SP}${enumType.classname}.${field.defaultValue}'; |
| + '()${SP}=>${SP}${baseType}.${field.defaultValue}'; |
| + prefixedInitialization = |
| + '()${SP}=>${SP}${prefixedBaseType}.${field.defaultValue}'; |
| } else if (!enumType._canonicalValues.isEmpty) { |
| initialization = |
| - '()${SP}=>${SP}${enumType.classname}.' |
| + '()${SP}=>${SP}${baseType}.' |
| + '${enumType._canonicalValues[0].name}'; |
| + prefixedInitialization = |
| + '()${SP}=>${SP}${prefixedBaseType}.' |
| '${enumType._canonicalValues[0].name}'; |
| } |
| } |
| @@ -296,9 +329,13 @@ class ProtobufField { |
| initialization = '()${SP}=>${SP}new PbList()'; |
| } |
| + if (prefixedBaseType == null) prefixedBaseType = baseType; |
| + if (prefixedTypeString == null) prefixedTypeString = typeString; |
| + if (prefixedInitialization == null) prefixedInitialization = initialization; |
| return new ProtobufField._( |
| - field, parent, context, baseType, typeString, codedStreamType, repeats, |
| - initialization, required, packed, packable); |
| + field, parent, context, typePackage, baseType, typeString, |
| + prefixedBaseType, prefixedTypeString, codedStreamType, repeats, |
| + initialization, prefixedInitialization, required, packed, packable); |
| } |
| // camelCase field name. |