Version 21.6.0-rc01

Neues in Version 21.6 Release Candidate 1

Umstellung von BigDecimal-Konstanten auf RoundingMode-Enums

Da BigDecimal-Rundungsmodus-Konstanten seit Java 9 deprecated sind, werden stattdessen nun RoundingMode-Enums verwendet. Die alten Methoden, welche BigDecimal-Konstanten nutzen, werden zunächst als deprecated beibehalten und es stehen neue Methoden mit RoundingMode-Enums zur Verfügung.

Umstellung der Faktor-IPS-Runtime auf Java 8

Die folgenden Projekte werden von nun an mit Java 8 kompiliert:

  • org.faktorips.runtime.groovy
  • org.faktorips.runtime
  • org.faktorips.valuetypes.joda
  • org.faktorips.valuetypes

Der Codegenerator nutzt nun den StringBuilder anstelle des StringBuffers.
DecimalUtils wurden von f10-commons zu org.faktorips.valutypes verschoben und dabei zu Decimals umbenannt.

Außerdem wurden folgende Änderungen an den Klassen und Methoden vorgenommen:

Klasse Änderung
org.faktorips.util.IntegerUtils
Gelöscht. Die Utilityklasse hat die Methode compare(int x, int y) zur Verfügung gestellt. Seit Java 7 ist diese Methode in java.lang.Integer enthalten, wodurch die Klasse nutzlos wird.
org.faktorips.runtime.TableFunctionExecution Gelöscht. Das Interface war deprecated und wurde nicht mehr genutzt.
org.faktorips.runtime.modeltype.IModelTypeAttribute Gelöscht. Das Interface war deprecated. Stattdessen kann org.faktorips.runtime.model.type.Attribute direkt genutzt werden.
org.faktorips.runtime.modeltype.IModelTypeAssociation Gelöscht. Das Interface war deprecated. Stattdessen kann org.faktorips.runtime.model.type.Association direkt genutzt werden.
org.faktorips.runtime.modeltype.IModelType Gelöscht. Das Interface war deprecated. Stattdessen kann org.faktorips.runtime.model.type.Type direkt genutzt werden.
org.faktorips.runtime.modeltype.IModelElement Gelöscht. Das Interface war deprecated. Stattdessen kann org.faktorips.runtime.model.type.ModelElement direkt genutzt werden.
org.faktorips.devtools.core.ui.filter.AbstractProductCmptPropertyFilter Gelöscht. Die Klasse war deprecated.
org.faktorips.devtools.core.ui.table.ColumnChangeListener Gelöscht.
org.faktorips.devtools.core.ui.table.IdentifierGenerator Gelöscht.
org.faktorips.runtime.util.StringBuilderJoiner Hinzugefügt. Die Utility Klasse enthält Methoden um Elemente zu existierenden StringBuildern hinzuzufügen, analog String#join.
org.faktorips.runtime.util.AbstractMessageList Hinzugefügt. Die abstrakte Klasse ist eine Superklasse von org.faktorips.util.message.MessageList und org.faktorips.runtime.MessageList.
org.faktorips.runtime.util.IMessage Hinzugefügt. Das Interface wird von org.faktorips.util.message.Message und org.faktorips.runtime.Message implementiert.
org.faktorips.runtime.util.function.IPredicate Deprecated. Stattdessen kann java.util.function.Predicate direkt genutzt werden.

 

