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

Changes from the 1.8.0 to 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

Changes from the 1.6.0 to 1.8.0
-------------------------------
** Improvement
    * [FELIX-2755] - Allow the manipulator and the different front end to use several metadata files

Changes from the 1.4.2 to 1.6.0
-------------------------------
** Bug
    * [FELIX-1411] - Issue on windows to find components inside bundle

** 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-1411] - Issue on windows to find components inside bundle


Changes from 1.2.0 to 1.4.0
---------------------------
** Bug
    * [FELIX-1302] - Manipulator never ignore annotations

** Improvement
    * Update parent pom


Changes from 1.0.0 to 1.2.0
---------------------------
** Improvement
    * [FELIX-813] - Resolve XML-Schemas locally rather than from Internet

Changes from 0.8.1 to 1.0.0
---------------------------
** Bug
    * Update contained Xerces packages to support XML-Schemas

** Improvement
    * Embed the latest manipulator

Version 0.8.1
-------------
    * Initial release
