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.8.4 to 1.8.6
-------------------------------

** Bug
    * [FELIX-3461] - Re-manipulation with annotated component produces corrupted MANIFEST
    * [FELIX-3466] - Pojoization.directoryManipulation() does not take MANIFEST file location into account.
    * [FELIX-3508] - IPojo Manipulator left out 'array of enums' in generated metadata
    * [FELIX-3539] - iPOJO Manipulator failed on classes containing expanded frames
    * [FELIX-3573] - IPojo bytecode manipulation generates a duplicate local variable
    * [FELIX-3574] - IPojo bytecode manipulation looses method argument names
    * [FELIX-3621] - Two dimensional array as argument to a method in a component

Changes from the 1.8.2 to 1.8.4
-------------------------------

** Bug
    * [FELIX-3297] - iPOJO Manipulator throws ClassNotFoundException
    * [FELIX-3359] - Turn around to avoid to use the split verifier on Java 7
    * [FELIX-3389] - Bnd iPOJO Plugin ignores annotated components
    * [FELIX-3391] - Unexpected warning when using bnd-ipojo-plugin

Changes in the 1.8.2
--------------------

** Bug
    * [FELIX-2825] - The maven-ipojo-plugin does not replace component classes in WAR files
    * [FELIX-3012] - "Duplicate name&signature" problem
    * [FELIX-3098] - iPOJO new manipulator crashes when using a custom reporter
    * [FELIX-3145] - VerifyError on Java 7
    * [FELIX-3249] - iPOJO Bnd Plugin do not write all the metadatas in the manifest

** Improvement
    * [FELIX-3017] - The manipulator should return the original class if it's already manipulated
    * [FELIX-3078] - Introduce resource abstraction in the iPOJO manipulator
    * [FELIX-3079] - Adapt the Ant task and the maven plugin to use the new manipulator capabilities
    * [FELIX-3080] - Implement a BND plugin for iPOJO
    * [FELIX-3131] - Elements and attributes should conserve the insertion order
    * [FELIX-3204] - @Temporal should handle instantiation-time properties
    * [FELIX-3244] - Manipulator : DefaultManifestBuilder should be more extensible