Methode Änderung
org.faktorips.runtime.model.type.Association
#getAssociationType()
Gelöscht. Die Methode war deprecated. Stattdessen soll getAssociationKind() genutzt werden.
org.faktorips.runtime.model.type.Association
#isProductRelevant()
Gelöscht. Die Methode war deprecated. Stattdessen soll isMatchingAssociationPresent() genutzt werden.
org.faktorips.runtime.model.type.Attribute
#getAttributeType()
Gelöscht. Die Methode war deprecated. Stattdessen soll getAttributeKind() genutzt werden.
org.faktorips.runtime.model.type.Attribute
#getValueSetType()
Gelöscht. Die Methode war deprecated. Stattdessen soll getValueSetKind() genutzt werden.
org.faktorips.values.ObjectUtil
#equals(Object, Object)
Deprecated. Stattdessen soll java.util.Objects#equals genutzt werden.
org.faktorips.codegen.CodeFragment
#appendJoined(Iterable)
Hinzugefügt. Die Methode konvertiert die Elemente aus dem Iterable Objekt zu Strings und fügt diese dann, separiert durch Kommata, zum Source Code hinzu.
org.faktorips.codegen.CodeFragment
#appendJoined(Object[])
Hinzugefügt. Die Methode konvertiert die Elemente aus dem Array zu Strings und fügt diese dann, separiert durch Kommata, zum Source Code hinzu.
org.faktorips.codegen.JavaCodeFragment
#appendJoined(JavaCodeFragment[])
Hinzugefügt. Die Methode konvertiert die Elemente aus dem Array zu Strings und fügt diese dann, separiert durch Kommata, zum Source Code hinzu.
org.faktorips.runtime.internal.IpsStringUtils
#join(Iterable, String)
Hinzugefügt. Die Methode verbindet die Elemente aus dem Iterable Objekt zu einem String. Die Elemente werden durch den übergebenen String getrennt.
org.faktorips.runtime.internal.IpsStringUtils
#join(Iterable)
Hinzugefügt. Die Methode verbindet die Elemente aus dem Iterable Objekt zu einem String. Die Elemente werden durch Kommata getrennt.
org.faktorips.runtime.internal.IpsStringUtils
#join(Object[], String)
Hinzugefügt. Die Methode verbindet die Elemente aus dem Array zu einem String. Die Elemente werden durch den übergebenen String getrennt.
org.faktorips.runtime.internal.IpsStringUtils
#join(Object[])
Hinzugefügt. Die Methode verbindet die Elemente aus dem Iterable Objekt zu einem String. Die Elemente werden durch Kommata getrennt.
org.faktorips.runtime.internal.IpsStringUtils
#join(Iterable, Function)
Hinzugefügt. Die Methode konvertiert die Elemente aus dem Iterable Objekt mit der übergebenen toString-Methode und verbindet die Elemente dann zu einem String. Die Elemente werden durch Kommata getrennt.
org.faktorips.runtime.internal.tableindex.RangeType
#findValue(TreeMap<K,V>, K)
Hinzugefügt. Alternative Methode zu getValue(TreeMap<K,V>,K) mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.toc.ProductCmptTocEntry
#findNextGenerationEntry(Calendar)
Hinzugefügt. Altenative Methode zu getNextGenerationEntry(Calendar) mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.toc.ProductCmptTocEntry
#findPreviousGenerationEntry(Calendar)
Hinzugefügt. Alternative Methode zu getPreviousGenerationEntry(Calendar) mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.toc.ProductCmptTocEntry
#findLatestGenerationEntry()
Hinzugefügt. Alternative Methode zu getLatestGenerationEntry() mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.toc.ProductCmptTocEntry
#findGenerationEntry(Calendar)
Hinzugefügt. Alternative Methode zu getGenerationEntry(Calendar) mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.toc.ProductCmptTocEntry
#findGenerationEntry(DateTime)
Hinzugefügt. Alternative Methode zu getGenerationEntry(DateTime) mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.XmlUtil
#findFirstElement(Node, String)
Hinzugefügt. Alternative Methode zu getFirstElement(Node,String) mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.XmlUtil
#findFirstElement(Node)
Hinzugefügt. Alternative Methode zu getFirstElement(Node) mit einem Optional als Rückgabewert.
org.faktorips.runtime.model.type.Type
#findJavaInterface()
Hinzugefügt. Alternative Methode zu getJavaInterface() mit einem Optional als Rückgabewert.
org.faktorips.runtime.model.type.Type
#findDeclaredMethod(Class<T>, AnnotatedElementMatcher<T>)
Hinzugefügt. Alternative Methode zu searchDeclaredMethod(Class<T>, AnnotatedElementMatcher<T>) mit einem Optional als Rückgabewert.
org.faktorips.runtime.model.type.Type
#findSuperType()
Hinzugefügt. Alternative Methode zu getSuperType() mit einem Optional als Rückgabewert.
org.faktorips.runtime.internal.ValueToXmlHelper
#isAttributeTrue(Element, String)
Hinzugefügt. Die Methode gibt zurück, ob das Element ein Attribut mit dem übergebenem Namen und dem Wert true hat.

Generische Attributsvalidierung

