anchor.diff:    void remove() {
       parent?.replaceChild(this, null);
       parent = null;
  +  }
  +
  +  Program get enclosingProgram => parent?.enclosingProgram;
  +
  +  /// Returns the best known source location of the given AST node, or `null` if
  +  /// the node is orphaned.
  +  ///
  +  /// This getter is intended for diagnostics and debugging, and should be
  +  /// avoided in production code.
  +  Location get location {
  +    if (fileOffset == noOffset) return parent?.location;
  +    return _getLocationInEnclosingFile(fileOffset);
  +  }
  +
  +  Location _getLocationInEnclosingFile(int offset) {
  +    return parent?._getLocationInEnclosingFile(offset);
     }
   }
   
  
positive.code:     transformList(constructors, v, this);
      transformList(procedures, v, this);
      transformList(fields, v, this);
    }
  }
  
  
negative.code:   void replaceSetterInterfaceWith(Procedure setter) {
      _setterInterface.target = setter;
      _setterInterface = new _MemberAccessor(this);
    }
  
    Location _getLocationInEnclosingFile(int offset) {
      return enclosingProgram.getLocation(fileUri, offset);
    }
  }
  
  