cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <>
Subject [jira] [Commented] (CAY-2029) Allow out-of-order insertion into DI lists
Date Fri, 16 Oct 2015 13:22:06 GMT


ASF GitHub Bot commented on CAY-2029:

GitHub user thinline72 opened a pull request:

    CAY-2029 | Allow out-of-order insertion into DI lists


You can merge this pull request into a Git repository by running:

    $ git pull CAY-2029

Alternatively you can review and apply these changes as the patch at:

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #76
commit 3cdd4872e7efc8cfdcd36d21bbcdf208af930c9d
Author: Savva Kolbachev <>
Date:   2015-10-16T13:18:01Z

    CAY-2029 | Allow out-of-order insertion into DI lists


> Allow out-of-order insertion into DI lists
> ------------------------------------------
>                 Key: CAY-2029
>                 URL:
>             Project: Cayenne
>          Issue Type: Task
>            Reporter: Andrus Adamchik
>            Assignee: Savva Kolbachev
> We need that per CAY-2028. The following API is suggested:
> {noformat}
> // binding a type. Key is implicit (as it can be calculated automatically) 
> // and can be addressed when inserting other items.
> ListBuilder.add(Class<T> type);
> // binding an instance. Key is implicit and is calculated automatically. 
> // It can not be transparently addressed in ordering
> ListBuilder.add(T object);
> // @since 4.0
> // binding an instance. Key is explicit and can be addressed when inserting 
> // other items
> ListBuilder.add(Key<T> key, T object);
> {noformat}
> All 3 styles of binding should return a subclass of ListBuilder that supports reordering
of the previously inserted item:
> {noformat}
> ListBuilder after(Class<?> type);
> ListBuilder after(Key<?> key);
> ListBuilder before(Class<?> type);
> ListBuilder before(Key<?> key);
> {noformat}
> Some implementation points:
> * If no before/after is specified, the ordering is non-deterministic.
> * The algorithm should detect cycles (key1 before key2 and key2 before key1) and throw
an exception
> * The algorithm should allow to reference another key in before/after, prior to that
key being bound to DI.
> The reason for using this elaborate mechanism, instead of letting the caller to inspect
the contents of the list directly is that the DI list contains mostly Providers, usually multiple
Providers wrapping each other. So looking at that directly makes little sense.

This message was sent by Atlassian JIRA

View raw message