inGetterContext method

  1. @override
bool inGetterContext()
override

Return true if this expression is computing a right-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 inGetterContext() {
  // TODO(brianwilkerson) Convert this to a getter.
  AstNode initialParent = this.parent!;
  AstNode parent = initialParent;
  AstNode target = this;
  // skip prefix
  if (initialParent is PrefixedIdentifier) {
    if (identical(initialParent.prefix, this)) {
      return true;
    }
    parent = initialParent.parent!;
    target = initialParent;
  } else if (initialParent is PropertyAccess) {
    if (identical(initialParent.target, this)) {
      return true;
    }
    parent = initialParent.parent!;
    target = initialParent;
  }
  // skip label
  if (parent is Label) {
    return false;
  }
  // analyze usage
  if (parent is AssignmentExpression) {
    if (identical(parent.leftHandSide, target) &&
        parent.operator.type == TokenType.EQ) {
      return false;
    }
  }
  if (parent is ConstructorFieldInitializer &&
      identical(parent.fieldName, target)) {
    return false;
  }
  if (parent is ForEachPartsWithIdentifier) {
    if (identical(parent.identifier, target)) {
      return false;
    }
  }
  return true;
}