You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ro...@apache.org on 2018/04/14 01:09:11 UTC

svn commit: r1829114 [3/8] - in /aries/trunk/cdi: ./ cdi-extender/ cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/ cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/command/ cdi-extender/src/main/java/org/apache/ari...

Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/FactoryComponent.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/FactoryComponent.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/FactoryComponent.java (added)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/FactoryComponent.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,56 @@
+package org.apache.aries.cdi.container.internal.v2.component;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.osgi.service.cdi.runtime.dto.ComponentDTO;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationPolicy;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class FactoryComponent implements Component {
+
+	public FactoryComponent(String name) {
+		_snapshot = new ComponentDTO();
+		_snapshot.template = new ComponentTemplateDTO();
+		_snapshot.template.activations = new CopyOnWriteArrayList<>();
+		_snapshot.template.configurations = new CopyOnWriteArrayList<>();
+
+		ConfigurationTemplateDTO factoryConfig = new ConfigurationTemplateDTO();
+		factoryConfig.componentConfiguration = true;
+		factoryConfig.maximumCardinality = MaximumCardinality.MANY;
+		factoryConfig.pid = name;
+		factoryConfig.policy = ConfigurationPolicy.REQUIRED;
+
+		_snapshot.template.configurations.add(factoryConfig);
+		_snapshot.template.name = name;
+		_snapshot.template.references = new CopyOnWriteArrayList<>();
+		_snapshot.template.type = ComponentTemplateDTO.Type.FACTORY;
+	}
+
+	@Override
+	public void addConfiguration(ConfigurationTemplateDTO dto) {
+		if (dto == null) return;
+		_snapshot.template.configurations.add(dto);
+	}
+
+	@Override
+	public void addReference(ReferenceTemplateDTO dto) {
+		if (dto == null) return;
+		_snapshot.template.references.add(dto);
+	}
+
+	@Override
+	public ComponentDTO getSnapshot() {
+		return _snapshot; // TODO make safe copy using converter
+	}
+
+	@Override
+	public ComponentTemplateDTO getTemplate() {
+		return _snapshot.template; // TODO make safe copy using converter
+	}
+
+	private final ComponentDTO _snapshot;
+
+}

Added: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/SingleComponent.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/SingleComponent.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/SingleComponent.java (added)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/v2/component/SingleComponent.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,56 @@
+package org.apache.aries.cdi.container.internal.v2.component;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.osgi.service.cdi.runtime.dto.ComponentDTO;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationPolicy;
+import org.osgi.service.cdi.runtime.dto.template.ConfigurationTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class SingleComponent implements Component {
+
+	public SingleComponent(String name) {
+		_snapshot = new ComponentDTO();
+		_snapshot.template = new ComponentTemplateDTO();
+		_snapshot.template.activations = new CopyOnWriteArrayList<>();
+		_snapshot.template.configurations = new CopyOnWriteArrayList<>();
+
+		ConfigurationTemplateDTO factoryConfig = new ConfigurationTemplateDTO();
+		factoryConfig.componentConfiguration = true;
+		factoryConfig.maximumCardinality = MaximumCardinality.ONE;
+		factoryConfig.pid = name;
+		factoryConfig.policy = ConfigurationPolicy.OPTIONAL;
+
+		_snapshot.template.configurations.add(factoryConfig);
+		_snapshot.template.name = name;
+		_snapshot.template.references = new CopyOnWriteArrayList<>();
+		_snapshot.template.type = ComponentTemplateDTO.Type.SINGLE;
+	}
+
+	@Override
+	public void addConfiguration(ConfigurationTemplateDTO dto) {
+		if (dto == null) return;
+		_snapshot.template.configurations.add(dto);
+	}
+
+	@Override
+	public void addReference(ReferenceTemplateDTO dto) {
+		if (dto == null) return;
+		_snapshot.template.references.add(dto);
+	}
+
+	@Override
+	public ComponentDTO getSnapshot() {
+		return _snapshot; // TODO make safe copy using converter
+	}
+
+	@Override
+	public ComponentTemplateDTO getTemplate() {
+		return _snapshot.template; // TODO make safe copy using converter
+	}
+
+	private final ComponentDTO _snapshot;
+
+}

