anchor.diff:      function GetRttiType: TRttiType;
       procedure SetValue(AInstance: Pointer; const AValue: TValue);
   
  -    function HasAttribute<T: TCustomAttribute>: Boolean; overload;
  +    function HasAttribute<T: TCustomAttribute>(const AInherited: Boolean = False): Boolean; overload;
       function HasAttribute<T: TCustomAttribute>(
  -      const ADoSomething: TProc<T>): Boolean; overload;
  +      const ADoSomething: TProc<T>; const AInherited: Boolean = False): Boolean; overload;
  +
       function ForEachAttribute<T: TCustomAttribute>(
  -      const ADoSomething: TProc<T>): Integer;
  +      const ADoSomething: TProc<T>; const AInherited: Boolean = False): Integer; overload;
  +    function ForEachAttribute<T: TCustomAttribute>(
  +      const ADoSomething: TFunc<T, Boolean>; const AInherited: Boolean = False): Integer; overload;
     end;
   
     TRttiTypeHelper = class helper(TRttiObjectHelper) for TRttiType
  
positive.code: { TRttiObjectHelper }
  
  function TRttiObjectHelper.ForEachAttribute<T>(
    const ADoSomething: TProc<T>): Integer;
  var
    LAttribute: TCustomAttribute;
  begin
    Result := 0;
    for LAttribute in Self.GetAttributes do
    begin
      if LAttribute.InheritsFrom(TClass(T)) then
      begin
  
negative.code:   else if Self is TRttiProperty then
      Result := TRttiProperty(Self).PropertyType
    else if Self is TRttiParameter then
      Result := TRttiParameter(Self).ParamType
    else if Self is TRttiType then
      Result := TRttiType(Self);
  end;
  
  function TRttiObjectHelper.HasAttribute<T>(
    const ADoSomething: TProc<T>; const AInherited: Boolean): Boolean;
  var
    LAttribute: TCustomAttribute;
    LResult: Boolean;
  begin
    LResult := False;
  
    ForEachAttribute<T>(
      function (AAttr: T): Boolean
      begin
        Result := False;
        LResult := True;
        if Assigned(ADoSomething) then
          ADoSomething(AAttr);
      end
    , AInherited
    );
  
    Result := LResult;
  end;
  
  procedure TRttiObjectHelper.SetValue(AInstance: Pointer; const AValue: TValue);
  