Für Vertragsattribute können Wertebereiche (und damit auch ihre Relevanz: ein leerer Wertebereich bedeutet, dass das Attribut nicht relevant ist und keinen Wert haben sollte; ist null nicht erlaubt ist das Attribut ein Pflichtfeld) konfiguriert werden. Schon bisher erlaubte Faktor-IPS die einfache Erzeugung einer Validierungsregel um die Einhaltung eines Wertebereichs zu prüfen – allerdings musste dazu jeweils eine individuelle Fehlermeldung und ggf. die Belegung von Parametern in der Meldung implementiert werden.
Mit Faktor-IPS 21.6 kann nun stattdessen eine generische Validierung (über eine Checkbox auf dem Validierungsregel-Tab des Attributs) aktiviert werden. Diese prüft drei Bedingungen:

  1. Irrelevantes Attribut: Wert ist gesetzt
  2. Pflichtfeld: Wert fehlt
  3. Wertebereich: Wert nicht erlaubt

Die Fehlermeldungen die dabei erzeugt werden können über eine eigene Implementierung von IGenericAttributeValidationConfiguration (bzw. eine Ableitung der DefaultGenericAttributeValidationConfiguration) über den IValidationContext angepasst werden. Ebenso können damit einzelne Attribute für Modellobjekte von der Validierung ausgeschlossen werden, wenn diese z.b. erst nachdem ein anderes Attribut gesetzt ist sinnvoll geprüft werden können.
In der .ipsproject-Konfigurationsdatei kann über <Setting enabled="true" name="genericValidationDefault"/> eingestellt werden, dass diese Validierung für alle neu angelegten Attribute aktiviert sein soll.

Deprecation der Geschäftsfunktionen

Faktor-IPS enthielt zwei unterschiedliche Konzepte mit dem Namen „Geschäftsfunktion“/“BusinessFunction“. Beide wurden unseres Wissens nicht mehr aktiv in Projekten benutzt, weswegen wir sie als Deprecated markiert haben und in einer der nächsten Versionen komplett entfernen werden.

Migration

Die Migration auf Faktor-IPS 21.6 muss zwingend von einem Faktor-IPS nicht älter als 20.6 aus geschehen, weil dabei einige interne IDs in den Dateien .project, .ipsproject und ggf. .classpath geändert werden (von org.faktorips.devtools.core zu org.faktorips.devtools.model). Auch in eigenen Plugins müssen diese Anpassungen vorgenommen werden, da viele Klassen verschoben wurden. Dazu genügt in den meisten Fällen die Eclipse-Operation „Organize Imports“.

Erstellung von Faktor-IPS-Projekten mit Maven-Archetypes

Faktor-IPS-Projekte lassen sich durch die Verwendung von Maven-Archetypes direkt als Maven-Projekte erstellen. Eine Anleitung zur Verwendung des Archetypes für Faktor-IPS ist hier zu finden.

Maven-Mojo

Durch das neue Mojo „faktorips-build“ kann der Faktor-IPS Build nun direkt in Maven integriert werden. Standardmäßig nutzt das Mojo Eclipse 2019-03 und die neuste Faktor-IPS Version von den faktorzehn.org-Update-Sites. Diese Einstellungen können jedoch durch Parameter geändert werden. Zusätzlich exisitieren weitere Parameter um zusätzliche Plugins und Repositories, das JDK mit dem das Projekt bauen soll, den Pfad zu einem Ant-Build-Skript, ob das FIPS Projekt als Maven Projekt importiert werden soll und diverse weitere Einstellungen konfigurieren zu können. Das Mojo kann folgendermaßen genutzt werden:

