Changes from 1.16.0 to 1.15.0
---------------------------
** Bug
    * [FELIX-5451] - Input/Output streams not properly closed in org.apache.felix.scr.generator
    * [FELIX-5452] - SCR bnd plugin fails when embedding jars with optional/excluded dependencies


Changes from 1.15.0 to 1.14.0
-----------------------------
** Improvement
    * [FELIX-5373] - Improve failure message when enabling metatype and using no or private properties only
** Bug
    * [FELIX-5304] - SERVICE_PID property should not be created
    * [FELIX-5328] - NoClassDefFound not wrapped in the ClassScanner
    * [FELIX-5345] - Incorrect encoding in metatype props file


Changes from 1.14.0 to 1.13.0 
-----------------------------
** Bug
    * [FELIX-5118] - Exception when running on jdk9-ea


Changes from 1.13.0 to 1.12.0 
-----------------------------
** Improvement
    * [FELIX-4773] - Generated service component xml does not conform to XSD
** Bug
    * [FELIX-4861] - Metatype generation should fail if there is no configuration property
    * [FELIX-4622] - Regression: SCR spec version detection incorrect for activate method
    * [FELIX-4774] - Support for @Reference annotation with unbind method "-"


Changes from 1.12.0 to 1.10.0
----------------------------
** Improvement
    * [FELIX-4586] - A field must be volatile if methods are generated for a dynamic reference
** Bug
    * [FELIX-4296] - Cannot deactivate service interface detection in DS annotations
    * [FELIX-4587] - Update method is not verified


Changes from 1.10.0 to 1.9.0
----------------------------
** Improvement
    * [FELIX-4461] - Update to ASM 5 for Java 8 compatibility


Changes from 1.9.0 to 1.8.2
---------------------------
** Improvement
    * [FELIX-4378] - Generate a metatype properties file if label/description are missing on @Component or @Property
** Bug
    * [FELIX-4379] - Properties, references and services from inherited classes are only used if the class has the component annotation
    * [FELIX-4383] - Metatype generation should use component name (and not classname)
    * [FELIX-4441] - The default value is not escaped correctly.
    * [FELIX-4442] - Lifecycle methods with wrong arguments should be treated as an error


Changes from 1.8.2 to 1.8.0
---------------------------
** Improvement
    * [FELIX-4249] - Make the default error location 1,1 instead of 0,0
** Bug
    * [FELIX-4192] - SCR Generator fails with a NPE in case a class level Reference doesn't define a referenceInterface
    * [FELIX-4010] - SCR Plugin aborts when scanning a Java 8 class file
    * [FELIX-4246] - SCR and Metatype descriptor files get deleted on subsequent (incremental) eclipse build

 
Changes from 1.8.0 to 1.7.0
---------------------------
** Improvement
    * [FELIX-4101] - Create metatype.properties file when description and label are inlined
    * [FELIX-4126] - Discontinue creation of single XML descriptor files 
    * [FELIX-4170] - Deprecate inheritance of component descriptors
 

Changes from 1.7.0 to 1.6.0
---------------------------
** Bug
    * [FELIX-4058] - PropertyType password has a wrong type (passwort)

 
Changes from 1.6.0 to 1.5.0
---------------------------
** Improvement
    * [FELIX-4033] - Issue warning messages for redundant SCR annotation combinations and an error for declaring the service.id property
    * [FELIX-4035] - Issue warning messages when metatype is be created, but no properties are defined
** Bug
    * [FELIX-4030] - Generated metatype file contains all metatype infos
    * [FELIX-3542] - Escape property values used as Metatype default values

 
Changes from 1.5.0 to 1.4.0
----------------------------
** Bug
    * [FELIX-3917] - bind/unbind methods are not generated

Changes from 1.4.0 to 1.3.0
----------------------------
** Improvement
    * [FELIX-3794] - Use DS specification version per component
    * [FELIX-3636] - Using @Service without @Component should log a warning
    * [FELIX-2929] - Read @Property from interfaces of types annotated with @Component
    * [FELIX-3169] - Add support for new PASSWORD attribute type of Metatype service
    * [FELIX-3886] - Improve error message for empty *.java-File

