ARIES-1903 Cannot create proxy classes from extensions

git-svn-id: https://svn.apache.org/repos/asf/aries/trunk/cdi@1855000 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
index 6640cde..c67a26e 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java
@@ -21,6 +21,7 @@
 
 import org.apache.aries.cdi.container.internal.container.Op.Mode;
 import org.apache.aries.cdi.container.internal.container.Op.Type;
+import org.apache.aries.cdi.container.internal.loader.BundleResourcesLoader;
 import org.apache.aries.cdi.container.internal.model.ExtendedExtensionDTO;
 import org.apache.aries.cdi.container.internal.model.FactoryComponent;
 import org.apache.aries.cdi.container.internal.model.SingleComponent;
@@ -105,6 +106,7 @@
 
 			Thread currentThread = Thread.currentThread();
 			ClassLoader current = currentThread.getContextClassLoader();
+			BundleResourcesLoader.Builder builder = new BundleResourcesLoader.Builder(containerState.bundle(), containerState.extenderBundle());
 
 			try {
 				currentThread.setContextClassLoader(containerState.classLoader());
@@ -116,13 +118,16 @@
 				containerState.containerDTO().extensions.stream().map(
 					ExtendedExtensionDTO.class::cast
 				).map(
-					e -> new ExtensionMetadata(e.extension.getService(), e.template.serviceFilter)
+					e -> {
+						builder.add(e.serviceReference.getBundle());
+						return new ExtensionMetadata(e.extension.getService(), e.template.serviceFilter);
+					}
 				).forEach(extensions::add);
 
 				_bootstrap = new WeldBootstrap();
 
 				BeanDeploymentArchive beanDeploymentArchive = new ContainerDeploymentArchive(
-					containerState.loader(),
+					builder.build(),
 					containerState.id(),
 					containerState.beansModel().getBeanClassNames(),
 					containerState.beansModel().getBeansXml());
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
index f5dbd3f..a6c072f 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java
@@ -14,9 +14,11 @@
 
 package org.apache.aries.cdi.container.internal.container;
 
-import static org.apache.aries.cdi.container.internal.util.Filters.*;
-import static org.osgi.namespace.extender.ExtenderNamespace.*;
-import static org.osgi.service.cdi.CDIConstants.*;
+import static org.apache.aries.cdi.container.internal.util.Filters.asFilter;
+import static org.osgi.namespace.extender.ExtenderNamespace.EXTENDER_NAMESPACE;
+import static org.osgi.service.cdi.CDIConstants.CDI_CAPABILITY_NAME;
+import static org.osgi.service.cdi.CDIConstants.CDI_CONTAINER_ID;
+import static org.osgi.service.cdi.CDIConstants.CDI_EXTENSION_PROPERTY;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -330,7 +332,7 @@
 
 	@SuppressWarnings("unchecked")
 	public <T extends ResourceLoader & ProxyServices> T loader() {
-		return (T)new BundleResourcesLoader(_bundle, _extenderBundle);
+		return (T)new BundleResourcesLoader.Builder(_bundle, _extenderBundle).build();
 	}
 
 	public PromiseFactory promiseFactory() {
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
index ddfa69b..621ac34 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/loader/BundleResourcesLoader.java
@@ -33,7 +33,28 @@
 
 public class BundleResourcesLoader implements ProxyServices, ResourceLoader {
 
-	public BundleResourcesLoader(Bundle bundle, Bundle extenderBundle) {
+	public static class Builder {
+
+		public Builder(Bundle bundle, Bundle extenderBundle) {
+			this.bundle = bundle;
+			this.extenderBundle = extenderBundle;
+		}
+
+		public Builder add(Bundle bundle) {
+			additionalBundles.add(bundle);
+			return this;
+		}
+
+		public BundleResourcesLoader build() {
+			return new BundleResourcesLoader(bundle, extenderBundle, additionalBundles);
+		}
+
+		private final Bundle bundle;
+		private final Bundle extenderBundle;
+		private final List<Bundle> additionalBundles = new ArrayList<>();
+	}
+
+	BundleResourcesLoader(Bundle bundle, Bundle extenderBundle, List<Bundle> additionalBundles) {
 		BundleWiring extenderWiring = extenderBundle.adapt(BundleWiring.class);
 
 		List<Bundle> bundles = new ArrayList<>();
@@ -57,6 +78,8 @@
 			}
 		}
 
+		bundles.addAll(additionalBundles);
+
 		_classLoader = new BundleClassLoader(bundles.toArray(new Bundle[0]));
 	}