[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.
+    }
 }