Changes from the 1.10.1 to 1.11.0
---------------------------------

** Bug
    * [FELIX-4021] - maven-ipojo-plugin fails on WAR packaging
    * [FELIX-4219] - Variables named not stored in bytecode for constructors during manipulation
    * [FELIX-4247] - Memory leak with ServiceUsage and inner class (Listener style)

** Improvement
    * [FELIX-4112] - Add meta annotations for handler description
    * [FELIX-4269] - Introduce an enumeration to configure binding policy from the annotation

** Task
    * [FELIX-4134] - Move integration-tests to the reactor
    * [FELIX-4151] - Fix mistakes in the javadoc tags
    * [FELIX-4155] - Update bnd-ipojo-plugin for bndlib 2.x
    * [FELIX-4156] - Fix versions of maven plugins
    * [FELIX-4270] - Bump iPOJO package version to 1.11.0

** Sub-task
    * [FELIX-4253] - Add methods from inner classes in the metadata collected during the manipulation
    * [FELIX-4254] - Specify the method id of methods from inner class
    * [FELIX-4255] - Extend the inner class manipulation to allow method interception
    * [FELIX-4256] - Avoid manipulation native and static methods from inner classes

Changes from the 1.10.0 to 1.10.1
---------------------------------

** Bug
    * [FELIX-4077] - Fix documentation urls in maven projects
    * [FELIX-4091] - Bnd iPOJO Plugin only browse classes annotated with some iPOJO annotations
    * [FELIX-4093] - Dependency is ignored if @Bind does not respect naming pattern
    * [FELIX-4110] - @ServiceProperty and @StaticServiceProperty are missing the immutable attribute

** Improvement
    * [FELIX-4094] - Recognize add/remove method naming pattern

** New Feature
    * [FELIX-4095] - Add CDI-like @Stereotype

** Task
    * [FELIX-4092] - Move 'annotation' module from 'runtime' to 'manipulator' project
    * [FELIX-4103] - Skip deployment of it-tests
    * [FELIX-4104] - Do not run integration-tests in the default build

Changes from the 1.8.6 to 1.10.0
--------------------------------

** Bug
    * [FELIX-3827] - Error in bbd-ipojo-plugin of manipulating jar with embedded dependencies with maven bundle plugin + bnd-ipojo-plugin
    * [FELIX-3900] - @HandlerDeclaration do not convert DOM Attributes to iPOJO Attributes correctly
    * [FELIX-3938] - maven-ipojo-plugin does not behave as bnd-ipojo-plugin
    * [FELIX-3974] - Properties cannot be set as immutable using annotations
    * [FELIX-3995] - Missing options in Bind annotation
    * [FELIX-4027] - The iPOJO Ant task requires org.objectweb.asm.tree
    * [FELIX-4046] - Inner class manipulation fails with expanded frames
    * [FELIX-4052] - Instance declaration not created correctly when using @Instantiate if the @Component specifies a name

** Improvement
    * [FELIX-3286] - Update POM to use the new parent
    * [FELIX-3452] - Extending maven-ipojo-plugin with directoryManipulation support.
    * [FELIX-3749] - Refactor the manipulator for better (and extensible) annotation support
    * [FELIX-3837] - PojoizationPlugin should be more extensible
    * [FELIX-3901] - Avoid converting Xml namespace declaration with @HandlerDeclaration
    * [FELIX-3927] - Exclude iPOJO 2.0 packages during manipulation

** New Feature
    * [FELIX-3699] - Allow annotations to handle custom component definitions.
    * [FELIX-4059] - Provide a CLI tool to manipulate iPOJO bundles

** Task
    * [FELIX-3903] - Migrate tests to pax exam 3
    * [FELIX-3921] - Update pom to latest Felix's parent
    * [FELIX-3976] - Move the online manipulator out of the core bundle

Changes from the 1.4.2 to 1.6.0
-------------------------------
** Improvement
    * [FELIX-1427] - Service injection with Smart Proxies
    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified

    
Changes from the 1.4.0 to 1.4.2
-------------------------------
** Bug
    * [FELIX-1518] - iPOJO manipulator is really slow even when annotation are ignored
    

Version 1.4.0
-------------
** Improvement
    * Update parent pom
    * Initial commit
    
   
