Add 'redirectedConstructor' to unit API signature.
ConstructorElement.redirectedConstructor exposes this data, so we
should include it into the signature.
Change-Id: I87d339589694b63709f722f6b5242fb95c1085d7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175220
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
index f916888..6968796 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
@@ -28,15 +28,11 @@
signature.addInt(node.members.length);
for (var member in node.members) {
if (member is ConstructorDeclaration) {
- var lastInitializer = member.constKeyword != null &&
- member.initializers != null &&
- member.initializers.isNotEmpty
- ? member.initializers.last
- : null;
- addTokens(
- member.beginToken,
- (lastInitializer ?? member.parameters ?? member.name).endToken,
- );
+ addTokens(member.beginToken, member.parameters.endToken);
+ if (member.constKeyword != null) {
+ addNodeList(member.initializers);
+ }
+ addNode(member.redirectedConstructor);
} else if (member is FieldDeclaration) {
var variableList = member.fields;
addVariables(
@@ -65,7 +61,15 @@
}
void addNode(AstNode node) {
- addTokens(node.beginToken, node.endToken);
+ if (node != null) {
+ addTokens(node.beginToken, node.endToken);
+ }
+ }
+
+ void addNodeList(List<AstNode> nodes) {
+ for (var node in nodes) {
+ addNode(node);
+ }
}
void addToken(Token token) {
diff --git a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
index 612a392..83e8192 100644
--- a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
@@ -192,6 +192,46 @@
''');
}
+ test_class_constructor_redirectedConstructor_const() {
+ assertNotSameSignature(r'''
+class A {
+ const factory A() = B.foo;
+}
+class B implements A {
+ const B.foo();
+ const B.bar();
+}
+''', r'''
+class A {
+ const factory A() = B.bar;
+}
+class B implements A {
+ const B.foo();
+ const B.bar();
+}
+''');
+ }
+
+ test_class_constructor_redirectedConstructor_notConst() {
+ assertNotSameSignature(r'''
+class A {
+ factory A() = B.foo;
+}
+class B implements A {
+ B.foo();
+ B.bar();
+}
+''', r'''
+class A {
+ factory A() = B.bar;
+}
+class B implements A {
+ B.foo();
+ B.bar();
+}
+''');
+ }
+
test_class_extends() {
assertNotSameSignature(r'''
class A {}