1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
package org.apache.commons.inject.impl; |
18 | |
|
19 | |
import java.util.List; |
20 | |
|
21 | |
import org.apache.commons.inject.api.IBinding; |
22 | |
import org.apache.commons.inject.api.IKey; |
23 | |
|
24 | |
|
25 | |
public class MutableBindingSet extends AbstractBindingSet implements IMutableBindingSource { |
26 | |
public MutableBindingSet() { |
27 | 9 | super(); |
28 | 9 | } |
29 | |
|
30 | |
public <T> void add(MappedKey<T> pKey, IBinding<T> pBinding) { |
31 | 36 | final ReducedKey<T> rkey = newReducedKey(pKey); |
32 | 36 | final List<BindingAndKey<?>> list = findOrCreateList(rkey); |
33 | 36 | list.add(new BindingAndKey<T>(pBinding, pKey)); |
34 | 36 | } |
35 | |
|
36 | |
@Override |
37 | |
public <T> IBinding<T> requireBinding(IKey<T> pKey, String pCause) { |
38 | 147 | final MappedKey<T> mkey = new MappedKey<T>(pKey.getType(), pKey.getName(), pKey.getAnnotations(), null); |
39 | 147 | final ReducedKey<T> rkey = newReducedKey(pKey); |
40 | 147 | final List<BindingAndKey<?>> list = findOrCreateList(rkey); |
41 | 147 | for (BindingAndKey<?> bak : list) { |
42 | 124 | if (isMatching(pKey, bak.getKey())) { |
43 | |
@SuppressWarnings("unchecked") |
44 | 124 | final IBinding<T> binding = (IBinding<T>) bak.getBinding(); |
45 | 124 | return binding; |
46 | |
} |
47 | |
} |
48 | 23 | final IBinding<T> binding = new BindingProxy<T>(pCause); |
49 | 23 | list.add(new BindingAndKey<T>(binding, mkey)); |
50 | 23 | return binding; |
51 | |
} |
52 | |
} |