Changes from the 1.6.4 to 1.8.0
-------------------------------
** Bug
    * [FELIX-2779] - iPOJO manipulator badly supports custom annotation attributes of type Class
    * [FELIX-2664] - Native methods should not be manipulated

** Improvement
    * [FELIX-1424] - Constructor Injection
    * [FELIX-1428] - Constructor injection of Configuration properties
    * [FELIX-2620] - Change iPojo annotation parameters to follow java naming conventions
    * [FELIX-2621] - Rename annotations to remove collisions
    * [FELIX-2622] - Support static service properties that are not mirrored into fields
    * [FELIX-2630] - Rename @Component attributes to follow the java naming conventions
    * [FELIX-2732] - [iPOJO] Service modified callback should define a default method name
    * [FELIX-2742] - Constructor injection of service dependencies
    * [FELIX-2743] - Modify Pojoization to be more easily customizable
    * [FELIX-2755] - Allow the manipulator and the different front end to use several metadata files

Changes from the 1.6.2 to 1.6.4
-------------------------------
** Bug
    * [FELIX-2430] - IPOJO manipulation (ant task) results in invalid classes throwing java.lang.VerifyError at runtime in InstanceManager

** Improvement
    * [FELIX-2420] - Enum support for @Property annotation
    * [FELIX-2461] - Allow specifying the targeted service interface in the @ServiceController
    * [FELIX-2485] - Improve the performance of the manipulator on large files
    * [FELIX-2542] - Annotations on methods parameters are not moved on public methods after manipulation

Changes from the 1.6.0 to 1.6.2
-------------------------------
** Improvement
    * [FELIX-2296] - Access to ServiceReference in iPOJO service.

Changes from the 1.4.2 to 1.6.0
-------------------------------
** Improvement
    * [FELIX-1427] - Service injection with Smart Proxies
    * [FELIX-1646] - Add @Handler annotation to declare handlers without metadata.xml
    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified

** Wish
    * [FELIX-1940] - Add @Instance annotation to declare instances without metadata.xml


Changes from the 1.4.0 to 1.4.2
-------------------------------
** Bug
    * [FELIX-1411] - Issue on windows to find components inside bundle
    * [FELIX-1518] - iPOJO manipulator is really slow even when annotation are ignored


Changes from 1.2.0 to 1.4.0
---------------------------
** Bug
    * [FELIX-1302] - Manipulator never ignore annotations
    * [FELIX-1319] - Issue in the metadata overiding analysis in iPOJO annotations

** Improvement
    * Update parent pom
    * [FELIX-943] - Allow iPOJO manipulator to manipulate directories


Changes from 1.0.0 to 1.2.0
---------------------------
** Bug
    * [FELIX-788] - Failed to create object that extends super class with BundleContext argument

** Improvement
    * [FELIX-813] - Resolve XML-Schemas locally rather than from Internet
    * [FELIX-830] - Simplify the "id/parent" resolution to compute the metadata hierarchy during annotation processing
    * [FELIX-846] - Enhance the iPojo maven plugin to take metadata from pom.
    * [FELIX-876] - Specification auto import is not supported for simple component types


Changes from 0.8.0 to 1.0.0
---------------------------
** Bug
    * [FELIX-649] - "Expecting to find object/array on stack" Error when asking for instance of an iPOJO component
    * [FELIX-697] - Generation of a duplicated field when using generics
    * [FELIX-739] - iPOJO and annotations support when manipulating
    * [FELIX-751] - Wrong access for setter methods

** Improvement
    * [FELIX-655] - Add a 'from' attribute in the service dependencies
    * [FELIX-678] - Improve missing fields detection during the packaging process
    * [FELIX-687] - Support inner and nested classes
    * [FELIX-716] - Provide XML schemas for iPOJO descriptors


Version 0.8.0
-------------
    * Initial release
