anchor.diff:  { TRttiObjectHelper }
   
   function TRttiObjectHelper.ForEachAttribute<T>(
  -  const ADoSomething: TProc<T>): Integer;
  +  const ADoSomething: TProc<T>; const AInherited: Boolean): Integer;
   var
     LAttribute: TCustomAttribute;
  +  LAttributes: TArray<TCustomAttribute>;
  +  LBaseType: TRttiType;
  +  LType: TRttiType;
   begin
     Result := 0;
  -  for LAttribute in Self.GetAttributes do
  +  LAttributes := Self.GetAttributes;
  +
  +  LType := Self.GetRttiType;
  +  if AInherited and Assigned(LType) then
  +  begin
  +    LBaseType := LType.BaseType;
  +    while Assigned(LBaseType) do
  +    begin
  +     LAttributes := LAttributes + LBaseType.GetAttributes;
  +     LBaseType := LBaseType.BaseType;
  +    end;
  +  end;
  +
  +  for LAttribute in LAttributes do
     begin
       if LAttribute.InheritsFrom(TClass(T)) then
       begin
  
positive.code:   else if Self is TRttiProperty then
      Result := TRttiProperty(Self).PropertyType
    else if Self is TRttiParameter then
      Result := TRttiParameter(Self).ParamType;
  end;
  
  function TRttiObjectHelper.HasAttribute<T>(
    const ADoSomething: TProc<T>): Boolean;
  var
    LAttribute: TCustomAttribute;
  begin
    Result := False;
    for LAttribute in Self.GetAttributes do
    begin
      if LAttribute.InheritsFrom(TClass(T)) then
      begin
        Result := True;
  
        if Assigned(ADoSomething) then
          ADoSomething(T(LAttribute));
  
        Break;
      end;
    end;
  end;
  
  procedure TRttiObjectHelper.SetValue(AInstance: Pointer; const AValue: TValue);
  
negative.code:     function GetRttiType: TRttiType;
      procedure SetValue(AInstance: Pointer; const AValue: TValue);
  
      function HasAttribute<T: TCustomAttribute>(const AInherited: Boolean = False): Boolean; overload;
      function HasAttribute<T: TCustomAttribute>(
        const ADoSomething: TProc<T>; const AInherited: Boolean = False): Boolean; overload;
  
      function ForEachAttribute<T: TCustomAttribute>(
        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
  