| Index: lib/compiler/implementation/dart_backend/placeholder_collector.dart
|
| diff --git a/lib/compiler/implementation/dart_backend/placeholder_collector.dart b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
|
| index b2197e20ed52637a1fd4724035c7b691f1a6bd1a..21d08ced41747468a001ae963d6ed3cc23a257c1 100644
|
| --- a/lib/compiler/implementation/dart_backend/placeholder_collector.dart
|
| +++ b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
|
| @@ -375,10 +375,19 @@ class PlaceholderCollector extends AbstractVisitor {
|
| }
|
|
|
| visitSendSet(SendSet send) {
|
| - final element = treeElements[send];
|
| - if (!Elements.isUnresolved(element)) {
|
| + Element element = treeElements[send];
|
| + if (Elements.isErroneousElement(element)) {
|
| + // Complicated case: constructs like receiver.selector++ can resolve
|
| + // to ErroneousElement. Fortunately, receiver.selector still
|
| + // can be resoved via treeElements[send.selector], that's all
|
| + // that is needed to rename the construct properly.
|
| + element = treeElements[send.selector];
|
| + }
|
| + if (element === null) {
|
| + if (send.receiver !== null) tryMakeMemberPlaceholder(send.selector);
|
| + } else if (!element.isErroneous()) {
|
| if (Elements.isStaticOrTopLevel(element)) {
|
| - assert(element is VariableElement || element.isSetter());
|
| + assert(element is VariableElement || element.isAccessor());
|
| makeElementPlaceholder(send.selector, element);
|
| } else {
|
| assert(send.selector is Identifier);
|
| @@ -388,10 +397,6 @@ class PlaceholderCollector extends AbstractVisitor {
|
| tryMakeLocalPlaceholder(element, send.selector);
|
| }
|
| }
|
| - } else {
|
| - if (send.receiver !== null) {
|
| - tryMakeMemberPlaceholder(send.selector);
|
| - }
|
| }
|
| send.visitChildren(this);
|
| }
|
|
|