Changes from the 1.11.1 to 1.11.2
---------------------------------

 ** Bug
     * [FELIX-4453] - Introduce manipulator BOM (Bill of Material)

 ** Improvement
     * [FELIX-4454] - Online manipulator should be able to take advantage of Stereotypes

Changes from the 1.11.0 to 1.11.1
---------------------------------

** Bug
    * [FELIX-4340] - Flex iPOJO online manipulator error if metadata.xml file not supplied
    * [FELIX-4347] -  should ignore inner classes that are assigned to static fields

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
    
   
