The synthetic default constructor should have reference.
We use ElementImpl.reference to store references to elements.
So, all elements must have one, even synthetic.
R=brianwilkerson@google.com
Change-Id: I29932449d97816108a6c1fca6db3fe7162baa1ce
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99781
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 2159a8a..2750b66 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -560,6 +560,19 @@
}
return ConstructorElementImpl.forLinkedNode(this, reference, node);
}).toList();
+
+ if (_constructors.isEmpty) {
+ return _constructors = [
+ ConstructorElementImpl.forLinkedNode(
+ this,
+ containerRef.getChild(''),
+ null,
+ )
+ ..isSynthetic = true
+ ..name = ''
+ ..nameOffset = -1,
+ ];
+ }
}
if (_unlinkedClass != null) {
diff --git a/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart b/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart
index 06d86ce..8ab18a5 100644
--- a/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linking_bundle_context.dart
@@ -46,15 +46,12 @@
int indexOfElement(Element element) {
if (element == null) return 0;
+ assert(element is! Member);
if (identical(element, DynamicElementImpl.instance)) {
return indexOfReference(dynamicReference);
}
- if (element is Member) {
- element = (element as Member).baseElement;
- }
-
var reference = (element as ElementImpl).reference;
return indexOfReference(reference);
}