<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you 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.
  -->

<ipojo
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
        xmlns="org.apache.felix.ipojo"
        >
    <!-- Simple provider  used for manipulation analysis -->
    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-FooProviderType-1" architecture="true">
        <provides/>
    </component>

    <!-- Non lazzy service provider, to check instantiation -->
    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-ImmediateFooProviderType" immediate="true"
            architecture="true">
        <provides/>
    </component>

    <!-- Type checking different creation policy -->
    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-FooProviderType-1-Sing" factory-method="singleton"
            architecture="true">
        <provides/>
    </component>

    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-FooProviderType-1-Sev" factory-method="several"
            architecture="true">
        <provides/>
    </component>

    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-FooProviderType-1-SingM" factory-method="singleton"
            architecture="true">
        <provides/>
    </component>

    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-FooProviderType-1-SevM" factory-method="several"
            architecture="true">
        <provides/>
    </component>

    <component
            classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
            name="ManipulationCreation-ImmediateFooProviderTypeSingleton" immediate="true"
            factory-method="singleton" architecture="true">
        <provides/>
    </component>


    <!-- Try calling super constructors -->
    <component classname="org.apache.felix.ipojo.runtime.core.components.CallSuperConstructor" immediate="true"/>
    <component classname="org.apache.felix.ipojo.runtime.core.components.CallSuperConstructorWithNew" immediate="true"/>
    <component classname="org.apache.felix.ipojo.runtime.core.components.CallSuperConstructorWithBC" immediate="true"/>
    <component classname="org.apache.felix.ipojo.runtime.core.components.CallSuperSuperConstructorWithNew"
               immediate="true"/>

    <!--  Several constructors -->
    <component classname="org.apache.felix.ipojo.runtime.core.components.SeveralConstructors">
        <provides/>
    </component>
    <!--  No Empty constructor -->
    <component classname="org.apache.felix.ipojo.runtime.core.components.NoEmptyConstructor">
        <provides/>
    </component>
    <component classname="org.apache.felix.ipojo.runtime.core.components.NoEmptyConstructorWithParentClass">
        <provides/>
    </component>
</ipojo>
