public List<Binding<T>> bindings(Key<T> key) { List<Binding<T>> bindings = new ArrayList<>(); for (BindingAmp<T> binding : _list) { if (key.isAssignableFrom(binding.key())) { bindings.add(binding); } } return bindings; }
BindingAmp<T> find(Key<T> key) { for (BindingAmp<T> binding : _list) { if (key.isAssignableFrom(binding.key())) { return binding; } } return null; }
/** * Tests if key is assignable. Key is considered assignable if annotation types * match, Type matches and annotation instances match. * * @param key test key * @return true if assignable, false otherwise */ public boolean isAssignableFrom(Key<? super T> key) { Objects.requireNonNull(key); for (Class<? extends Annotation> annType : _annTypes) { if (! containsType(annType, key._annTypes)) { return false; } } if (_type instanceof ParameterizedType) { if (! (key._type instanceof ParameterizedType)) { return false; } if (! isAssignableFrom((ParameterizedType) _type, (ParameterizedType) key._type)) { return false; } } if (_anns.length > 0 && key._anns.length > 0) { return isAssignableFrom(_anns, key._anns); } return true; }
public <X> Function<X,T> findFunction(Key<T> key, Class<X> paramType) { for (BindingAmp<T> binding : _list) { if (key.isAssignableFrom(binding.key())) { Function<X,T> fun = binding.function(paramType); if (fun != null) { return fun; } } } return null; }