<project>
    ...
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.faktorips</groupId>
                    <artifactId>faktorips-maven-plugin</artifactId>
                    <version>21.6.0</version>
                </plugin>
                ...
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.faktorips</groupId>
                <artifactId>faktorips-maven-plugin</artifactId>
                <configuration>
                    <jdkId>JavaSE-1.8</jdkId>
                    <!-- <executionEnvironment>JavaSE-11</executionEnvironment> -->
                    <!-- <jdkDir>/usr/lib/jvm/java-8-openjdk-amd64/</jdkDir> -->
                    <!-- <exportHtml>false</exportHtml> -->
                    <!-- <importAsMavenProject>false</importAsMavenProject> -->
                    <!-- <antScriptPath>${project.basedir}/build/importProjects.xml</antScriptPath> -->
                    <!-- <fipsRepositoryVersion>21.6</fipsRepositoryVersion> -->
                    <!-- <fipsRepository>https://update.faktorzehn.org/faktorips/21.6/</fipsRepository> -->
                    <!-- <thirdpartyRepository>https://drone.faktorzehn.de/p2/thirdparty-1.6</thirdpartyRepository> -->
                    <!-- <eclipseRepository>http://update.faktorzehn.org/p2repositories/2019-03/</eclipseRepository> -->
                    <additionalPlugins>
                        <dependency>
                            <artifactId>org.faktorips.productvariant.core</artifactId>
                            <type>eclipse-plugin</type>
                        </dependency>
                        ...
                    </additionalPlugins>
                    <additionalRepositories>
                        <repository>
                            <id>productvariants</id>
                            <layout>p2</layout>
                            <url>https://update.faktorzehn.org/faktorips/productvariants/21.6</url>
                        </repository>
                        ...
                    </additionalRepositories>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>faktorips-build</goal>
                        </goals>
                        <phase>process-resources</phase>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
    </build>
    ...
</project>

Weitere Informationen zum Plugin können in der Dokumentation nachgelesen werden.

Neue Ant-Tasks

Es wurden zwei weitere Ant-Tasks hinzugefügt.

  • MavenProjectImportTask
  • MavenProjectRefreshTask

Mit dem MavenProjectImportTask ist es jetzt möglich ein FIPS-Projekt als Maven-Project zu importieren. Der Ant-Task kann auch mit dem Root-Pom eines Maven-Multimodulprojekte umgehen.


<taskdef name="faktorips.mavenImport" classname="org.faktorips.devtools.ant.MavenProjectImportTask" />
<target name="import">
    <faktorips.mavenImport dir="${dirToMavenProject}" />
</target>

Mit dem MavenProjectRefreshTask können alle Maven-Projekte im Arbeitsbereich bzw. Workspace aktualsiert werden. Die Parameter des Ant-Task sind die selben wie im „Update Project…“ Dialog in Eclipse.


<taskdef name="faktorips.mavenRefresh" classname="org.faktorips.devtools.ant.MavenProjectRefreshTask" />
<target name="refresh">
    <!-- Parameter mit Standardwerten -->
    <faktorips.mavenRefresh offline="false" updateSnapshots="false" updateConfiguration="true" refreshFromFilesystem="true" cleanProjects="true" />
</target>

Änderung an der Faktor-IPS Design-Time

Die Änderungen an der Design-Time betreffen – abgesehen von den erhöhten Mindestanforderungen – nur Entwickler eigener Plugins.

Umstellung der Plugin Projekte auf Java 11

Alle Faktor-IPS Plugin Projekte inklusive der Test- und Internationalsierungs-Projekte wurden auf Bundle-RequiredExecutionEnvironment: JavaSE-11 umgestellt.

Erhöhung der Mindestanforderung

Die Mindestanforderung für Faktor-IPS wurde von Luna (4.4) auf Eclipse 2019-03 angehoben.

Neue Plugin Projekte

Die Plugins von Faktor-IPS wurden, um Abhängigkeiten zu Eclipse und UI sauberer auftrennen zu können, feiner aufgeteilt.

Folgende neue Plugin Projekte wurden hinzugefügt:

  • org.faktorips.devtools.core.refactor
  • org.faktorips.devtools.htmlexport.ui
  • org.faktorips.devtools.model.builder
  • org.faktorips.devtools.model
  • org.faktorips.devtools.model.decorators
  • org.faktorips.m2e

Geänderte Packages

Packages Änderung
org.faktorips.devtools.stdbuilder.refactor org.faktorips.devtools.core.refactor
org.faktorips.devtools.htmlexport org.faktorips.devtools.htmlexport.ui
org.faktorips.devtools.htmlexport.wizards org.faktorips.devtools.htmlexport.ui.wizards
org.faktorips.devtools.core.builder org.faktorips.devtools.model.builder.java
org.faktorips.devtools.core.model org.faktorips.devtools.model
org.faktorips.devtools.core.model.* org.faktorips.devtools.model.*

Geänderter Aufruf auf IpsModel

Der Aufruf von IpsPlugin.getDefault().getIpsModel() wurde auf IIpsModel.get() vereinfacht.

Geänderte Extension-Point-IDs

