#code-generation #faktor-ips
#генерация кода #faktor-ips
Вопрос:
Мне нужно аннотировать некоторые методы, которые генерируются Faktor-IPS. Наиболее распространенным случаем является @Override-аннотация, потому что у меня есть дополнительные интерфейсы или базовый класс, который я реализую:
* 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;
}
Проблема в том, что дополнительная аннотация удаляется генератором кода Faktor-IPS.
Я знаю о специальных тегах для использования в классе-comment ( «@implements a.b.c.MyInterface» ), чтобы класс продолжал реализовывать интерфейс a.b.c.MyInterface — есть ли что-то подобное для аннотаций, особенно для сгенерированных методов?
Ответ №1:
Faktor-IPS использует инструмент JMerge, созданный проектом Eclipse EMF, для объединения сгенерированного и рукописного кода. Существует (на немецком языке) описание способов, которыми вы можете управлять объединением кода в https://www.faktorzehn.org/de/en/dokumentation/manuelle-anpassungen-des-generieten-codes /.
Чтобы сохранить дополнительные аннотации, в то же время позволяя генератору кода обновлять остальную часть кода, добавьте тег Javadoc (внутри Javadoc, а не аннотации, хотя также начинающийся с ‘@’) ‘@customizedAnnotations ADDED’.
Если у вас есть определенные аннотации, которые вы хотите добавить во многих местах, этот обходной путь требует слишком много работы, поэтому Faktor-IPS позволяет вам определить список аннотаций, которые никогда не будут удалены в настройке генератора .ipsproject ‘retainAnnotations’: просто добавьте туда ‘Override’ и любое ‘@Override’аннотации, которые вы размещаете вручную, не будут удалены генератором.