<!--
  ~ 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.test.scenarios.component.FooProviderType1"
		name="Manipulation-FooProviderType-1" architecture="true">
		<provides />
	</component>
	
	<!-- Non lazzy service provider, to check instantiation -->
	<component
		classname="org.apache.felix.ipojo.test.scenarios.component.FooProviderType1"
		name="Manipulation-ImmediateFooProviderType" immediate="true"
		architecture="true">
		<provides />
	</component>
	
	<!-- Nested & Inner classes -->
	<component name="inners" classname="org.apache.felix.ipojo.test.scenarios.component.InnerClasses">
		<provides>
			<property field="privateObject"/>
			<property field="privateInt"/>
			
			<property field="protectedObject"/>
			<property field="protectedInt"/>
			
			<property field="packageObject"/>
			<property field="packageInt"/>
			
			<property field="publicObject"/>
			<property field="publicInt"/>
		</provides>
	</component>
</ipojo>