** Task
    * [FELIX-3867] - Drop support for JDK 1.4 completely

** Bug
    * [FELIX-3815] - Maven SCR Plugin does not correctly set specVersion to 1.1 if bind method with two parameters are used (OSGi Comp 4.2 $112.3.1)
    * [FELIX-3858] - Service descriptor written in wrong encoding
    * [FELIX-3232] - SCR annotations @Activate @Deactivate @Modified in outer classes also affect nested classes, annotations in nested classes are ignored 


Changes from 1.3.0 to 1.2.0
---------------------------
** Improvement
    * [FELIX-3641] - Option to generate separate descriptor files
    
** Bug
    * [FELIX-3788] - specVersion incorrectly determined, depends on class order
    * [FELIX-3568] - java.lang.VerifyError from bundles compiled with maven-scr-plugin (java 7)
    * [FELIX-3739] - scr-plugin: "Annotated method {0} not found"
    * [FELIX-3793] - Property of type Character must use unicode value
    * [FELIX-3653] - Define the "@Reference" annotation on class level without a "referenceInterface" parameter.


Changes from 1.1.4 to 1.2.0
---------------------------

** Task
    * [FELIX-3225] - Drop javadoc annotation support
    * [FELIX-3552] - Implement new features of DS 1.2
    * [FELIX-3550] - Reimplement the SCR Generator

** Bug
    * [FELIX-3571] - "Comparison method violates general contract!" error in maven-scr-plugin
    * [FELIX-3269] - @Property is not properly parsed.
    * [FELIX-3189] - Mixing full-qualified Reference annotations and imported one results in no References exported to seviceComponents.xml
    * [FELIX-3606] - SCR Plugin: build failure on wildcard imports (e.g. java.util.*)
    * [FELIX-3234] - @Property annotation raises exceptions on longValue=0L use 

** Improvement
    * [FELIX-2689] - Upgrade Descriptor generator to new parent POM and adapt legal files


Changes from 1.1.2 to 1.1.4
---------------------------

** Bug
    * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
    * [FELIX-3117] - NullPointerException when not implementing interface that is defined with @Service
    * [FELIX-3136] - Endless loop: JavaClassDescriptorManager.getJavaClassDescription()
    * [FELIX-3113] - NPE in multi-module Maven project
    

Changes from 1.1.0 to 1.1.2
---------------------------

** Bug
    * [FELIX-2963] - scr annotations @Activate @Deactivate @Modified are not detected with class inheritance
    * [FELIX-2978] - Lookup reference policy does not work for inherited components
    * [FELIX-2945] - SCR plugin: Parsing of "options" for property tag broken for java annotations
    * [FELIX-2906] - @Property(cardinality=Integer.MAX_Int, ...) causes java.lang.NumberFormatException
    * [FELIX-2878] - scr- and bundle-plugin in multimodule project fails with goal "test"


** Improvement
    * [FELIX-2492] - scr plugin: using src annotations causes NoClassDefFoundError and other errors
    * [FELIX-2939] - Maven SCR Plugin is not (marked as) thread-safe for parallel builds
    * [FELIX-2908] - Use same mechanism to get single annotation values as for multiple annotation values


Changes from 1.0.0 to 1.1.0
---------------------------

** Bug
    * [FELIX-2704] - @Property(cardinality=Integer.MAX_Int, ...) causes java.lang.NumberFormatException
    * [FELIX-2835] - SCR plugin: Parsing of "options" for property tag broken for javadoc annotations
    * [FELIX-2731] - NPE while scanning sources with QDox
    * [FELIX-2876] - <reference> element not generated when name is missing

** Improvement
    * [FELIX-2853] - Deprecate javadoc tags
    * [FELIX-2753] - Support array of classes for @Service annotation
    * [FELIX-2863] - Warnings and error messages contain @scr.* if annotations are used
    * [FELIX-2690] - Add changelog.txt to SCR/Metatype generation modules


