Release Notes

Version 26.7.0

Faktor-IPS 26.7 bringt mehrere wichtige Neuerungen: Mit dem Faktor-IPS Modeling Tool steht erstmals eine eigenständige RCP-Anwendung auf Eclipse-Basis speziell für die Modellierung zur Verfügung. Die Generierung von .properties-Dateien wurde auf UTF-8-Kodierung umgestellt. Veraltete API-Elemente aus früheren Versionen (21.6 bis 24.7) wurden entfernt. Außerdem wurden neue Features wie konfigurierbare Kardinalitäten für Vertragsbeziehungen und offene Intervallgrenzen für Wertebereiche eingeführt.

.properties-Dateien mit UTF-8-Kodierung

Faktor-IPS generiert nun .properties-Dateien mit UTF-8-Kodierung statt der bisherigen ISO-8859-1 Kodierung. Dadurch können Sonderzeichen und Unicode-Zeichen direkt in den Properties-Dateien verwendet werden, ohne dass sie als \uXXXX escaped werden müssen. Bestehende Projekte werden beim Update automatisch migriert - alte generierte Properties-Dateien werden gelöscht und mit der neuen UTF-8-Kodierung neu erstellt.

Sollte das Faktor-IPS Projekt so aufgesetzt sein, dass die generierten Dateien (derived) nicht im Source Code Repository eingecheckt sind, stellen Sie sicher, dass die Einstellung markNoneMergeableResourcesAsDerived auf true steht. Dies stellt sicher, dass die Properties-Dateien durch "Alle Projekte bereinigen" mit der neuen UTF-8-Kodierung neu erstellt werden. Falls Sie generierte Properties-Dateien manuell bearbeitet haben, gehen diese Änderungen bei der Migration verloren. Sichern Sie manuelle Anpassungen vor dem Update.

Faktor-IPS Modeling Tool

Mit dem Faktor-IPS Modeling Tool steht erstmals eine eigenständige Rich-Client-Platform-(RCP)-Anwendung auf Eclipse-Basis zur Verfügung, die speziell auf die Arbeit mit Faktor-IPS-Modellen zugeschnitten ist. Es enthält Faktor-IPS sowie die minimal notwendigen Abhängigkeiten, jedoch bewusst keinen Java-Compiler und keinen Eclipse-m2e-Builder. Das Tool richtet sich an Entwicklerinnen und Entwickler, die ausschließlich das Modellierungswerkzeug und den Codegenerator von Faktor-IPS nutzen möchten und für die Java-Entwicklung eine andere IDE einsetzen.

Das Faktor-IPS Modeling Tool bringt eine eigene Model Editor-Perspektive mit, die eine übersichtliche Standardanordnung der Views für die Modellarbeit bietet. Darüber hinaus ist eine Git-Perspektive enthalten. Die bereits bekannte Product Definitions-Perspektive bleibt weiterhin verfügbar.

Das Tool steht für folgende Betriebssysteme und Architekturen als Download bereit:

  • Windows (x86_64)

  • Linux (x86_64, aarch64, ppc64le)

  • macOS (x86_64, Apple Silicon/aarch64)

Über den Shortcut kbd:[Strg+3] lassen sich Befehle und IDE-Funktionen schnell per Texteingabe suchen und aufrufen.

Da das Faktor-IPS Modeling Tool keinen Java-Compiler enthält, stehen Java-bezogene Funktionen wie z. B. "JUnit-Tests ausführen" zwar im Menü zur Verfügung, führen aber zu einem Fehler. Diese Funktionen sind für den reinen Modellierungsworkflow nicht relevant.
Um den IPS-Modeller unter MacOS starten zu können, muss aktuell noch ein quarantäne-Attribut entfernt werden, das automatisch vom Gatekeeper bei heruntergeladenen, nicht signierten Dateien hinzugefügt wird: xattr -rd com.apple.quarantine <pfad zur faktorips.app>

Verbesserte Validierung bei produktkonfigurierbaren Vertragsattributen

