Changes from the 1.12.0 to 1.12.1
---------------------------------

** Bug
    * [FELIX-4612] - @PostRegistration is not being called
    * [FELIX-4620] - Warning should be removed when @Configuration is used
    * [FELIX-4668] - Can not use @Stereotype annotated annotation from another bundle (unless its package is included or re-exported)
    * [FELIX-4725] - Inner Class Manipulation uses the wrong 'access level'

Changes from the 1.11.2 to 1.12.0
---------------------------------

** Improvement
    * [FELIX-4482] - Use scope=provided for OSGi APIs dependencies

** New Feature
    * [FELIX-4476] - Java 8 Support

** Sub-task
    * [FELIX-4508] - Update to ASM 5.0.2
    * [FELIX-4509] - Change the frame computation strategy

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.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