code: private static boolean hasFixedPointParent(Node expr) {
      // Most kinds of nodes shouldn't be branches in the fixed-point tree of an unused
      // expression. Those listed below are the only valid kinds.
      switch (expr.getParent().getToken()) {
        case AND:
        case COMMA:
        case HOOK:
        case OR:
          return true;
        case ARRAYLIT:
          // Make a special allowance for SPREADs so they remain in a legal context. Iterable SPREADs
          // with other parent types are not fixed-point because ARRAYLIT is the tersest legal parent
          // and is known to be side-effect free.
          return expr.isSpread();
        default:
          // Statments are always fixed-point parents. All other expressions are not.
          return NodeUtil.isStatement(expr.getParent());
      }
    }
docs: Returns {@code true} iff {@code expr} is parented such that it is valid in a fixed-point
  representation of an unused expression tree.
  
  <p>A fixed-point representation is one in which no futher nodes should be changed or removed
  when removing unused code. This method assumes that the expression tree in question is unused,
  so only side-effects are relevant.