Modified: aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/CDIProvider.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/CDIProvider.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/CDIProvider.java (original)
+++ aries/trunk/cdi/cdi-extender/src/main/java/org/apache/aries/cdi/provider/CDIProvider.java Sat Apr 14 01:09:09 2018
@@ -15,7 +15,6 @@
 package org.apache.aries.cdi.provider;
 
 import java.lang.annotation.Annotation;
-import java.util.Collection;
 import java.util.Iterator;
 
 import javax.enterprise.inject.Instance;
@@ -23,12 +22,6 @@ import javax.enterprise.inject.spi.BeanM
 import javax.enterprise.inject.spi.CDI;
 import javax.enterprise.util.TypeLiteral;
 
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleReference;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceReference;
-
 public class CDIProvider implements javax.enterprise.inject.spi.CDIProvider {
 
 	private static class CdiExtenderCDI extends CDI<Object> {
@@ -45,36 +38,7 @@ public class CDIProvider implements java
 
 		@Override
 		public BeanManager getBeanManager() {
-			ClassLoader loader = Thread.currentThread().getContextClassLoader();
-
-			while (!(loader instanceof BundleReference)) {
-				if (loader == null) {
-					throw new IllegalStateException("Loader is not an OSGi classLoader!");
-				}
-				loader = loader.getParent();
-			}
-
-			BundleReference bundleReference = (BundleReference)loader;
-
-			Bundle bundle = bundleReference.getBundle();
-
-			BundleContext bundleContext = bundle.getBundleContext();
-
-			try {
-				Collection<ServiceReference<BeanManager>> serviceReferences = bundleContext.getServiceReferences(
-					BeanManager.class,
-					"(&(objectClass=" + BeanManager.class.getName() + ")(service.bundleid=" + bundle.getBundleId() +
-						"))");
-
-				if (serviceReferences.isEmpty()) {
-					throw new IllegalStateException("BeanManager not found for " + bundle);
-				}
-
-				return bundleContext.getService(serviceReferences.iterator().next());
-			}
-			catch (InvalidSyntaxException e) {
-				throw new IllegalArgumentException(e);
-			}
+			throw new UnsupportedOperationException();
 		}
 
 		@Override

Modified: aries/trunk/cdi/cdi-extender/src/main/resources/META-INF/cdi.xsd
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/main/resources/META-INF/cdi.xsd?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/main/resources/META-INF/cdi.xsd (original)
+++ aries/trunk/cdi/cdi-extender/src/main/resources/META-INF/cdi.xsd Sat Apr 14 01:09:09 2018
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 /*
- * Copyright (c) OSGi Alliance (2017). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2017, 2018). All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,208 +25,56 @@
 
 	<annotation>
 		<documentation xml:lang="en">
-			This is the XML Schema for OSGi Bean descriptions used by
-			the OSGi CDI Extender. OSGi Bean description documents
-			may be embedded in other XML documents. The OSGi CDI Extender
-			will process all XML documents listed in the osgi.beans
-			attribute of the CDI extender requirement. CDI Beans named by the
-			descriptor are described as components. XML documents containing
-			OSGi Bean descriptions may contain one or more component elements.
-			Use of the namespace for bean descriptions is mandatory. The
-			attributes and subelements of component elements are always
-			unqualified.
+			This is the XML Schema for OSGi Bean descriptions used by CCR. OSGi
+			Bean description documents may be embedded in  other XML documents.
+			CCR will process all XML documents listed in the osgi.beans
+			attribute of the CDI extender requirement. XML documents containing
+			OSGi Bean descriptions may contain one or more bean elements. Use of
+			the namespace for bean descriptions is mandatory. The attributes and
+			subelements of component elements are always unqualified.
 		</documentation>
 	</annotation>
-	<element name="component" type="cdi:Tcomponent" />
-	<complexType name="Tcomponent">
+
+	<element name="bean" type="cdi:Tbean" />
+	<element name="qualifier-blacklist" type="cdi:Tqualifier-blacklist" />
+
+	<complexType name="Tbean">
 		<sequence>
-			<annotation>
-				<documentation xml:lang="en">
-					Implementations of CDI Support must not require component
-					descriptions to specify the sub-elements of the component
-					element in the order as required by the schema. CDI Support
-					implementations must allow other orderings since
-					arbitrary orderings do not affect the meaning of the
-					component description. Only the relative ordering of
-					property elements have meaning.
-				</documentation>
-			</annotation>
-			<element name="configuration" maxOccurs="unbounded" minOccurs="0" type="cdi:Tconfiguration" />
-			<element name="property" maxOccurs="unbounded" minOccurs="0" type="cdi:Tproperty" />
-			<element name="provide" maxOccurs="unbounded" minOccurs="0" type="cdi:Tprovide" />
-			<element name="reference" maxOccurs="unbounded" minOccurs="0" type="cdi:Treference" />
 			<any namespace="##other" maxOccurs="unbounded" minOccurs="0" processContents="lax" />
 		</sequence>
 		<attribute name="class" type="token" use="required" />
-		<attribute name="name" type="token" use="optional">
-			<annotation>
-				<documentation xml:lang="en">
-					The default value of this attribute is the value of
-					the class attribute. If multiple component elements use the same
-					value for the class attribute, then using the default value
-					for this attribute will result in duplicate names.
-					In this case, this attribute must be specified with
-					a unique value.
-				</documentation>
-			</annotation>
-		</attribute>
-		<attribute name="service-scope" default="none" type="cdi:Tservice_scope" use="optional" />
 		<anyAttribute processContents="lax" />
 	</complexType>
 
-	<complexType name="Tconfiguration">
+	<complexType name="Tqualifier" mixed="true">
 		<sequence>
-			<any namespace="##any" processContents="lax"
-				minOccurs="0" maxOccurs="unbounded" />
+			<any namespace="##other" minOccurs="0" maxOccurs="unbounded"
+				processContents="lax" />
 		</sequence>
-		<attribute name="configuration-policy" default="optional" type="cdi:Tconfiguration-policy" use="optional" />
-		<attribute name="configuration-pid" use="optional">
+		<attribute name="name" use="required">
 			<annotation>
 				<documentation xml:lang="en">
-					The default value is the name attribute of the component.
+					<![CDATA[The name of the class or package to ignore.
+					Ant-style glob matches are supported. For example,
+					<qualifier name="com.acme.**"/> would ignore all qualifier
+					classes in subpackages of com.acme.]]>
 				</documentation>
 			</annotation>
 			<simpleType>
-				<restriction>
-					<simpleType>
-						<list itemType="token" />
-					</simpleType>
-					<minLength value="1" />
+				<restriction base="string">
+					<pattern value="([a-zA-Z_$][a-zA-Z\d_$]*\.)*([a-zA-Z_$][a-zA-Z\d_$]*|\*|\*\*)"/>
 				</restriction>
 			</simpleType>
 		</attribute>
-		<attribute name="type" type="token" use="required" />
-		<anyAttribute processContents="lax" />
-	</complexType>
-
-	<complexType name="Tmulti-value">
-		<sequence>
-		<element name="value" minOccurs="0" maxOccurs="unbounded" type="cdi:Tvalue"/>
-		<any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-			processContents="lax" />
-		</sequence>
 		<anyAttribute processContents="lax" />
 	</complexType>
 
-	<complexType name="Tproperty" mixed="true">
-		<sequence maxOccurs="1">
-			<choice minOccurs="0" maxOccurs="1">
-				<element name="array" type="cdi:Tmulti-value"/>
-				<element name="list" type="cdi:Tmulti-value"/>
-				<element name="set" type="cdi:Tmulti-value"/>
-			</choice>
-			<any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
-		</sequence>
-		<attribute name="name" type="string" use="required" />
-		<attribute name="value" type="string" use="optional" />
-		<attribute name="value-type" default="String" type="cdi:Tvalue-types" use="optional" />
-		<anyAttribute processContents="lax" />
-	</complexType>
-
-	<complexType name="Tprovide">
-		<sequence>
-			<any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
-		</sequence>
-		<attribute name="interface" type="token" use="required" />
-		<anyAttribute processContents="lax" />
-	</complexType>
-
-	<complexType name="Treference">
-		<sequence>
-			<any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
-		</sequence>
-		<attribute name="cardinality" default="1..1" type="cdi:Tcardinality" use="optional" />
-		<attribute name="name" type="token" use="optional" />
-		<attribute name="policy" default="static" type="cdi:Tpolicy" use="optional" />
-		<attribute name="policy-option" default="reluctant" type="cdi:Tpolicy-option" use="optional" />
-		<attribute name="scope" default="bundle" type="cdi:Treference_scope" use="optional" />
-		<attribute name="service" type="token" use="required" />
-		<attribute name="target" type="string" use="optional" />
-		<anyAttribute processContents="lax" />
-	</complexType>
-
-	<complexType name="Tvalue" mixed="true">
+	<complexType name="Tqualifier-blacklist">
 		<sequence>
-		<any namespace="##other" minOccurs="0" maxOccurs="unbounded"
-			processContents="lax" />
+			<element name="qualifier" maxOccurs="unbounded" minOccurs="0" type="cdi:Tqualifier" />
+			<any namespace="##other" maxOccurs="unbounded" minOccurs="0" processContents="lax" />
 		</sequence>
 		<anyAttribute processContents="lax" />
 	</complexType>
 
-	<simpleType name="Tcardinality">
-		<restriction base="string">
-			<enumeration value="0..1" />
-			<enumeration value="0..n" />
-			<enumeration value="1..1" />
-			<enumeration value="1..n" />
-		</restriction>
-	</simpleType>
-
-	<simpleType name="Tconfiguration-policy">
-		<restriction base="string">
-			<enumeration value="factory" />
-			<enumeration value="ignore" />
-			<enumeration value="optional" />
-			<enumeration value="require" />
-		</restriction>
-	</simpleType>
-
-	<simpleType name="Tpolicy">
-		<restriction base="string">
-			<enumeration value="dynamic" />
-			<enumeration value="static" />
-		</restriction>
-	</simpleType>
-
-	<simpleType name="Tpolicy-option">
-		<restriction base="string">
-			<enumeration value="greedy" />
-			<enumeration value="reluctant" />
-		</restriction>
-	</simpleType>
-
-	<simpleType name="Treference_scope">
-		<restriction base="string">
-			<enumeration value="bundle" />
-			<enumeration value="prototype" />
-			<enumeration value="prototype_required" />
-		</restriction>
-	</simpleType>
-
-	<simpleType name="Tservice_scope">
-		<restriction base="string">
-			<enumeration value="bundle" />
-			<enumeration value="none" />
-			<enumeration value="prototype" />
-			<enumeration value="singleton" />
-		</restriction>
-	</simpleType>
-
-	<!-- Specifies the data type of a property or of the elements in a multi-value
-			property. Numerical and boolean values are trimmed before they are processed.
-			Simple types are automatically boxed if needed. Only the array data type
-			allows for simple type values. When specifying a simple type on any other
-			type of property it will automatically be boxed. -->
-	<simpleType name="Tvalue-types">
-		<restriction base="string">
-			<enumeration value="boolean" />
-			<enumeration value="Boolean" />
-			<enumeration value="byte" />
-			<enumeration value="Byte" />
-			<enumeration value="char" />
-			<enumeration value="Character" />
-			<enumeration value="double" />
-			<enumeration value="Double" />
-			<enumeration value="float" />
-			<enumeration value="Float" />
-			<enumeration value="int" />
-			<enumeration value="Integer" />
-			<enumeration value="long" />
-			<enumeration value="Long" />
-			<enumeration value="short" />
-			<enumeration value="Short" />
-			<enumeration value="String" />
-		</restriction>
-	</simpleType>
-
 </schema>

Added: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_greedy_Test2.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_greedy_Test2.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_greedy_Test2.java (added)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_greedy_Test2.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,334 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.container.internal.component;
+
+import static org.apache.aries.cdi.container.test.TestUtil.sort;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Collection;
+
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.v2.component.Component;
+import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
+import org.apache.aries.cdi.container.test.beans.Bar;
+import org.apache.aries.cdi.container.test.beans.Foo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorCollectionFoo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorFoo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorFooBar;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorFooFoo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorFooFooNamed;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorFooOptional;
+import org.apache.aries.cdi.container.test.beans.ctordynamicgreedy.CtorListFoo;
+import org.junit.Test;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class Discovery_Ctor_dynamic_greedy_Test2 {
+
+	@Test
+	public void test_CtorCollectionFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorCollectionFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorCollectionFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorListFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorListFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorListFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooBar() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooBar.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Bar.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFooNamed() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFooNamed.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_a", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_b", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooOptional() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooOptional.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooOptional.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+}
\ No newline at end of file

Added: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_reluctant_Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_reluctant_Test.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_reluctant_Test.java (added)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_dynamic_reluctant_Test.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,334 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.container.internal.component;
+
+import static org.apache.aries.cdi.container.test.TestUtil.sort;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Collection;
+
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.v2.component.Component;
+import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
+import org.apache.aries.cdi.container.test.beans.Bar;
+import org.apache.aries.cdi.container.test.beans.Foo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorCollectionFoo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorFoo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorFooBar;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorFooFoo;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorFooFooNamed;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorFooOptional;
+import org.apache.aries.cdi.container.test.beans.ctordynamicreluctant.CtorListFoo;
+import org.junit.Test;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class Discovery_Ctor_dynamic_reluctant_Test {
+
+	@Test
+	public void test_CtorCollectionFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorCollectionFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorCollectionFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorListFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorListFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorListFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooBar() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooBar.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Bar.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFooNamed() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFooNamed.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_a", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_b", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooOptional() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooOptional.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooOptional.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.DYNAMIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+}
\ No newline at end of file

Added: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_greedy_Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_greedy_Test.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_greedy_Test.java (added)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_greedy_Test.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,335 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.container.internal.component;
+
+import static org.apache.aries.cdi.container.test.TestUtil.sort;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Collection;
+
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.v2.component.Component;
+import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
+import org.apache.aries.cdi.container.test.beans.Bar;
+import org.apache.aries.cdi.container.test.beans.Foo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorCollectionFoo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorFoo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorFooBar;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorFooFoo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorFooFooNamed;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorFooOptional;
+import org.apache.aries.cdi.container.test.beans.ctorstaticgreedy.CtorListFoo;
+import org.junit.Test;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class Discovery_Ctor_static_greedy_Test {
+
+	@Test
+	public void test_CtorListFoo() throws Exception {
+		try (MockCdiContainerAndComponents container =
+				new MockCdiContainerAndComponents(
+					"test", CtorListFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorListFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorCollectionFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorCollectionFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorCollectionFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooBar() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooBar.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Bar.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFooNamed() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFooNamed.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_a", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_b", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooOptional() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooOptional.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooOptional.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.GREEDY, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+}
\ No newline at end of file

Added: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_reluctant_Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_reluctant_Test.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_reluctant_Test.java (added)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/Discovery_Ctor_static_reluctant_Test.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,335 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.aries.cdi.container.internal.component;
+
+import static org.apache.aries.cdi.container.test.TestUtil.sort;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Collection;
+
+import org.apache.aries.cdi.container.internal.model.BeansModel;
+import org.apache.aries.cdi.container.internal.v2.component.Component;
+import org.apache.aries.cdi.container.test.MockCdiContainerAndComponents;
+import org.apache.aries.cdi.container.test.beans.Bar;
+import org.apache.aries.cdi.container.test.beans.Foo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorCollectionFoo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorFoo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorFooBar;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorFooFoo;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorFooFooNamed;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorFooOptional;
+import org.apache.aries.cdi.container.test.beans.ctorstaticreluctant.CtorListFoo;
+import org.junit.Test;
+import org.osgi.service.cdi.runtime.dto.template.ComponentTemplateDTO;
+import org.osgi.service.cdi.runtime.dto.template.MaximumCardinality;
+import org.osgi.service.cdi.runtime.dto.template.ReferenceTemplateDTO;
+
+public class Discovery_Ctor_static_reluctant_Test {
+
+	@Test
+	public void test_CtorListFoo() throws Exception {
+		try (MockCdiContainerAndComponents container =
+				new MockCdiContainerAndComponents(
+					"test", CtorListFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorListFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorCollectionFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorCollectionFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.MANY, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorCollectionFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooFoo.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFoo() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFoo.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFoo.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooBar() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooBar.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooBar.class.getName() + ".new1", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Bar.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooFooNamed() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooFooNamed.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(2, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_a", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+
+			referenceTemplateDTO = template.references.get(1);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(1, referenceTemplateDTO.minimumCardinality);
+			assertEquals("foo_b", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+	@Test
+	public void test_CtorFooOptional() throws Exception {
+		try (MockCdiContainerAndComponents container = new MockCdiContainerAndComponents(
+				"test", CtorFooOptional.class.getName())) {
+
+			BeansModel beansModel = container.containerState().beansModel();
+
+			Collection<OSGiBean> beans = sort(beansModel.getOSGiBeans());
+
+			assertEquals(1, beans.size());
+
+			OSGiBean bean = beans.iterator().next();
+
+			Component component = bean.getComponent();
+
+			assertNotNull(component);
+
+			ComponentTemplateDTO template = component.getTemplate();
+
+			assertNotNull(template);
+			assertNotNull(template.references);
+
+			assertEquals(1, template.references.size());
+
+			ReferenceTemplateDTO referenceTemplateDTO = template.references.get(0);
+
+			assertEquals(MaximumCardinality.ONE, referenceTemplateDTO.maximumCardinality);
+			assertEquals(0, referenceTemplateDTO.minimumCardinality);
+			assertEquals(CtorFooOptional.class.getName() + ".new0", referenceTemplateDTO.name);
+			assertEquals(ReferenceTemplateDTO.Policy.STATIC, referenceTemplateDTO.policy);
+			assertEquals(
+				ReferenceTemplateDTO.PolicyOption.RELUCTANT, referenceTemplateDTO.policyOption);
+			assertEquals(Foo.class.getName(), referenceTemplateDTO.serviceType);
+			assertEquals("", referenceTemplateDTO.targetFilter);
+		}
+	}
+
+}
\ No newline at end of file

Added: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/IfBeanClassIsOSGiAnnotatedTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/IfBeanClassIsOSGiAnnotatedTest.java?rev=1829114&view=auto
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/IfBeanClassIsOSGiAnnotatedTest.java (added)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/component/IfBeanClassIsOSGiAnnotatedTest.java Sat Apr 14 01:09:09 2018
@@ -0,0 +1,117 @@
+package org.apache.aries.cdi.container.internal.component;
+
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static org.apache.aries.cdi.container.internal.component.DiscoveryExtension.checkIfBeanClassIsOSGiAnnotated;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.Serializable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.junit.Test;
+import org.osgi.service.cdi.annotations.ComponentScoped;
+import org.osgi.service.cdi.annotations.Configuration;
+import org.osgi.service.cdi.annotations.FactoryComponent;
+import org.osgi.service.cdi.annotations.Reference;
+import org.osgi.service.cdi.annotations.Service;
+import org.osgi.service.cdi.annotations.SingleComponent;
+
+public class IfBeanClassIsOSGiAnnotatedTest {
+
+	class Bar {}
+
+	@Retention(RetentionPolicy.RUNTIME)
+	@Target({CONSTRUCTOR, FIELD, METHOD, PARAMETER, TYPE, TYPE_USE})
+	@interface Anno {}
+
+	@Anno
+	@SuppressWarnings("serial")
+	class Fum extends @Anno Bar implements @Anno Serializable {
+		@Anno Fum(@Anno String param) {}
+		@Anno String field;
+		@Anno String method(@Anno String param) {return param;}
+	}
+
+	@Test
+	public void testNotAnnotated() {
+		assertFalse(checkIfBeanClassIsOSGiAnnotated(Fum.class));
+	}
+
+	@Test
+	public void testFactoryComponent() throws Exception {
+		@FactoryComponent
+		class Foo {}
+
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(Foo.class));
+	}
+
+	@Test
+	public void testSingleComponent() throws Exception {
+		@SingleComponent
+		class Foo {}
+
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(Foo.class));
+	}
+
+	@Test
+	public void testComponentScoped() throws Exception {
+		class FooField { @ComponentScoped String field;}
+		class FooMethod { @ComponentScoped void method() {}}
+		@ComponentScoped
+		class FooType {}
+
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooField.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooMethod.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooType.class));
+	}
+
+	@Test
+	public void testConfiguration() throws Exception {
+		class Foo { @SuppressWarnings("unused")
+		Foo(@Configuration String param) {}}
+		class FooField { @Configuration String field;}
+		class FooMethod { @SuppressWarnings("unused")
+		void method(@Configuration String param) {}}
+
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(Foo.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooField.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooMethod.class));
+	}
+
+	@Test
+	public void testReference() throws Exception {
+		class Foo { @SuppressWarnings("unused")
+		Foo(@Reference String param) {}}
+		class FooField { @Reference String field;}
+		class FooMethod { @SuppressWarnings("unused")
+		void method(@Reference String param) {}}
+
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(Foo.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooField.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooMethod.class));
+	}
+
+	@Test
+	public void testService() throws Exception {
+		@Service
+		class Foo {}
+		@SuppressWarnings("serial")
+		class FooImplements implements @Service Serializable {}
+		class FooExtends extends @Service Foo {}
+		class FooField { @Service String field;}
+		class FooMethod { @Service void method() {}}
+
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(Foo.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooImplements.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooExtends.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooField.class));
+		assertTrue(checkIfBeanClassIsOSGiAnnotated(FooMethod.class));
+	}
+}

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Ignore.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Ignore.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Ignore.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Ignore.java Sat Apr 14 01:09:09 2018
@@ -14,19 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.configuration;
 
-import static org.osgi.framework.Constants.SERVICE_PID;
-import static org.apache.aries.cdi.container.test.TestUtil.*;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
-
 public class ConfigurationCallbackTest_Ignore {
 
-	@Test
+/*	@Test
 	public void test_emptyAdd() throws Exception {
 		ConfigurationCallback callback = getCallback(POLICY);
 
@@ -351,5 +341,5 @@ public class ConfigurationCallbackTest_I
 	}
 
 	private ConfigurationPolicy POLICY = ConfigurationPolicy.IGNORE;
-
+*/
 }

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Optional.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Optional.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Optional.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Optional.java Sat Apr 14 01:09:09 2018
@@ -14,19 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.configuration;
 
-import static org.osgi.framework.Constants.SERVICE_PID;
-import static org.apache.aries.cdi.container.test.TestUtil.*;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
-
 public class ConfigurationCallbackTest_Optional {
 
-	@Test(expected = IllegalArgumentException.class)
+/*	@Test(expected = IllegalArgumentException.class)
 	public void test_emptyAdd() throws Exception {
 		ConfigurationCallback callback = getCallback(POLICY);
 
@@ -358,5 +348,5 @@ public class ConfigurationCallbackTest_O
 	}
 
 	private ConfigurationPolicy POLICY = ConfigurationPolicy.OPTIONAL;
-
+*/
 }

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Require.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Require.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Require.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationCallbackTest_Require.java Sat Apr 14 01:09:09 2018
@@ -14,19 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.configuration;
 
-import static org.osgi.framework.Constants.SERVICE_PID;
-import static org.apache.aries.cdi.container.test.TestUtil.*;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
-
 public class ConfigurationCallbackTest_Require {
 
-	@Test(expected = IllegalArgumentException.class)
+/*	@Test(expected = IllegalArgumentException.class)
 	public void test_emptyAdd() throws Exception {
 		ConfigurationCallback callback = getCallback(POLICY);
 
@@ -358,5 +348,5 @@ public class ConfigurationCallbackTest_R
 	}
 
 	private ConfigurationPolicy POLICY = ConfigurationPolicy.REQUIRE;
-
+*/
 }

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Ignore.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Ignore.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Ignore.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Ignore.java Sat Apr 14 01:09:09 2018
@@ -14,19 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.configuration;
 
-import static org.apache.aries.cdi.container.test.TestUtil.*;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
-import org.osgi.service.cm.ManagedService;
-
 public class ConfigurationManagedServiceTest_Ignore {
 
-	@Test
+/*	@Test
 	public void test_emptyAdd() throws Exception {
 		ConfigurationCallback configurationCallback = getCallback(POLICY);
 
@@ -265,5 +255,5 @@ public class ConfigurationManagedService
 	}
 
 	private ConfigurationPolicy POLICY = ConfigurationPolicy.IGNORE;
-
+*/
 }

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Optional.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Optional.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Optional.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Optional.java Sat Apr 14 01:09:09 2018
@@ -14,20 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.configuration;
 
-import static org.apache.aries.cdi.container.test.TestUtil.*;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
-import org.osgi.service.cm.ManagedService;
-
 public class ConfigurationManagedServiceTest_Optional {
 
-	@Test(expected = IllegalArgumentException.class)
+/*	@Test(expected = IllegalArgumentException.class)
 	public void test_emptyAdd() throws Exception {
 		ConfigurationCallback configurationCallback = getCallback(POLICY);
 
@@ -268,5 +257,5 @@ public class ConfigurationManagedService
 	}
 
 	private ConfigurationPolicy POLICY = ConfigurationPolicy.OPTIONAL;
-
+*/
 }

Modified: aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Require.java
URL: http://svn.apache.org/viewvc/aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Require.java?rev=1829114&r1=1829113&r2=1829114&view=diff
==============================================================================
--- aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Require.java (original)
+++ aries/trunk/cdi/cdi-extender/src/test/java/org/apache/aries/cdi/container/internal/configuration/ConfigurationManagedServiceTest_Require.java Sat Apr 14 01:09:09 2018
@@ -14,20 +14,9 @@
 
 package org.apache.aries.cdi.container.internal.configuration;
 
-import static org.apache.aries.cdi.container.test.TestUtil.*;
-
-import java.util.Dictionary;
-import java.util.Hashtable;
-
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.osgi.service.cdi.annotations.ConfigurationPolicy;
-import org.osgi.service.cm.ManagedService;
-
 public class ConfigurationManagedServiceTest_Require {
 
-	@Test(expected = IllegalArgumentException.class)
+/*	@Test(expected = IllegalArgumentException.class)
 	public void test_emptyAdd() throws Exception {
 		ConfigurationCallback configurationCallback = getCallback(POLICY);
 
@@ -268,5 +257,5 @@ public class ConfigurationManagedService
 	}
 
 	private ConfigurationPolicy POLICY = ConfigurationPolicy.REQUIRE;
-
+*/
 }