anchor.diff:  
     { TGArrayCollection }
   
  -  generic TGArrayCollection <TItem> = class (TCollection, IArrayCollection)
  +  generic TGArrayCollection <TItem : TCollectionItem> = class (TCollection, IArrayCollection)
     public
       type
         TItemType = TItem;
  
positive.code:     Result := TItemType(inherited FindItem(AName));
  end;
  
  function TGNamedCollection.EnsureItem(const AName: String): TItem;
  begin
    Result := FindItem(AName);
    if Result = nil then
  
negative.code: 
    { TGNamedCollection }
  
    generic TGNamedCollection <TItem : TNamedCollectionItem> = class (THashedCollection, INamedCollection)
    public
    type
        TItemType = TItem;
    private
      function GetItems(const Idx: Integer): TItemType;
      procedure SetItems(const Idx: Integer; AValue: TItemType);
    public
      constructor Create;
  
      function Add: TItemType;
      property Items[const Idx: Integer]: TItemType read GetItems write SetItems; default;
  
      function FindItem(const AName: String): TItemType;
      function EnsureItem(const AName: String): TItemType;
    end;
  
    { TObjectMap }
  
    generic TObjectMap <TKey; TValue : TObject> = class (specialize TFPGMap<TKey, TValue>)
    protected
      procedure Deref(Item: Pointer); override;
    end;
  