Extension-Point-IDs Änderung
org.faktorips.devtools.core.artefactbuilderset org.faktorips.devtools.model.artefactbuilderset
org.faktorips.devtools.core.loggingFrameworkConnector org.faktorips.devtools.model.loggingFrameworkConnector
org.faktorips.devtools.core.artefactbuilderset org.faktorips.devtools.model.artefactbuilderset
org.faktorips.devtools.core.objectExtensionProperty org.faktorips.devtools.model.objectExtensionProperty
org.faktorips.devtools.core.datatypeDefinition org.faktorips.devtools.model.datatypeDefinition
org.faktorips.devtools.core.faktorIpsFeatureVersionManager org.faktorips.devtools.model.faktorIpsFeatureVersionManager
org.faktorips.devtools.core.ipsMigrationOperation org.faktorips.devtools.model.ipsMigrationOperation
org.faktorips.devtools.core.loggingFrameworkConnector org.faktorips.devtools.model.loggingFrameworkConnector
org.faktorips.devtools.core.ipsobjecttype org.faktorips.devtools.model.ipsobjecttype
org.faktorips.devtools.core.flFunctionResolverFactory org.faktorips.devtools.model.flFunctionResolverFactory
org.faktorips.devtools.core.customValidation org.faktorips.devtools.model.customValidation
org.faktorips.devtools.core.productComponentNamingStrategy org.faktorips.devtools.model.productComponentNamingStrategy
org.faktorips.devtools.core.ipsObjectPathContainerType org.faktorips.devtools.model.ipsObjectPathContainerType
org.faktorips.devtools.core.deepCopyOperation org.faktorips.devtools.model.deepCopyOperation
org.faktorips.devtools.core.flIdentifierFilterExtension org.faktorips.devtools.model.flIdentifierFilterExtension
org.faktorips.devtools.core.versionProvider org.faktorips.devtools.model.versionProvider

Message & MessageList vereinheitlicht

Message, MessageList und MessageLists aus org.faktorips.util.message wurden mit den Runtime Klassen in org.faktorips.runtime vereint. Es werden jetzt nur noch die Runtime-Messages verwendet.

IIpsDecorators

Die einzelnen implementierungen der org.eclipse.ui.model.IWorkbenchAdapter aus dem org.faktorips.devtools.core.ui Projekt wurden durch eine generische Implementierung ersetzt. Dazu wurden auch die Icons der verschiedenen Faktor-IPS Typen in das Projekt org.faktorips.devtools.model.decorators umgezogen. Um eigene Icons und Labels für Faktor-IPS Typen zu registrieren wurde der Extension-Point org.faktorips.devtools.model.decorators.decoratorsProvider hinzugefügt.

Release Notes – Faktor-IPS – Version 21.6

Bugs

  • Unterschiedliche Faktor-IPS Objekte dürfen nicht den gleichen QName haben (FIPS-4767)
  • Rechtschreibfehler in generiertem Methodennamen (FIPS-5841)
  • createPolicyComponent() wird für Produktbausteintypen ohne Vertragsteiltyp falsch generiert (FIPS-5843)
  • Model Types werden bei indirekter maven-Abhängigkeit doppelt exportiert (FIPS-6000)
  • Tippfehler im Javadoc am getter einer TableUsage (FIPS-6304)
  • Editor scrollt horizontal (FIPS-6528)
  • IPS-Codegenerator erzeugt ein Blank im Kommentar (FIPS-6690)
  • Deklaration von @implements mit Generics nur durch invalide Html-Tags möglich (FIPS-6704)
  • Attribut überschreiben bei Ableitungsstrategie „SINGLE_TABLE“ erfordert zwingend neuen Spaltennamen (FIPS-6906)
  • Add IPS-Nature bei Java-11-Modulprojekt erzeugt unbrauchbare Konfiguration (FIPS-6976)
  • Vertragsattribut in Ableitung nicht mehr produktkonfigurierbar machen – NPE Gefahr (FIPS-6982)
  • doInit[Attribut] fehlt bei überschriebenen abstrakten PolicyCmptType Attributen (FIPS-7001)
  • Fehlender Nullcheck in generiertem Code für berechnete Attribute (FIPS-7012)
  • .properties-Dateien werden nicht sortiert (FIPS-7047)
  • Null-Werte in EnumContents werden zur Runtime als Leerstring gelesen (FIPS-7096)
  • AbstractCachingRuntimeRepository kann mehrere Instanzen eines gleichen Enum-Values haben (FIPS-7197)
  • Money#subtract erlaubt unterschiedliche Währungen (FIPS-7222)
  • DefaultRange#getValues(boolean) sollte upperBound == lowerBound besser unterstützen (FIPS-7342)
  • java.util.ConcurrentModificationException bei Headless Eclipse Build eines Produktprojektes (FIPS-7369)
  • Fix Javadoc (FIPS-7379)
  • IRuntimeRepository berücksichtigt nur eigene IEnumValueLookupServices (FIPS-7397)
  • Exception wird nicht geworfen (FIPS-7437)
  • Nur Enum-Prefix spezifiert führt bei Product-Tabellen zu null im Namen (FIPS-7442)
  • Relevanz für Boolean-Attribute setzt Unrestricted statt EnumValueSet (FIPS-7480)
  • Zu strenge Validierung: Produktbeziehung heißt wie Supertyp (FIPS-7517)
  • Leere Range „[] (incl. )“ wird als Enum interpretiert (FIPS-7518)
  • Rechtschreibfehler im generierten Javadoc (FIPS-7577)
  • Fehlerhafter Code bei abstrakten Enums an Vertragsteilklassen (FIPS-7605)

