Search code examples
code-generationfaktor-ips

Annotations are removed by Faktor-IPS Code Generator


I need to annotate some methods which are generated by Faktor-IPS. The most common case is the @Override-annotation, because I have additional interfaces or a base class I implement:

     * Gibt den Wert des Attributs beschreibung zurueck.
     * 
     * @generated
     */
    @IpsAttribute(name = "beschreibung", kind = AttributeKind.CHANGEABLE, valueSetKind = ValueSetKind.AllValues)
    @Override // <- manually added
    public String getBeschreibung() {
        return beschreibung;
    }

Problem is, that the additional annotation is removed by the code generator of Faktor-IPS.

I know about the special tags to use in the class-comment ( "@implements a.b.c.MyInterface" ) to keep the class implement the interface a.b.c.MyInterface - is there something similar for annotations, especially on generated methods?


Solution

  • Faktor-IPS uses the JMerge tool created by the Eclipse EMF project to combine generated and handwritten code. There is a (German) description of the ways you can control how the code is merged at https://www.faktorzehn.org/de/en/dokumentation/manuelle-anpassungen-des-generieten-codes/.

    To keep additional annotations while still letting the code generator update the rest of the code, add the Javadoc tag (inside the Javadoc, not an annotation, although also beginning with '@') '@customizedAnnotations ADDED'.

    If you have certain annotations that you want to add in many places, that workaround is too much work, so Faktor-IPS allows you to define a list of annotations that will never be removed in the .ipsproject generator setting 'retainAnnotations': just add 'Override' there and any '@Override' annotation you manually place won't be removed by the generator.