anchor.diff:    public <% end %>final void remove<%= name %>( final <%= type %> value )
     {
       safeGet<%= plural_name %>().remove( value );
  +    get<%= plural_name %>Observable().reportChanged();
  +  }
  +
  +  @org.realityforge.arez.annotations.ObservableRef
  +  @javax.annotation.Nonnull
  +  protected org.realityforge.arez.Observable get<%= plural_name %>Observable()
  +  {
  +    throw new IllegalStateException();
     }
   
     private java.util.List<<%= type %>> safeGet<%= plural_name %>()
  
positive.code: <% else -%>
      _<%= Reality::Naming.camelize(attribute.arez.name) %> = <%= nullability_prefix %>( value );
  <% end %>  }
  <% end %>
  <% end %>
  <% entity.arez.referencing_client_side_attributes.each do |attribute|
          name = attribute.inverse.name
          type = attribute.entity.arez.qualified_name
          if attribute.inverse.multiplicity == :many
            plural_name = Reality::Naming.pluralize(name)
  %>
    @javax.annotation.Nonnull
    public final java.util.List<<%= type %>> <%= getter_prefix(attribute) %><%= plural_name %>()
    {
      return java.util.Collections.unmodifiableList( safeGet<%= plural_name %>() );
    }
  
negative.code:   public <% end %>final void add<%= name %>( final <%= type %> value )
    {
      safeGet<%= plural_name %>().add( value );
      get<%= plural_name %>Observable().reportChanged();
    }
  
    <% if attribute.entity.data_module.name != entity.data_module.name %>/**
  