Generatoroptionen

Einleitung

Faktor-IPS bietet viele Möglichkeiten, den Java-Code, der aus dem Modell generiert wird, an die eigenen Bedürfnisse anzupassen. Diese werden über den Abschnitt IpsArtefactBuilderSetConfig in der .ipsproject-Konfigurationsdatei bzw. über die Projekteinstellungen auf der Seite "Faktor-IPS Code Generator" konfiguriert:

<IpsArtefactBuilderSetConfig>

   <!--Generiert JAXB-Annotationen in Vertragsklassen. Erlaubte Werte sind 'None', 'ClassicJAXB' oder 'JakartaXmlBinding'.-->
   <Property name="generateJaxbSupport" value="None"/>

   <!--Generiert nur Implementierungsklassen (false) oder auch Published Interfaces (true)-->
   <Property name="generatePublishedInterfaces" value="false"/>

   <!--Hier können die qualifizierten Namen für zusätzliche Annotationen eingestellt werden, die an alle generierten Methoden angehängt werden (z.B. org.faktorips.runtime.annotation.IpsGenerated (um generierten Code von der Analyse durch SonarQube/JaCoCo auszuschließen) / java.lang.SuppressWarnings / edu.umd.cs.findbugs.annotations.SuppressFBWarnings). Mehrere Annotationen werden mit Strichpunkt getrennt.-->
   <Property name="additionalAnnotations" value="org.faktorips.runtime.annotation.IpsGenerated"/>

   <!--Legt fest ob die Generierung von zusätzlichen Annotationen für alle Methoden oder nur für @generated-Methoden erfolgen soll. Von Hand geschriebene, @restrainedmodifiable Methoden können von der Generierung von zusätzlichen Annotationen ausgeschlossen werden, wenn sie beispielsweise zur Steuerung der Code-Abdeckung verwendet werden.-->
   <Property name="additionalAnnotationsLocation" value="GeneratedAndRestrainedModifiable"/>

   <!--Konstantennamen für Camel-Case-Properties mit Unterstrich trennen.-->
   <Property name="camelCaseSeparated" value="true"/>

   <!--Qualifizierter Name der Basisklasse für Vertragsklassen. Falls ein leerer String angegeben wird, wird die Defaultbasisklasse benutzt.-->
   <Property name="baseClassPolicyComponent" value=""/>

   <!--Der Logging Konnektor der im generierten Code verwendet werden soll. Wenn "None" ausgewählt ist, wird kein Logging generiert. Im Standard sind die Konnektoren "org.faktorips.devtools.core.javaUtilLoggingConnector" und "org.faktorips.devtools.core.log4jLoggingConnector" enthalten. Neue Konnektoren werden mit dem Extension Point "org.faktorips.devtools.core.loggingFrameworkConnector" registriert.-->
   <Property name="loggingFrameworkConnector" value="None"/>

   <!--Legt fest ob die Methode getEffectiveFromAsCalendar() generiert werden soll. Funktioniert nur in Kombination mit der Einstellung "Basisklasse für Vertragsklassen".-->
   <Property name="generateGetEffectiveFromAsCalendar" value="true"/>

   <!--Nicht mergebare Ressourcen als abgeleitet markieren.-->
   <Property name="markNoneMergeableResourcesAsDerived" value="false"/>

   <!--Hier können die Namen für Annotationen eingestellt werden, die, wenn manuell hinzugefügt, an generierten Methoden nicht entfernt werden (z.B. Override). Mehrere Annotationen werden mit Strichpunkt getrennt. Wird die Annotation qualifiziert verwendet (z.B. weil es mehrere Annotationen mit gleichem unqualifiziertem Namen gibt) muss der Name hier qualifiziert angegeben werden, ansonsten unqualifiziert.-->
   <Property name="retainAnnotations" value=""/>

   <!--Legt fest wohin Formeln kompiliert werden.-->
   <Property name="formulaCompiling" value="Both"/>

   <!--Die Sprache in der Code und Dokumentation generiert werden. Derzeit werden die Werte de und en unterstützt.-->
   <Property name="generatorLocale" value="de"/>

   <!--Generiert toXml()-Methoden in Produktbaustein und -generationsklassen.-->
   <Property name="toXMLSupport" value="false"/>

   <!--Generiert copy-Methoden in Vertagsklassen.-->
   <Property name="generateCopySupport" value="true"/>

   <!--Generiert Unterstützung für das Visitor-Pattern in allen Vertragsklassen.-->
   <Property name="generateVisitorSupport" value="true"/>

   <!--Der Persistence-Provider, der zur Generierung herstellerspezifischen Codes verwendet wird. Derzeit werden die Provider 'EclipseLink 1.1', 'EclipseLink 2.5', 'EclipseLink 3.0', 'Generic JPA 2.0', 'Generic JPA 2.1', 'Jakarta Persistence 2.2' und 'Jakarta Persistence 3.0' unterstützt.-->
   <Property name="persistenceProvider" value="None"/>

   <!--Generiert einen Mechanismus zur Ermittelung von Modell-Unterschieden.-->
   <Property name="generateDeltaSupport" value="true"/>

   <!--Qualifizierter Name der Basisklasse für Produktklassen. Falls ein leerer String angegeben wird, wird die Defaultbasisklasse benutzt.-->
   <Property name="baseClassProductComponent" value=""/>

   <!--Generiert nur die nötigsten Javadoc-Kommentare wie @generated, sowie Dokumentation aus dem Modell. Um überflüssige Leerzeilen in den Kommentaren zu vermeiden, muss die Option "Entferne leere Zeilen" im Java-Formatierungsprogramm der Projekteinstellungen aktiviert werden. Noch kompakter werden die Kommentare, wenn die Option "/** and */ on separate lines" deaktiviert wird.-->
   <Property name="minimalJavadoc" value="false"/>

   <!--Generiert Getter-Methoden für Produkt-Attribute in produktkonfigurierten Vertragsklassen.-->
   <Property name="generateConvenienceGetters" value="false"/>

   <!--Hier kann die Variante der DatatypeHelper definiert werden, die für die Local* Datatypes (LocalDate, LocalDateTime, LocalTime) verwendet wird. Möglich sind Joda oder Java8-->
   <Property name="localDateDatatypeHelperVariant" value="java8"/>

   <!--Builder vereinfachen den Aufbau von Teststrukturen.-->
   <Property name="builderClasses" value="All"/>

   <!--Generiert Unterstützung für das Listener-Pattern in allen Vertragsklassen.-->
   <Property name="generateChangeListener" value="false"/>

   <!--Lässt alle generierten Klassen Serializable implementieren.-->
   <Property name="serializablePolicyCmpts" value="false"/>

   <!--Legt fest ob die ValueSet-Methoden für alle ValueSet-Implementierungen vereinheitlicht werden sollen oder wie ursprünglich ihren Typ im Methodennamen widerspiegeln sollen. Wird ein Manifest verwendet sollte diese Einstellung auch dort gepflegt werden.-->
   <Property name="valueSetMethods" value="Unified"/>
</IpsArtefactBuilderSetConfig>
Dieser Teil der Dokumentation ist noch im Aufbau. Wir beginnen damit, neue Features zu dokumentieren und ergänzen nach und nach die bestehenden Features.