Search in sources :

Example 56 with Key

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();
}
Also used : Closer(org.apache.camel.guice.support.Closer) CompositeCloser(org.apache.camel.guice.support.CompositeCloser) Binding(com.google.inject.Binding) Entry(java.util.Map.Entry) Key(com.google.inject.Key)

Example 57 with Key

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;
}
Also used : Binding(com.google.inject.Binding) Pattern(java.util.regex.Pattern) HashMap(java.util.HashMap) Annotation(java.lang.annotation.Annotation) Map(java.util.Map) HashMap(java.util.HashMap) Key(com.google.inject.Key)

Example 58 with Key

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());
    }
}
Also used : Binding(com.google.inject.Binding) InstanceBinding(com.google.inject.spi.InstanceBinding) LinkedKeyBinding(com.google.inject.spi.LinkedKeyBinding) Injector(com.google.inject.Injector) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) Module(com.google.inject.Module) AbstractModule(com.google.inject.AbstractModule) Key(com.google.inject.Key) AbstractModule(com.google.inject.AbstractModule)

Example 59 with Key

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());
}
Also used : ProviderInstanceBinding(com.google.inject.spi.ProviderInstanceBinding) Binding(com.google.inject.Binding) InstanceBinding(com.google.inject.spi.InstanceBinding) MapBinderBinding(com.google.inject.multibindings.MapBinderBinding) Injector(com.google.inject.Injector) Module(com.google.inject.Module) AbstractModule(com.google.inject.AbstractModule) Key(com.google.inject.Key) AbstractModule(com.google.inject.AbstractModule)

Example 60 with Key

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>>>() {
    }));
}
Also used : Injector(com.google.inject.Injector) Key(com.google.inject.Key) AbstractModule(com.google.inject.AbstractModule) Provider(com.google.inject.Provider)

Aggregations

Key (com.google.inject.Key)106 AbstractModule (com.google.inject.AbstractModule)55 Injector (com.google.inject.Injector)52 Binding (com.google.inject.Binding)36 Module (com.google.inject.Module)20 Provider (com.google.inject.Provider)18 Element (com.google.inject.spi.Element)16 Map (java.util.Map)16 HasDependencies (com.google.inject.spi.HasDependencies)14 InstanceBinding (com.google.inject.spi.InstanceBinding)13 List (java.util.List)13 TypeLiteral (com.google.inject.TypeLiteral)12 LinkedKeyBinding (com.google.inject.spi.LinkedKeyBinding)10 ProviderInstanceBinding (com.google.inject.spi.ProviderInstanceBinding)9 PrivateModule (com.google.inject.PrivateModule)8 DefaultBindingTargetVisitor (com.google.inject.spi.DefaultBindingTargetVisitor)8 Dependency (com.google.inject.spi.Dependency)8 ProviderKeyBinding (com.google.inject.spi.ProviderKeyBinding)8 ImmutableList (com.google.common.collect.ImmutableList)7 InjectionPoint (com.google.inject.spi.InjectionPoint)7