Testing: don't return static methods in findMemberNames (#618)
This refactors the fix for #527 and improves on it. We now filter out static
methods in `findMemberNames`. Static methods cannot be overridden or shadowed
in subclasses so we don't consider them as reserved.
Static methods `GeneratedMessage.$_defaultFor` and `ProtobufEnum.initByValue`
are removed from reserved names lists. These were probably added because we
didn't properly remove static methods in `findMemberNames` before.
Closes #527
diff --git a/protobuf/lib/meta.dart b/protobuf/lib/meta.dart
index 6601c02..73a65e8 100644
--- a/protobuf/lib/meta.dart
+++ b/protobuf/lib/meta.dart
@@ -60,7 +60,6 @@
'writeToCodedBufferWriter',
'writeToJson',
'writeToJsonMap',
- r'$_defaultFor',
r'$_ensure',
r'$_get',
r'$_getI64',
@@ -91,7 +90,6 @@
'Object',
'ProtobufEnum',
'hashCode',
- 'initByValue',
'noSuchMethod',
'runtimeType',
'toString'
diff --git a/protoc_plugin/test/mirror_util.dart b/protoc_plugin/test/mirror_util.dart
index 959a4f5..70a7487 100644
--- a/protoc_plugin/test/mirror_util.dart
+++ b/protoc_plugin/test/mirror_util.dart
@@ -4,8 +4,8 @@
import 'dart:mirrors';
-/// Returns the names of the public properties and methods on a class.
-/// (Also visits its superclasses, recursively.)
+/// Returns the names of the public properties and non-static methods of a
+/// class. Also visits its superclasses, recursively.
Set<String> findMemberNames(String importName, Symbol classSymbol) {
var lib = currentMirrorSystem().libraries[Uri.parse(importName)]!;
var cls = lib.declarations[classSymbol] as ClassMirror?;
@@ -26,7 +26,8 @@
for (var decl in cls.declarations.values) {
if (!decl.isPrivate &&
decl is! VariableMirror &&
- decl is! TypeVariableMirror) {
+ decl is! TypeVariableMirror &&
+ !(decl is MethodMirror && decl.isStatic)) {
result.add(chooseName(decl.simpleName));
}
}
diff --git a/protoc_plugin/test/reserved_names_test.dart b/protoc_plugin/test/reserved_names_test.dart
index dbac073..dfc19ad 100755
--- a/protoc_plugin/test/reserved_names_test.dart
+++ b/protoc_plugin/test/reserved_names_test.dart
@@ -26,9 +26,7 @@
test('GeneratedMessage reserved names are up to date', () {
var actual = Set<String>.from(GeneratedMessage_reservedNames);
var expected =
- findMemberNames('package:protobuf/protobuf.dart', #GeneratedMessage)
- // TODO: see https://github.com/google/protobuf.dart/issues/527
- ..removeAll(_oneOffNames);
+ findMemberNames('package:protobuf/protobuf.dart', #GeneratedMessage);
expect(actual.toList()..sort(), equals(expected.toList()..sort()));
});
@@ -36,18 +34,14 @@
test('ProtobufEnum reserved names are up to date', () {
var actual = Set<String>.from(ProtobufEnum_reservedNames);
var expected =
- findMemberNames('package:protobuf/protobuf.dart', #ProtobufEnum)
- // TODO: see https://github.com/google/protobuf.dart/issues/527
- ..removeAll(_oneOffNames);
+ findMemberNames('package:protobuf/protobuf.dart', #ProtobufEnum);
expect(actual.toList()..sort(), equals(expected.toList()..sort()));
});
test("ReadonlyMessageMixin doesn't add any reserved names", () {
- var mixinNames =
- findMemberNames('package:protobuf/protobuf.dart', #ReadonlyMessageMixin)
- // TODO: see https://github.com/google/protobuf.dart/issues/527
- ..removeAll(_oneOffNames);
+ var mixinNames = findMemberNames(
+ 'package:protobuf/protobuf.dart', #ReadonlyMessageMixin);
var reservedNames = Set<String>.from(GeneratedMessage_reservedNames);
for (var name in mixinNames) {
if (name == 'ReadonlyMessageMixin' || name == 'unknownFields') continue;
@@ -63,9 +57,7 @@
var expected = findMemberNames(meta.importFrom, #PbMapMixin)
..addAll(findMemberNames('dart:collection', #MapMixin))
- ..removeAll(GeneratedMessage_reservedNames)
- // TODO: see https://github.com/google/protobuf.dart/issues/527
- ..removeAll(_oneOffNames);
+ ..removeAll(GeneratedMessage_reservedNames);
expect(
actual.toList()..sort(), containsAllInOrder(expected.toList()..sort()));
@@ -76,17 +68,8 @@
var actual = Set<String>.from(meta.findReservedNames());
var expected = findMemberNames(meta.importFrom, #PbEventMixin)
- ..removeAll(GeneratedMessage_reservedNames)
- // TODO: see https://github.com/google/protobuf.dart/issues/527
- ..removeAll(_oneOffNames);
+ ..removeAll(GeneratedMessage_reservedNames);
expect(actual.toList()..sort(), equals(expected.toList()..sort()));
});
}
-
-// See https://github.com/google/protobuf.dart/issues/527
-const _oneOffNames = {
- 'hash',
- 'hashAll',
- 'hashAllUnordered',
-};