private static void internalConvertToTypes( InjectorImpl injector, Matcher<? super TypeLiteral<?>> typeMatcher, TypeConverter converter) { injector.state.addConverter( new TypeConverterBinding(SourceProvider.UNKNOWN_SOURCE, typeMatcher, converter)); }
@Override public Boolean visit(TypeListenerBinding binding) { injector.state.addTypeListener(binding); return true; }
Set<Object> sources = state.getSourcesForBlacklistedKey(key); if (state.isBlacklisted(key)) { throw errors.childBindingAlreadySet(key, sources).toException(); state.parent().blacklist(key, state, binding.getSource()); jitBindings.put(key, binding); return binding;
@Override public Map<Key<?>, Binding<?>> getAllBindings() { synchronized (state.lock()) { return new ImmutableMap.Builder<Key<?>, Binding<?>>() .putAll(state.getExplicitBindingsThisLevel()) .putAll(jitBindings) .build(); } }
@Override public TypeConverterBinding getConverter( String stringValue, TypeLiteral<?> type, Errors errors, Object source) { TypeConverterBinding matchingConverter = null; for (State s = this; s != State.NONE; s = s.parent()) { for (TypeConverterBinding converter : s.getConvertersThisLevel()) { if (converter.getTypeMatcher().matches(type)) { if (matchingConverter != null) { errors.ambiguousTypeConversion(stringValue, source, type, matchingConverter, converter); } matchingConverter = converter; } } } return matchingConverter; }
if (original != null) { if (injector.state.getExplicitBinding(key) != null) { try { if (!isOkayDuplicate(original, binding, injector.state)) { injector.state.parent().blacklist(key, injector.state, binding.getSource()); injector.state.putBinding(key, binding);
BindingImpl<String> stringBinding = state.getExplicitBinding(stringKey); if (stringBinding == null || !stringBinding.isConstant()) { return null; state.getConverter(stringValue, type, errors, source);
Set<Object> sources = state.getSourcesForBlacklistedKey(key); if (state.isBlacklisted(key)) { throw errors.childBindingAlreadySet(key, sources).toException();
@Override public List<TypeListenerBinding> getTypeListenerBindings() { List<TypeListenerBinding> parentBindings = parent.getTypeListenerBindings(); List<TypeListenerBinding> result = Lists.newArrayListWithCapacity(parentBindings.size() + typeListenerBindings.size()); result.addAll(parentBindings); result.addAll(typeListenerBindings); return result; }
@Override @SuppressWarnings("unchecked") // we only put in BindingImpls that match their key types public <T> BindingImpl<T> getExplicitBinding(Key<T> key) { Binding<?> binding = explicitBindings.get(key); return binding != null ? (BindingImpl<T>) binding : parent.getExplicitBinding(key); }
@Override public void blacklist(Key<?> key, State state, Object source) { parent.blacklist(key, state, source); blacklistedKeys.add(key, state, source); }
@Override public Map<Key<?>, Binding<?>> getBindings() { return state.getExplicitBindingsThisLevel(); }
@Override public Set<TypeConverterBinding> getTypeConverterBindings() { return ImmutableSet.copyOf(state.getConvertersThisLevel()); }
@Override public Map<Class<? extends Annotation>, Scope> getScopeBindings() { return ImmutableMap.copyOf(state.getScopes()); }
@Override public <T> BindingImpl<T> getExistingBinding(Key<T> key) { BindingImpl<T> explicitBinding = state.getExplicitBinding(key); if (explicitBinding != null) { return explicitBinding; synchronized (state.lock()) {
List<TypeListenerBinding> typeListenerBindings = injector.state.getTypeListenerBindings(); injector.membersInjectorStore = new MembersInjectorStore(injector, typeListenerBindings); List<ProvisionListenerBinding> provisionListenerBindings = injector.state.getProvisionListenerBindings(); injector.provisionListenerStore = new ProvisionListenerCallbackStore(provisionListenerBindings);
BindingImpl<String> stringBinding = state.getExplicitBinding(stringKey); if (stringBinding == null || !stringBinding.isConstant()) { return null; TypeConverterBinding typeConverterBinding = state.getConverter(stringValue, type, errors, source);
@SuppressWarnings("unchecked") // casting Collection<Binding> to Collection<BindingImpl> is safe Collection<BindingImpl<?>> bindingsAtThisLevel = (Collection) injector.state.getExplicitBindingsThisLevel().values(); candidateBindings.addAll(bindingsAtThisLevel); synchronized (injector.state.lock()) {
public TypeConverterBinding getConverter( String stringValue, TypeLiteral<?> type, Errors errors, Object source) { TypeConverterBinding matchingConverter = null; for (State s = this; s != State.NONE; s = s.parent()) { for (TypeConverterBinding converter : s.getConvertersThisLevel()) { if (converter.getTypeMatcher().matches(type)) { if (matchingConverter != null) { errors.ambiguousTypeConversion(stringValue, source, type, matchingConverter, converter); } matchingConverter = converter; } } } return matchingConverter; }
Set<Object> sources = state.getSourcesForBlacklistedKey(key); if (state.isBlacklisted(key)) { throw errors.childBindingAlreadySet(key, sources).toException();