New Features

  • Ant-Task für Maven-Projekt-Import (FIPS-5457)
  • Maven-Mojo für Headless Eclipse Aufruf (FIPS-5966)
  • Maven-Archetyp für Faktor-IPS-Projekt (FIPS-6685)
  • Relevanz-Validierung (FIPS-7355)
  • MessageList um map-Methoden erweitern (FIPS-7454)
  • Util zum Resetten von irrelevanten Attributen (FIPS-7471)
  • MessageLists.join (FIPS-7553)

Tasks

Improvements

  • Maven Projekte beim hinzufügen der IPS-Nature automatisch mit Maven-Support konfigurieren (FIPS-3494)
  • Core unabhängig von eclipse.ui machen (VKB) (FIPS-3557)
  • IpsModel aufräumen: Deprecated Methoden löschen (FIPS-6026)
  • RoundingMode enum statt BigDecimal constants verwenden (FIPS-6234)
  • Mindestanforderung von Luna auf 2019-03 erhöhen (FIPS-6649)
  • API von OrderedValueSet verbessern (FIPS-6653)
  • IpsObjectPath Ermittlung im Eclipse Workspace verbessern – keine Abweichung zur Maven Dependency (FIPS-6660)
  • Faktor-IPS-Runtime auf Java 8 umstellen (FIPS-6802)
  • Tests mit der aktuellsten Java-Version (FIPS-6945)
  • Maven-Build Erste Schritte (FIPS-6955)
  • Class#newInstance() -> Class#getConstructor()#newInstance() (FIPS-7042)
  • Collector für Decimal & Money (FIPS-7095)
  • Formelsprache: WENN mit Boolean null führt zu NPE (FIPS-7123)
  • Export von Enums aus Dependencies ermöglichen (FIPS-7189)
  • Convenience-Methoden Message#asMessageList & MessageList#of (FIPS-7203)
  • Association.getMatchingAssociation() kovariant überschreiben (FIPS-7287)
  • PersistenceOptions Defaults anpassen und dokumentieren (FIPS-7308)
  • Migration für 21.6 (FIPS-7329)
  • Builder-Refactoring (FIPS-7333)
  • MessageListUtil aus f10-commons-ips übernehmen (FIPS-7345)
  • Core unabhängig von eclipse.ui machen (f10) (FIPS-7348)
  • Move m2e to faktorips.base (FIPS-7353)
  • Very easy Warnings fix (FIPS-7407)
  • HTML-Export von UI entkoppeln (FIPS-7409)
  • Konstante für Namen des ModelObject (FIPS-7547)
  • Deprecate Business Functions (FIPS-7550)
  • Tutorial an 21.6 anpassen (FIPS-7558)
  • MessageList vereinheitlichen (FIPS-7560)
  • Diamond-Operator in generiertem Code nutzen (FIPS-7563)
  • Code-Templates und Clean-Ups anpassen: Diamond-Operator nutzen (FIPS-7585)
  • JMerge-Doku auf Englisch (FIPS-7615)
  • abstrakte Derived Union Methoden mit Wildcard generieren (FIPS-7624)