Die Validierung wurde angepasst, so dass jetzt bereits im Vertragsmodell gewarnt wird, wenn dieses so konfiguriert ist, dass keine gültige Produktkonfiguration möglich ist. Zum Beispiel kann in der Produktkonfiguration kein gültiger Zustand erreicht werden, wenn im Modell der Wertebereich zwar als Aufzählung definiert ist, diese aber abstrakt, also ohne Angabe von Werten, ist, das Attribut aber gleichzeitig als Pflichtfeld markiert ist. Stellt man dann nur die Relevanz als produktkonfigurierbar, kann im Produkt der Aufzählung kein Wert hinzugefügt werden. Hier gibt es jetzt auch am Relevanz-Feld eine Fehlermeldung, die auf diese problematische Modellierung hinweist.

Range mit Angabe, ob Intervallgrenzen zum Wertebereich gehören

Für Wertebereiche ist es jetzt möglich, auf Modell- und Produktkonfigurationsebene zu definieren, ob die angegebenen Intervallgrenzen in den Wertebereich einbezogen oder ausgeschlossen werden. Beispielsweise können Decimal-Attribute so konfiguriert werden, dass nur positive Zahlen (> 0) zulässig sind z.B.: (0 …​ *]. Die Benutzeroberfläche für Wertebereiche wurde hierfür um jeweils eine Checkbox für die untere und obere Intervallgrenze erweitert.

Konfigurierbare Kardinalität für Vertragsbeziehungen

Vertragsbeziehungen können nun so konfiguriert werden, dass ihre minimale und maximale Kardinalität im Produktbaustein eingeschränkt werden kann. Dies wird über eine neue Checkbox an der Vertragsbeziehung im Modell-Editor gesteuert. Vertragsbeziehungen mit diesem Flag, die keiner Produktbeziehung zugeordnet sind, werden nun im Produkteditor sichtbar und ihre Kardinalitäten können dort direkt konfiguriert werden. Die konfigurierte Kardinalität wird gegen die Modellgrenzen validiert, die Kardinalitäten von konfigurierten Produktbeziehungen werden wiederum gegen die konfigurierte Kardinalität.

Konfigurierte Annotationen an allen generierten Membern

Bisher wurden über additionalAnnotations (.ipsprojectIpsArtefaktBuilderSetConfig) konfigurierte Annotationen nur an generierten Methoden gesetzt, nicht aber an den generierten Klassen, Interfaces, Builder-Klassen, Enum-Typen oder Enum-Konstanten. Dieser Fehler wurde behoben. (siehe auch API-Änderungen)

Zusätzliche Annotations für Felder

Mit der neuen Generator-Property additionalAnnotationsForFields können nun auch für generierte Felder und Konstanten zusätzliche Annotations konfiguriert werden. Diese Option funktioniert analog zu additionalAnnotations, gilt jedoch ausschließlich für Felder und Konstanten, die mit /* @generated */ markiert sind.

   <Property name="additionalAnnotationsForFields" value="org.faktorips.runtime.annotation.IpsGenerated"/>

Die Einstellung additionalAnnotationsLocation gilt auch für die mit additionalAnnotationsForFields konfigurierten Annotations.

Deprecation von faktorips-runtime-javax-xml

Nachdem alle Frameworks wie Jakarta EE und Spring seit geraumer Zeit den Jakarta-Namespace und entsprechende aktuelle Dependencies nutzen beenden wir die Pflege der alten javax-Variante. Statt faktorips-runtime-javax-xml sollte faktorips-runtime-jakarta-xml genutzt werden.

Die deprecateten javax-Klassen wurden aus dem Modul faktorips-runtime entfernt und sind nur noch im Modul faktorips-runtime-javax-xml enthalten. Ältere Faktor-IPS-Versionen, die diese Klassen direkt aus der Runtime verwenden, sind daher nicht mit der 26.7-Runtime kompatibel.

Kompatibilität

Java

Faktor-IPS 26.7 setzt mindestens Java 21 voraus und wurde auf Kompatibilität mit Java 25 getestet.

Eclipse

