use of com.google.inject.Key in project camel by apache.
the class Injectors method close.
/**
* Closes objects within the given scope using the currently registered
* {@link Closer} implementations
*/
public static void close(Injector injector, Class<? extends Annotation> scopeAnnotationToClose, CloseErrors errors) throws CloseFailedException {
Set<Closer> closers = getInstancesOf(injector, Closer.class);
Closer closer = CompositeCloser.newInstance(closers);
if (closer == null) {
return;
}
Set<Entry<Key<?>, Binding<?>>> entries = injector.getBindings().entrySet();
for (Entry<Key<?>, Binding<?>> entry : entries) {
Key<?> key = entry.getKey();
Binding<?> binding = entry.getValue();
closeBinding(key, binding, scopeAnnotationToClose, closer, errors);
}
tryCloseJitBindings(closer, injector, scopeAnnotationToClose, errors);
errors.throwIfNecessary();
}
use of com.google.inject.Key in project che by eclipse.
the class ConfigurationProperties method getProperties.
public Map<String, String> getProperties(String namePattern) {
final Pattern pattern = Pattern.compile(namePattern);
final Map<String, String> result = new HashMap<>();
for (Map.Entry<Key<?>, Binding<?>> keyBindingEntry : injectorProvider.get().getAllBindings().entrySet()) {
final Key<?> key = keyBindingEntry.getKey();
final Annotation annotation = key.getAnnotation();
if (annotation instanceof com.google.inject.name.Named && key.getTypeLiteral().getRawType() == String.class) {
final String name = ((com.google.inject.name.Named) annotation).value();
if (name != null && pattern.matcher(name).matches()) {
final String value = (String) keyBindingEntry.getValue().getProvider().get();
result.put(name, value);
}
}
}
return result;
}
use of com.google.inject.Key in project guice by google.
the class MultibinderTest method testKeyHashCodesFixedAtInjectionTime.
/** Ensure key hash codes are fixed at injection time, not binding time. */
public void testKeyHashCodesFixedAtInjectionTime() {
Module ab = new AbstractModule() {
@Override
protected void configure() {
Multibinder<List<String>> multibinder = Multibinder.newSetBinder(binder(), listOfStrings);
List<String> list = Lists.newArrayList();
multibinder.addBinding().toInstance(list);
list.add("A");
list.add("B");
}
};
Injector injector = Guice.createInjector(ab);
for (Entry<Key<?>, Binding<?>> entry : injector.getAllBindings().entrySet()) {
Key<?> bindingKey = entry.getKey();
Key<?> clonedKey;
if (bindingKey.getAnnotation() != null) {
clonedKey = Key.get(bindingKey.getTypeLiteral(), bindingKey.getAnnotation());
} else if (bindingKey.getAnnotationType() != null) {
clonedKey = Key.get(bindingKey.getTypeLiteral(), bindingKey.getAnnotationType());
} else {
clonedKey = Key.get(bindingKey.getTypeLiteral());
}
assertEquals(bindingKey, clonedKey);
assertEquals("Incorrect hashcode for " + bindingKey + " -> " + entry.getValue(), bindingKey.hashCode(), clonedKey.hashCode());
}
}
use of com.google.inject.Key in project guice by google.
the class MapBinderTest method testAllBindings.
public void testAllBindings() {
Module module = new AbstractModule() {
@Override
protected void configure() {
MapBinder.newMapBinder(binder(), String.class, String.class).permitDuplicates();
}
};
Injector injector = Guice.createInjector(module);
Map<Key<?>, Binding<?>> bindings = injector.getBindings();
ImmutableSet<Key<?>> expectedBindings = ImmutableSet.<Key<?>>builder().add(// Map<K, V>
Key.get(Types.mapOf(String.class, String.class)), // Map<K, Provider<V>>
Key.get(Types.mapOf(String.class, Types.providerOf(String.class))), // Map<K, javax.inject.Provider<V>>
Key.get(Types.mapOf(String.class, javaxProviderOf(String.class))), // Map<K, Set<V>>
Key.get(Types.mapOf(String.class, Types.setOf(String.class))), // Map<K, Set<Provider<V>>
Key.get(Types.mapOf(String.class, Types.setOf(Types.providerOf(String.class)))), // Map<K, Set<javax.inject.Provider<V>>
Key.get(Types.mapOf(String.class, Types.setOf(Types.javaxProviderOf(String.class)))), // Map<K, Collection<Provider<V>>
Key.get(Types.mapOf(String.class, Types.collectionOf(Types.providerOf(String.class)))), // Map<K, Collection<javax.inject.Provider<V>>
Key.get(Types.mapOf(String.class, Types.collectionOf(Types.javaxProviderOf(String.class)))), // Set<Map.Entry<K, Provider<V>>>
Key.get(Types.setOf(mapEntryOf(String.class, Types.providerOf(String.class)))), // Set<Map.Entry<K, javax.inject.Provider<V>>>
Key.get(Types.setOf(mapEntryOf(String.class, Types.javaxProviderOf(String.class)))), // Collection<Provider<Map.Entry<K, Provider<V>>>>
Key.get(collectionOf(Types.providerOf(mapEntryOf(String.class, Types.providerOf(String.class))))), // Collection<javax.inject.Provider<Map.Entry<K, Provider<V>>>>
Key.get(collectionOf(Types.javaxProviderOf(mapEntryOf(String.class, Types.providerOf(String.class))))), // @Named(...) Boolean
Key.get(Boolean.class, named("Multibinder<java.util.Map$Entry<java.lang.String, " + "com.google.inject.Provider<java.lang.String>>> permits duplicates"))).addAll(FRAMEWORK_KEYS).build();
Set<Key<?>> missingBindings = Sets.difference(expectedBindings, bindings.keySet());
Set<Key<?>> extraBindings = Sets.difference(bindings.keySet(), expectedBindings);
assertTrue("There should be no missing bindings. Missing: " + missingBindings, missingBindings.isEmpty());
assertTrue("There should be no extra bindings. Extra: " + extraBindings, extraBindings.isEmpty());
}
use of com.google.inject.Key in project guice by google.
the class MultibinderTest method testEmptyMultibinder.
public void testEmptyMultibinder() {
Injector injector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
Multibinder.newSetBinder(binder(), String.class);
}
});
assertEquals(ImmutableSet.of(), injector.getInstance(new Key<Set<String>>() {
}));
assertEquals(ImmutableList.of(), injector.getInstance(new Key<Collection<Provider<String>>>() {
}));
}
Aggregations