inSetterContext method

  1. @override
bool inSetterContext()
override

Return true if this expression is computing a left-hand value.

Note that inGetterContext and inSetterContext are not opposites, nor are they mutually exclusive. In other words, it is possible for both methods to return true when invoked on the same node.

Implementation

@override
bool inSetterContext() {
  // TODO(brianwilkerson) Convert this to a getter.
  AstNode initialParent = this.parent!;
  AstNode parent = initialParent;
  AstNode target = this;
  // skip prefix
  if (initialParent is PrefixedIdentifier) {
    // if this is the prefix, then return false
    if (identical(initialParent.prefix, this)) {
      return false;
    }
    parent = initialParent.parent!;
    target = initialParent;
  } else if (initialParent is PropertyAccess) {
    if (identical(initialParent.target, this)) {
      return false;
    }
    parent = initialParent.parent!;
    target = initialParent;
  }
  // analyze usage
  if (parent is PrefixExpression) {
    return parent.operator.type.isIncrementOperator;
  } else if (parent is PostfixExpression) {
    return parent.operator.type.isIncrementOperator;
  } else if (parent is AssignmentExpression) {
    return identical(parent.leftHandSide, target);
  } else if (parent is ForEachPartsWithIdentifier) {
    return identical(parent.identifier, target);
  }
  return false;
}