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

** Improvement
    * [FELIX-2492] - scr plugin: using src annotations causes NoClassDefFoundError and other errors
    * [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-2874] - Add new scopes to SlingFilter annotation and use new property names
    * [FELIX-2838] - Allow classes to be specifed as values for the @Property annotation
    * [FELIX-2863] - Warnings and error messages contain @scr.* if annotations are used
    * [FELIX-2690] - Add changelog.txt to SCR/Metatype generation modules


