Skip to content

Commit 03d9d6e

Browse files
authored
Sync changes from internal repo. (flutter#133)
Namely, the last major external change (support for Any proto) caused a large breakage internally because of the new behavior of BuilderInfo.messageName. This getter has been reverted back to its original behavior, and a new BuilderInfo.qualifiedMessageName has been introduced.
1 parent 5e5bc71 commit 03d9d6e

File tree

10 files changed

+53
-18
lines changed

10 files changed

+53
-18
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.10.4
2+
3+
* Added separate getter for `BuilderInfo.qualifiedMessageName`.
4+
15
## 0.10.3
26

37
* Added type argument to `ProtobufEnum.initByValue` which allows the return

lib/src/protobuf/builder_info.dart

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ part of protobuf;
77
/// Per-message type setup.
88
class BuilderInfo {
99
/// The fully qualified name of this message.
10-
final String messageName;
10+
final String qualifiedMessageName;
1111
final List<FieldInfo> byIndex = <FieldInfo>[];
1212
final Map<int, FieldInfo> fieldInfo = new Map<int, FieldInfo>();
1313
final Map<String, FieldInfo> byTagAsString = <String, FieldInfo>{};
@@ -17,7 +17,7 @@ class BuilderInfo {
1717
List<FieldInfo> _sortedByTag;
1818

1919
BuilderInfo(String messageName, {PackageName package = const PackageName('')})
20-
: messageName = "${package.prefix}$messageName";
20+
: qualifiedMessageName = "${package.prefix}$messageName";
2121

2222
void add<T>(
2323
int tagNumber,
@@ -151,9 +151,17 @@ class BuilderInfo {
151151
return i != null ? i.valueOf : null;
152152
}
153153

154-
/// Returns the FieldInfo for each field in tag number order.
154+
/// The FieldInfo for each field in tag number order.
155155
List<FieldInfo> get sortedByTag => _sortedByTag ??= _computeSortedByTag();
156156

157+
/// The message name. Also see [qualifiedMessageName].
158+
String get messageName {
159+
final lastDot = qualifiedMessageName.lastIndexOf('.');
160+
return lastDot == -1
161+
? qualifiedMessageName
162+
: qualifiedMessageName.substring(lastDot + 1);
163+
}
164+
157165
List<FieldInfo> _computeSortedByTag() {
158166
// TODO(skybrian): perhaps the code generator should insert the FieldInfos
159167
// in tag number order, to avoid sorting them?
@@ -165,16 +173,17 @@ class BuilderInfo {
165173
int tagNumber, ExtensionRegistry extensionRegistry) {
166174
CreateBuilderFunc subBuilderFunc = subBuilder(tagNumber);
167175
if (subBuilderFunc == null && extensionRegistry != null) {
168-
subBuilderFunc =
169-
extensionRegistry.getExtension(messageName, tagNumber).subBuilder;
176+
subBuilderFunc = extensionRegistry
177+
.getExtension(qualifiedMessageName, tagNumber)
178+
.subBuilder;
170179
}
171180
return subBuilderFunc();
172181
}
173182

174183
_decodeEnum(int tagNumber, ExtensionRegistry registry, int rawValue) {
175184
ValueOfFunc f = valueOfFunc(tagNumber);
176185
if (f == null && registry != null) {
177-
f = registry.getExtension(messageName, tagNumber).valueOf;
186+
f = registry.getExtension(qualifiedMessageName, tagNumber).valueOf;
178187
}
179188
return f(rawValue);
180189
}

lib/src/protobuf/coded_buffer_reader.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class CodedBufferReader {
1717
final int _sizeLimit;
1818

1919
CodedBufferReader(List<int> buffer,
20-
{int recursionLimit: DEFAULT_RECURSION_LIMIT,
21-
int sizeLimit: DEFAULT_SIZE_LIMIT})
20+
{int recursionLimit = DEFAULT_RECURSION_LIMIT,
21+
int sizeLimit = DEFAULT_SIZE_LIMIT})
2222
: _buffer = buffer is Uint8List ? buffer : new Uint8List(buffer.length)
2323
..setRange(0, buffer.length, buffer),
2424
_recursionLimit = recursionLimit,

lib/src/protobuf/field_set.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class _FieldSet {
6363

6464
// Metadata about multiple fields
6565

66-
String get _messageName => _meta.messageName;
66+
String get _messageName => _meta.qualifiedMessageName;
6767
bool get _hasRequiredFields => _meta.hasRequiredFields;
6868

6969
/// The FieldInfo for each non-extension field.

lib/src/protobuf/mixins/map_mixin.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ abstract class PbMapMixin {
3232
var tag = getTagNumber(key as String);
3333
if (tag == null) {
3434
throw new ArgumentError(
35-
"field '${key}' not found in ${info_.messageName}");
35+
"field '${key}' not found in ${info_.qualifiedMessageName}");
3636
}
3737
setField(tag, val);
3838
}
@@ -45,6 +45,6 @@ abstract class PbMapMixin {
4545

4646
remove(key) {
4747
throw new UnsupportedError(
48-
"remove() not supported by ${info_.messageName}");
48+
"remove() not supported by ${info_.qualifiedMessageName}");
4949
}
5050
}

lib/src/protobuf/pb_list.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,9 @@ abstract class PbListBase<E> extends ListBase<E> {
154154
final List<E> _wrappedList;
155155
final CheckFunc<E> check;
156156

157-
PbListBase._(this._wrappedList, {this.check: _checkNotNull}) {}
157+
PbListBase._(this._wrappedList, {this.check = _checkNotNull}) {}
158158

159-
PbListBase._noList({this.check: _checkNotNull}) : _wrappedList = <E>[] {
159+
PbListBase._noList({this.check = _checkNotNull}) : _wrappedList = <E>[] {
160160
assert(check != null);
161161
}
162162

@@ -222,7 +222,7 @@ abstract class PbListBase<E> extends ListBase<E> {
222222
bool any(bool test(E element)) => _wrappedList.any(test);
223223

224224
/// Creates a [List] containing the elements of this [Iterable].
225-
List<E> toList({bool growable: true}) =>
225+
List<E> toList({bool growable = true}) =>
226226
_wrappedList.toList(growable: growable);
227227

228228
/// Creates a [Set] containing the same elements as this iterable.

lib/src/protobuf/readonly_message.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ abstract class ReadonlyMessageMixin {
5353
_readonly("setField");
5454

5555
void _readonly(String methodName) {
56-
String messageType = info_.messageName;
56+
String messageType = info_.qualifiedMessageName;
5757
frozenMessageModificationHandler(messageType, methodName);
5858
}
5959
}

lib/src/protobuf/unpack.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ void unpackIntoHelper<T extends GeneratedMessage>(
2121
// in the type URL, for example "foo.bar.com/x/y.z" will yield type
2222
// name "y.z".
2323
if (!canUnpackIntoHelper(instance, typeUrl)) {
24-
String typeName = instance.info_.messageName;
24+
String typeName = instance.info_.qualifiedMessageName;
2525
throw new InvalidProtocolBufferException.wrongAnyMessage(
2626
_typeNameFromUrl(typeUrl), typeName);
2727
}
@@ -33,7 +33,7 @@ void unpackIntoHelper<T extends GeneratedMessage>(
3333
///
3434
/// This is a helper method for `Any.canUnpackInto`.
3535
bool canUnpackIntoHelper(GeneratedMessage instance, String typeUrl) {
36-
return instance.info_.messageName == _typeNameFromUrl(typeUrl);
36+
return instance.info_.qualifiedMessageName == _typeNameFromUrl(typeUrl);
3737
}
3838

3939
String _typeNameFromUrl(String typeUrl) {

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: protobuf
2-
version: 0.10.3
2+
version: 0.10.4
33
author: Dart Team <[email protected]>
44
description: >
55
Runtime library for protocol buffers support.

test/builder_info_test.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
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.
4+
5+
import 'package:protobuf/protobuf.dart';
6+
import 'package:test/test.dart';
7+
8+
main() {
9+
group('className', () {
10+
final qualifiedmessageName = 'proto.test.TestMessage';
11+
final expectedMessageName = 'TestMessage';
12+
test('truncates qualifiedMessageName containing dots', () {
13+
final info = new BuilderInfo(qualifiedmessageName);
14+
expect(info.messageName, expectedMessageName);
15+
});
16+
17+
test('uses qualifiedMessageName if it contains no dots', () {
18+
final info = new BuilderInfo(expectedMessageName);
19+
expect(info.messageName, expectedMessageName);
20+
});
21+
});
22+
}

0 commit comments

Comments
 (0)