[picocontainer-scm] [scm-git][2] Missing files from previous commits
Michael Rimov <git-yCVjj/[email protected]> Fri, 29 Jun 2012 12:26:02 -0500 (CDT)
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit 186778585cd6a0d05b3a963504112b7866322566 Author: Michael Rimov <[email protected]> AuthorDate: Fri Jun 29 10:24:06 2012 -0700 Commit: Michael Rimov <[email protected]> CommitDate: Fri Jun 29 10:24:06 2012 -0700 Missing files from previous commits diff --git a/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java b/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java new file mode 100644 index 0000000..93d6b34 --- /dev/null +++ b/pico/container/src/java/org/picocontainer/injectors/AbstractFieldInjector.java @@ -0,0 +1,45 @@ +/***************************************************************************** + * Copyright (C) 2003-2011 PicoContainer Committers. All rights reserved. * + * ------------------------------------------------------------------------- * + * The software in this package is published under the terms of the BSD * + * style license a copy of which has been included with this distribution in * + * the LICENSE.txt file. * + * * + * Original code by * + *****************************************************************************/ +package org.picocontainer.injectors; + +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.Field; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Set; + +import org.picocontainer.ComponentMonitor; +import org.picocontainer.Parameter; +import org.picocontainer.PicoContainer; + +@SuppressWarnings("serial") +public abstract class AbstractFieldInjector<T> extends IterativeInjector<T> { + + public AbstractFieldInjector(final Object componentKey, final Class<?> componentImplementation, + final ComponentMonitor monitor, final boolean useNames, final Parameter... parameters) + throws NotConcreteRegistrationException { + super(componentKey, componentImplementation, monitor, useNames, parameters); + } + + @Override + final protected void unsatisfiedDependencies(final PicoContainer container, + final Set<Type> unsatisfiableDependencyTypes, final List<AccessibleObject> unsatisfiableDependencyMembers) { + final StringBuilder sb = new StringBuilder(this.getComponentImplementation().getName()) + .append(" has unsatisfied dependency for fields ["); + for (int i = 0; i < unsatisfiableDependencyMembers.size(); i++) { + final AccessibleObject accessibleObject = unsatisfiableDependencyMembers.get(i); + final Field m = (Field) accessibleObject; + sb.append(m.getType().getName()).append(".").append(m.getName()); + } + final String container1 = container.toString(); + throw new UnsatisfiableDependenciesException(sb.toString() + "] from " + container1); + } + +} \ No newline at end of file diff --git a/pico/container/src/java/org/picocontainer/parameters/CollectionSearchAlgorithm.java b/pico/container/src/java/org/picocontainer/parameters/CollectionSearchAlgorithm.java new file mode 100644 index 0000000..5b30a90 --- /dev/null +++ b/pico/container/src/java/org/picocontainer/parameters/CollectionSearchAlgorithm.java @@ -0,0 +1,15 @@ +package org.picocontainer.parameters; + +import java.util.Map; + +import org.picocontainer.ComponentAdapter; +import org.picocontainer.PicoContainer; + +import com.googlecode.jtype.Generic; + +public interface CollectionSearchAlgorithm { + + Map<Object, ComponentAdapter<?>> getMatchingComponentAdapters(PicoContainer container, ComponentAdapter adapter, + Class keyType, Generic<?> valueType); + +} diff --git a/pico/container/src/test/org/picocontainer/GregoryTestCase.java b/pico/container/src/test/org/picocontainer/GregoryTestCase.java new file mode 100644 index 0000000..24261c3 --- /dev/null +++ b/pico/container/src/test/org/picocontainer/GregoryTestCase.java @@ -0,0 +1,64 @@ +package org.picocontainer; + +import static org.junit.Assert.assertEquals; + +import javax.inject.Inject; + +import org.junit.Test; +import org.picocontainer.behaviors.AdaptingBehavior; +import org.picocontainer.containers.EmptyPicoContainer; +import org.picocontainer.injectors.AnnotatedFieldInjection; +import org.picocontainer.injectors.MultiInjection; + +public class GregoryTestCase { + + @Test + public void testComponentCanUseConstructorAndAtInjectWithoutAnInitMethod() { + + final MutablePicoContainer pico = new PicoBuilder(new MultiInjection()) + .withBehaviors(new AdaptingBehavior()) + .build(); + pico.addComponent(Carrot.class) + .addComponent(Cheese.class) + .addComponent(Mixer.class); + + // fails with org.picocontainer.PicoCompositionException: java.lang.NoSuchMethodException: ...$Mixer.<init>() + final Utensil u = pico.getComponent(Utensil.class); + assertEquals("Mixing carrot with some cheese", u.use()); + } + + public static final class Cheese { + } + + public static final class Carrot { + } + + public static interface Utensil { + String use(); + } + + public static class Spoon implements Utensil { + public String use() { + return "there is no spoon"; + } + } + + public static class Mixer implements Utensil { + private final Cheese cheese; + @Inject + private Carrot veg; + + public Mixer(Cheese cheese) { + this.cheese = cheese; + } + + public String use() { + return "Mixing " + simpleClassNameOrNull(veg) + " with some " + simpleClassNameOrNull(cheese); + } + } + + private static String simpleClassNameOrNull(Object o) { + return o == null ? null : o.getClass().getSimpleName().toLowerCase(); + } + +}