[picocontainer-scm] [scm-git][3/4] Fix for Pico-393
Michael Rimov <git-yCVjj/[email protected]> Thu, 20 Dec 2012 16:49:34 -0600 (CST)
| Newsgroups | gmane.comp.java.picocontainer.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit c305b64e629acaedd6ddc1e230b49f36c37f7ab8 Author: Michael Rimov <[email protected]> AuthorDate: Thu, 20 Dec 2012 14:47:23 -0800 Commit: Michael Rimov <[email protected]> CommitDate: Thu, 20 Dec 2012 14:47:23 -0800 Fix for Pico-393 Also forced makeChildContainer to abstract rather than return null. diff --git a/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingMutablePicoContainer.java b/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingMutablePicoContainer.java index 1e9c7cf..f4d0de0 100644 --- a/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingMutablePicoContainer.java +++ b/pico/container/src/java/org/picocontainer/containers/AbstractDelegatingMutablePicoContainer.java @@ -39,23 +39,28 @@ public abstract class AbstractDelegatingMutablePicoContainer extends AbstractDel public MutablePicoContainer addComponent(Object key, Object implOrInstance, Parameter... parameters) throws PicoCompositionException { - return getDelegate().addComponent(key, implOrInstance, parameters); + getDelegate().addComponent(key, implOrInstance, parameters); + return this; } public MutablePicoContainer addComponent(Object implOrInstance) throws PicoCompositionException { - return getDelegate().addComponent(implOrInstance); + getDelegate().addComponent(implOrInstance); + return this; } public MutablePicoContainer addConfig(String name, Object val) { - return getDelegate().addConfig(name, val); + getDelegate().addConfig(name, val); + return this; } public MutablePicoContainer addAdapter(ComponentAdapter<?> componentAdapter) throws PicoCompositionException { - return getDelegate().addAdapter(componentAdapter); + getDelegate().addAdapter(componentAdapter); + return this; } public MutablePicoContainer addProvider(Provider<?> provider) { - return getDelegate().addAdapter(new ProviderAdapter(provider)); + getDelegate().addAdapter(new ProviderAdapter(provider)); + return this; } @@ -68,7 +73,8 @@ public abstract class AbstractDelegatingMutablePicoContainer extends AbstractDel } public MutablePicoContainer addChildContainer(PicoContainer child) { - return getDelegate().addChildContainer(child); + getDelegate().addChildContainer(child); + return this; } public boolean removeChildContainer(PicoContainer child) { @@ -76,21 +82,20 @@ public abstract class AbstractDelegatingMutablePicoContainer extends AbstractDel } public MutablePicoContainer change(Properties... properties) { - return getDelegate().change(properties); + getDelegate().change(properties); + return this; } public MutablePicoContainer as(Properties... properties) { - return getDelegate().as(properties); + getDelegate().as(properties); + return this; } public void dispose() { getDelegate().dispose(); } - public MutablePicoContainer makeChildContainer() { - - return null; - } + abstract public MutablePicoContainer makeChildContainer(); public void start() { getDelegate().start(); diff --git a/pico/container/src/java/org/picocontainer/containers/JSRPicoContainer.java b/pico/container/src/java/org/picocontainer/containers/JSRPicoContainer.java index c83da38..dfafe00 100644 --- a/pico/container/src/java/org/picocontainer/containers/JSRPicoContainer.java +++ b/pico/container/src/java/org/picocontainer/containers/JSRPicoContainer.java @@ -1,7 +1,6 @@ package org.picocontainer.containers; import java.lang.annotation.Annotation; -import java.util.Properties; import javax.inject.Named; import javax.inject.Qualifier; @@ -85,5 +84,11 @@ public class JSRPicoContainer extends AbstractDelegatingMutablePicoContainer{ return this; } + @Override + public MutablePicoContainer makeChildContainer() { + MutablePicoContainer childDelegate = getDelegate().makeChildContainer(); + return new JSRPicoContainer(childDelegate); + } + } diff --git a/pico/container/src/test/org/picocontainer/containers/DelegatingMutablePicoContainerTestCase.java b/pico/container/src/test/org/picocontainer/containers/DelegatingMutablePicoContainerTestCase.java index 6b28ef9..2180508 100644 --- a/pico/container/src/test/org/picocontainer/containers/DelegatingMutablePicoContainerTestCase.java +++ b/pico/container/src/test/org/picocontainer/containers/DelegatingMutablePicoContainerTestCase.java @@ -9,12 +9,15 @@ package org.picocontainer.containers; +import static org.junit.Assert.assertTrue; + import java.util.Properties; import org.junit.Test; import org.picocontainer.Characteristics; import org.picocontainer.DefaultPicoContainer; import org.picocontainer.MutablePicoContainer; +import org.picocontainer.PicoBuilder; import org.picocontainer.PicoContainer; import org.picocontainer.tck.AbstractPicoContainerTest; @@ -22,7 +25,7 @@ import org.picocontainer.tck.AbstractPicoContainerTest; public class DelegatingMutablePicoContainerTestCase extends AbstractPicoContainerTest { protected MutablePicoContainer createPicoContainer(PicoContainer parent) { - return new MyDelegatingMutablePicoContainer(new DefaultPicoContainer()); + return new MyDelegatingMutablePicoContainer(new PicoBuilder(parent).withCaching().withLifecycle().build()); } protected Properties[] getProperties() { @@ -41,8 +44,25 @@ public class DelegatingMutablePicoContainerTestCase extends AbstractPicoContaine } - @Test public void testAcceptImplementsBreadthFirstStrategy() { - // don't run this one. + public static class A { + + } + + public static class B { + } + @Test + public void testAddComponentReturnsOutermostContainer() { + MutablePicoContainer outer = createPicoContainer(null); + + MutablePicoContainer resultOfAddComponents = outer.addComponent(A.class) + .addComponent(B.class); + assertTrue(resultOfAddComponents == outer); + } + + + @Test public void testAcceptImplementsBreadthFirstStrategy() { + //Ignore this one. + } }