Die Design-Time (Eclipse-Plugin) benötigt mit diesem Release mindestens Eclipse 2024-09 und wurde mit dieser sowie allen Versionen bis einschließlich 2026-06 getestet.

Wir empfehlen aktuell die Verwendung von Eclipse 2025-06 oder höher. Eclipse 2025-03 wird wegen einem irrtümlichen Compiler-Fehler (JDT Bug #3775) nicht empfohlen

Maven

Für die Verwendung der Faktor-IPS-Maven-Plugins wird mindestens Maven 3.9.9 vorausgesetzt. Bei der Nutzung älterer Versionen kann es zu Fehlern im Build kommen.

API-Änderungen

Dieses Release entfernt mehrere veraltete API-Elemente, die in früheren Versionen zur Entfernung vorgemerkt wurden. Alle entfernten Elemente waren mehrere Releases lang mit @Deprecated(forRemoval = true) markiert.

Runtime

  • Entfernt: InMemoryRuntimeRepository.putTable(ITable<?> table, String qName) (veraltet seit 24.7)

    • Migration: Verwenden Sie stattdessen putTable(ITable). Setzen Sie den qualifizierten Namen direkt auf der Tabelle mit table.setName(qualifiedName), bevor Sie putTable(table) aufrufen.

  • Entfernt: IRuntimeRepository.newJAXBContext() (veraltet seit 23.6)

    • Migration: Verwenden Sie stattdessen org.faktorips.runtime.xml.javax.JaxbSupport.newJAXBContext(IRuntimeRepository) oder org.faktorips.runtime.xml.jakarta.JaxbSupport.newJAXBContext(IRuntimeRepository)

  • Entfernt: AbstractRuntimeRepository.newJAXBContext() (veraltet seit 23.6)

    • Migration: Verwenden Sie stattdessen org.faktorips.runtime.xml.javax.JaxbSupport.newJAXBContext(IRuntimeRepository) oder org.faktorips.runtime.xml.jakarta.JaxbSupport.newJAXBContext(IRuntimeRepository)

  • Entfernt: AbstractRuntimeRepository.newJAXBContext(JAXBContext) (veraltet seit 23.6)

    • Migration: Verwenden Sie stattdessen org.faktorips.runtime.xml.javax.JaxbSupport.newJAXBContext(JAXBContext, IRuntimeRepository) oder org.faktorips.runtime.xml.jakarta.JaxbSupport.newJAXBContext(JAXBContext, IRuntimeRepository)

  • Neu: org.faktorips.runtime.internal.Range erhält einen neuen Konstruktor Range(String lower, String upper, String step, boolean containsNull, boolean lowerBoundOpen, boolean upperBoundOpen), der offene bzw. halboffene Intervallgrenzen unterstützt. Der bisherige Konstruktor ohne diese Parameter ist weiterhin verfügbar und verwendet standardmäßig geschlossene Intervalle.

  • Neu: Konstante org.faktorips.runtime.internal.ValueToXmlHelper.XML_ATTRIBUTE_LOWER_BOUND_OPEN für das XML-Attribut zur Kennzeichnung einer offenen unteren Grenze.

  • Neu: Konstante org.faktorips.runtime.internal.ValueToXmlHelper.XML_ATTRIBUTE_UPPER_BOUND_OPEN für das XML-Attribut zur Kennzeichnung einer offenen oberen Grenze.

  • Geändert: org.faktorips.runtime.IDeltaComputationOptions::areValuesEqual(Class<?>, String, Object, Object) – Die Standardimplementierung behandelt NullObject-Instanzen (z.B. Decimal.NULL) nun als gleich zu null und vergleicht Arrays per Inhalt (Arrays.deepEquals). Eigene Überschreibungen der Methode sind nicht betroffen.

  • Neu: Annotationselement cardinalityConfigurable in org.faktorips.runtime.model.annotation.IpsAssociation - kennzeichnet eine Policy-Assoziation als kardinalitätskonfigurierbar. Wird vom Codegenerator automatisch gesetzt.

  • Neu: org.faktorips.runtime.model.type.PolicyAssociation::isCardinalityConfigurable() - gibt an, ob die Kardinalität dieser Assoziation im Produkt eingeschränkt werden kann.

  • Neu: org.faktorips.runtime.internal.ProductComponent::doInitPolicyLinkCardinalitiesFromXml(Map<String, Element>) und writePolicyLinkCardinalitiesToXml(Element) - Hook-Methoden für die XML-Persistenz konfigurierter Kardinalitäten. Eigene Unterklassen können diese überschreiben, sollten aber super aufrufen.

  • Neu: Entsprechende Hook-Methoden doInitPolicyLinkCardinalitiesFromXml(Map<String, Element>) und writePolicyLinkCardinalitiesToXml(Element) in org.faktorips.runtime.internal.ProductComponentGeneration.

  • Geändert: org.faktorips.runtime.model.type.ProductCmptType::validate() - validiert nun, dass die im Produkt konfigurierte Kardinalität die im Modell definierten Grenzen nicht überschreitet.

  • Deprecated: Alle Klassen im Modul faktorips-runtime-javax-xml wurden deprecated. Stattdessen sollte auf faktorips-runtime-jakarta-xml umgestellt werden.

Entfernte Javax JAXB-Adapter

In der folgenden Tabelle sehen Sie die entfernten Adapter-Klassen und ihre alternativen im jeweiligen Maven-Modul.

Table 1. Migrationstabelle für veraltete JAXB-Adapter
Entfernte Klasse Veraltet seit Javax Namensraum (faktorips-runtime-javax-xml) Jakarta Namensraum (faktorips-runtime-jakarta-xml)

org.faktorips.runtime.internal.AbstractJaxbModelObject

23.6

org.faktorips.runtime.xml.javax.AbstractJaxbModelObject

org.faktorips.runtime.xml.jakarta.AbstractJaxbModelObject

org.faktorips.runtime.xml.IpsJAXBContext

23.6

org.faktorips.runtime.xml.javax.IpsJAXBContext

org.faktorips.runtime.xml.jakarta.IpsJAXBContext

org.faktorips.runtime.xml.LocalDateAdapter

23.6

org.faktorips.runtime.xml.javax.LocalDateAdapter

org.faktorips.runtime.xml.jakarta.LocalDateAdapter

org.faktorips.runtime.xml.LocalDateTimeAdapter

23.6

org.faktorips.runtime.xml.javax.LocalDateTimeAdapter

org.faktorips.runtime.xml.jakarta.LocalDateTimeAdapter

org.faktorips.runtime.xml.LocalTimeAdapter

23.6

org.faktorips.runtime.xml.javax.LocalTimeAdapter

org.faktorips.runtime.xml.jakarta.LocalTimeAdapter

org.faktorips.runtime.xml.MonthAdapter

23.6

org.faktorips.runtime.xml.javax.MonthAdapter

org.faktorips.runtime.xml.jakarta.MonthAdapter

org.faktorips.runtime.xml.MonthDayAdapter

23.6

org.faktorips.runtime.xml.javax.MonthDayAdapter

org.faktorips.runtime.xml.jakarta.MonthDayAdapter

org.faktorips.runtime.xml.ProductConfigurationXmlAdapter

23.6

org.faktorips.runtime.xml.javax.ProductConfigurationXmlAdapter

org.faktorips.runtime.xml.jakarta.ProductConfigurationXmlAdapter

org.faktorips.values.AnyTypeAdapter

23.6

Verwenden Sie stattdessen einen benutzerdefinierten Adapter.

Verwenden Sie stattdessen einen benutzerdefinierten Adapter.

org.faktorips.values.DecimalXmlAdapter

23.6

org.faktorips.runtime.xml.javax.DecimalAdapter

org.faktorips.runtime.xml.jakarta.DecimalAdapter

org.faktorips.values.GregorianCalendarXmlAdapter

23.6

org.faktorips.runtime.xml.javax.GregorianCalendarAdapter

org.faktorips.runtime.xml.jakarta.GregorianCalendarAdapter

org.faktorips.values.MoneyXmlAdapter

23.6

org.faktorips.runtime.xml.javax.MoneyAdapter

org.faktorips.runtime.xml.jakarta.MoneyAdapter

Designtime

  • Entfernt: Klasse CoreRuntimeException (veraltet seit 22.6)

    • Migration: Verwenden Sie stattdessen org.faktorips.devtools.abstraction.exception.IpsException.

  • Entfernt: Interface IProductCmptPropertyReference und Implementierung ProductCmptPropertyReference (veraltet seit 22.6)

    • Migration: Verwenden Sie IProductCmptProperty.getCategoryPosition(), um direkt auf Informationen zur Kategoriepositionierung zuzugreifen.

  • Entfernt: IIpsSrcFile.save(boolean force, IProgressMonitor monitor) und dessen Implementierungen in IpsSrcFile und LibraryIpsSrcFile (veraltet seit 22.6)

    • Migration: Verwenden Sie stattdessen save(IProgressMonitor). Der Parameter force wurde immer ignoriert und wird nicht mehr benötigt.

  • Entfernt: ProductCmptType.migrateReferences() (veraltet seit 22.6)

    • Migration: Diese Methode wurde nur für die einmalige Migration zu Faktor-IPS 22.6 genutzt und wird nicht mehr benötigt.

  • Entfernt: GeneratorConfig.isGenerateJaxbSupport() (veraltet seit 23.6)

    • Migration: Verwenden Sie getJaxbSupport() != JaxbSupportVariant.None, um zu prüfen, ob JAXB-Unterstützung aktiviert ist.

  • Entfernt: Klasse ModelObjectTester (veraltet seit 21.6)

    • Migration: Verwenden Sie stattdessen den Property-Tester IpsObjectTypeTester.PROPERTY_IS_MODEL_TYPE.

  • Geändert: org.faktorips.devtools.model.internal.valueset.RangeValueSet - Konstruktor um die Parameter lowerBoundOpen und upperBoundOpen erweitert. Der bisherige Konstruktor ohne diese Parameter ist weiterhin verfügbar und verwendet standardmäßig geschlossene Intervalle.

  • Neu: org.faktorips.devtools.model.valueset.IRangeValueSet::isLowerBoundOpen() - gibt an, ob die untere Grenze offen (exklusiv) ist.

  • Neu: org.faktorips.devtools.model.valueset.IRangeValueSet::isUpperBoundOpen() - gibt an, ob die obere Grenze offen (exklusiv) ist.

  • Neu: org.faktorips.devtools.model.valueset.IRangeValueSet::setLowerBoundOpen(boolean) - setzt, ob die untere Grenze offen (exklusiv) ist.

  • Neu: org.faktorips.devtools.model.valueset.IRangeValueSet::setUpperBoundOpen(boolean) - setzt, ob die obere Grenze offen (exklusiv) ist.

Die neuen Methoden isLowerBoundOpen(), isUpperBoundOpen(), setLowerBoundOpen(boolean) und setUpperBoundOpen(boolean) wurden dem Interface IRangeValueSet hinzugefügt. Eigene Implementierungen dieses Interfaces müssen diese Methoden implementieren.
  • Neu: Interface org.faktorips.devtools.model.productcmpt.IPolicyCmptLinkCardinality - repräsentiert die im Produkt konfigurierte Kardinalität einer Vertragsbeziehung.

  • Neu: org.faktorips.devtools.model.pctype.IPolicyCmptTypeAssociation::isCardinalityConfigurable() - gibt an, ob die Kardinalität dieser Beziehung im Produkt eingeschränkt werden kann.

  • Neu: org.faktorips.devtools.model.pctype.IPolicyCmptTypeAssociation::setCardinalityConfigurable(boolean) - setzt das Flag für konfigurierbare Kardinalität.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLink::isCardinalityConfigurable(IIpsProject) - gibt an, ob die Kardinalität der zugehörigen Vertragsbeziehung im Produkt eingeschränkt werden kann.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLinkContainer::getPolicyCmptLinkCardinalites() - gibt alle konfigurierte Kardinalitäten für Vertragsbeziehungen zurück.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLinkContainer::getPolicyCmptLinkCardinality(String) - gibt die konfigurierte Kardinalität für eine Vertragsbeziehung zurück.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLinkContainer::isContainerFor(IPolicyCmptTypeAssociation) - gibt zurück, ob dieser Container der passende für die gegebene Vertragsbeziehung ist - dies dient vor allem der Unterscheidung, ob eine Beziehung am Produkt oder einer Anpassungsstufe/Generation konfiguriert wird.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLinkContainer::newPolicyCmptLinkCardinality(String) - erstellt eine neue konfigurierte Kardinalität für eine Vertragsbeziehung.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLinkContainer::getMaxCardinality(IPolicyCmptTypeAssociation) - gibt die konfigurierte Kardinalität zurück, falls vorhanden, sonst die Modellkardinalität.

  • Neu: org.faktorips.devtools.model.productcmpt.IProductCmptLinkContainer::getMinCardinality(IPolicyCmptTypeAssociation) - gibt die konfigurierte Mindestkardinalität zurück, falls vorhanden, sonst die Modellkardinalität.

Persistenz
  • Entfernt: Persistenz-Provider-ID-Konstanten aus Provider-Klassen (veraltet seit 21.12):

    • GenericJPA2PersistenceProvider.ID_GENERIC_JPA_2

    • GenericJPA2_1PersistenceProvider.ID_GENERIC_JPA_2_1

    • EclipseLink1PersistenceProvider.ID_ECLIPSE_LINK_1_1

    • EclipseLink25PersistenceProvider.ID_ECLIPSE_LINK_2_5

    • Migration: Verwenden Sie stattdessen die entsprechenden Konstanten aus der Klasse PersistenceSupportNames (z.B. PersistenceSupportNames.ID_GENERIC_JPA_2).

Table 2. Migrationstabelle für veraltete Persistenz-Konstanten
Alte Konstante Neue Konstante

GenericJPA2PersistenceProvider.ID_GENERIC_JPA_2

PersistenceSupportNames.ID_GENERIC_JPA_2

GenericJPA2_1PersistenceProvider.ID_GENERIC_JPA_2_1

PersistenceSupportNames.ID_GENERIC_JPA_2_1

EclipseLink1PersistenceProvider.ID_ECLIPSE_LINK_1_1

PersistenceSupportNames.ID_ECLIPSE_LINK_1_1

EclipseLink25PersistenceProvider.ID_ECLIPSE_LINK_2_5

PersistenceSupportNames.ID_ECLIPSE_LINK_2_5

Generierter Code

Die Methode newRangeInstance(…​) in den folgenden Klassen wurde um die Parameter lowerBoundOpen und upperBoundOpen (jeweils JavaCodeFragment) erweitert. Eigene Implementierungen dieser Methode müssen entsprechend angepasst werden.

  • org.faktorips.codegen.DatatypeHelper

  • org.faktorips.codegen.dthelpers.AbstractDatatypeHelper

  • org.faktorips.codegen.dthelpers.BigDecimalHelper

  • org.faktorips.codegen.dthelpers.DateHelper

  • org.faktorips.codegen.dthelpers.DecimalHelper

  • org.faktorips.codegen.dthelpers.DoubleHelper

  • org.faktorips.codegen.dthelpers.IntegerHelper

  • org.faktorips.codegen.dthelpers.ListOfValueDatatypeHelper

  • org.faktorips.codegen.dthelpers.LongHelper

  • org.faktorips.codegen.dthelpers.MoneyHelper

Im Javacode für erweiterbare Aufzählung ist das Field IRuntimeRepository productRepository jetzt transient. Die serialVersionUID in generierten erweiterbaren Aufzählungen wurde von 2L auf 3L erhöht.

Für jede Policy-Assoziation mit cardinalityConfigurable = true werden an der Produkt- bzw. Anpassungsstufen-/Generationenklasse folgende Methoden generiert:

  • getCardinalityFor<AssociationName>(): IntegerRange - gibt die konfigurierte Kardinalität zurück.

  • setCardinalityFor<AssociationName>(IntegerRange) - setzt die konfigurierte Kardinalität.

Im Javacode für Policy-Klassen, die eine separate Validator-Klasse generieren (generateValidatorClass) und keine Superklasse haben, ist das Field validator jetzt transient. Die serialVersionUID in diesen generierten Policy-Klassen wurde von 1L auf 2L erhöht.

Behobene Fehler

  • ProductAttribute#setValue wirft Exception bei nur mit "hide" überschriebenem Attribut

  • Test-Ordner werden nicht mehr in die generierte MANIFEST.MF geschrieben

  • Tabellenexport bietet jetzt eine Option, Enums im Format Name (ID) zu exportieren

  • Fehler bei der Javadoc-Generierung mit falschen Zeilenumbrüchen bei mehrzeiligen Beschreibungen behoben

  • Unterstützung für Eclipse 2026-03 hinzugefügt

  • Modul-Infos der Runtime korrigiert

  • Validierung von JPA Foreign Key Namen korrigiert

  • productRepository in erweiterbaren Aufzählungen als transient markiert

  • IpsSrcFileContent.getPropertyFromIpsObject für GregorianCalendar korrigiert

  • Textfeld-Wert wird beim Speichern nicht mehr verändert

  • Fips-Maven-Build-Plugin gibt stdout nicht mehr an sich

  • additionalAnnotations aus der .ipsproject-Konfiguration werden nun auch an generierten Klassen, Interfaces, Builder-Klassen, Enum-Typen und Enum-Konstanten generiert (zuvor nur an Methoden)

  • serialVersionUID in erweiterbaren Aufzählungen von 2L auf 3L erhöht (siehe Generierter Code)

  • IpsBuild generiert Sonderzeichen falsch

  • Irreführende "not a subset" Validierungsmeldung bei ungültigem Product-Range

  • In der Tabellen Struktur kann man das gleiche Attribut mehrmals anlegen

  • Mehr als eine ID gleich null führt zum unlesbarem EnumContent

  • MultipleValues-Attribute im Produktmodell haben die Vorbelegung <null>

  • validator-Field in Policy-Klassen als transient markiert

  • Ein ConfiguredValueSet als Pflichtfeld beinhaltet null

  • Tabellenexport im Format "Name (ID)" schlägt fehl, wenn EnumType und EnumContent in verschiedenen Projekten liegen

  • Modul-Infos der Runtime bereinigt (veraltete, bereits gelöschte Pakete entfernt)

  • equals-Methoden bei zusammengesetzten Schlüsseln: Das && stand fälschlicherweise am Zeilenende statt am Zeilenanfang

  • Bei aktiviertem Parameter "minimale javadoc" und wenn die Validierungsregel eine Dokumentation hat, wird kein leerer <p>-Block mehr im Javadoc erzeugt

  • Faktorips-Maven-Plugin: Fehler "return code=13" beim zweiten Build behoben

  • Umschalten zwischen Anpassungsstufen scheitert nach Aktivierung einer Validierungsregel

  • Über additionalAnnotationsForFields konfigurierte Annotations werden nicht mehr fälschlicherweise auf Klassen generiert

  • NPE in IPS-Validierung wenn JAR keine MANIFEST.MF enthält

Weitere Funktionen und Verbesserungen

  • Beim Import und Export von Tabellen mit Enum-Spalten können Enum-Werte jetzt optional im lesbaren Format "Name (ID)" (z.B. "Jährlich (1)") statt nur als ID (z.B. "1") dargestellt werden. Beim Import wird eine Fehlermeldung angezeigt, wenn das Format "Name (ID)" erkannt wird, aber die Option nicht aktiviert ist.

  • Range mit Angabemöglichkeit, ob die Intervallgrenzen zum Wertebereich gehören oder nicht

  • Null-Equality in IDeltaComputationOptions.areValuesEqual verbessern