Release Notes

Version 21.6.6

Der Patch-Release 21.6.6 bringt Performance-Verbesserungen bei der Verwendung großer Modelle in JARs in der Faktor-IPS-Designzeitumgebung(Eclipse-Plugin). Ein Update der Runtime-Dependencies ist nicht notwendig.

Version 21.6.4

In Version 21.6.4 wurden zwei Fehler behoben:

  • Werte für DynamicEnumDatatype in TableContent nicht korrekt wählbar/dargestellt (FIPS-8083)

  • No more handles im DeepCopyWizard (FIPS-8219)

Version 21.6.3

In Version 21.6.3 wurden drei Fehler behoben:

  • „Struktur anzeigen“ fehlt im Kontextmenü in Produktdefinitionsperspektive (FIPS-8063)

  • Maven Build schlägt unregelmäßig fehl (FIPS-8088)

  • Java 11 bricht XMLs mit Werten und Extension Properties um (FIPS-8149)

Version 21.6.2

In Version 21.6.2 wurden folgende Fehler behoben bzw. zusätzliche Verbesserungen umgesetzt:

Weitere Funktionen und Verbesserungen

  • Abfragemöglichkeit, ob ein ValueSet nicht eingeschränkt ist (FIPS-7980)

  • Faktor-IPS Maven Plugin und Lombok sollen in einem Projekt verwendet werden können (FIPS-7981)

Behobene Fehler

  • CSV Import an Tabelle anhängen speichert nicht auf Platte (FIPS-7969)

  • Dokumentation: Archetype funktioniert nicht in Eclipse (FIPS-7970)

  • StringLengthValueSet: fehlerhafte Implementierung isEmpty() und isDiscrete() (FIPS-7979)

Version 21.6.1

Das Patch-Release 21.6.1 behebt zwei Unstimmigkeiten in der Runtime. Ein Update des Faktor-IPS-Plugins ist nicht notwendig.

  • Relevance bei echten Enums liefert ein UnrestrictedValueSet anstatt OrderedValueSet (FIPS-7957)

  • Relevance asValueSetFor mit Collection (FIPS-7954)

Version 21.6.0

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.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.

org.faktorips.runtime.MessageList#getMessagesByMarker(IPredicate<IMarker>)

Gelöscht. Das Interface IPredicate wurde durch das mit Java 8 eingeführte Predicate ersetzt.

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-Mojos

Durch die neuen Mojos „faktorips-clean“ und „faktorips-build“ kann der Faktor-IPS Build nun direkt in Maven integriert werden. Das „faktorips-clean“-goal ist an die Phase clean gebunden. Das Mojo löscht den Workspace, der im „faktorips-build“-Mojo genutzt wird. Das „faktorips-build“-goal ist an die Phase generate-sources gebunden und führt den Faktor-IPS-Build durch. 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. Die Mojos können 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>true</exportHtml> -->
                    <!-- <importAsMavenProject>false</importAsMavenProject> -->
                    <!-- <antScriptPath>${project.basedir}/build/importProjects.xml</antScriptPath> -->
                    <!-- <fipsRepositoryVersion>21.6</fipsRepositoryVersion> -->
                    <!-- <fipsRepository>https://update.faktorzehn.org/faktorips/21.6/</fipsRepository> -->
                    <!-- <eclipseRepository>https://download.eclipse.org/eclipse/updates/4.11/</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> -->
                    <!-- <gitStatusPorcelain>
                        <failBuild>true</failBuild>
                        <verbosity>diff</verbosity>
                    </gitStatusPorcelain> -->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>faktorips-clean</goal>
                            <goal>faktorips-build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
    </build>
    ...
</project>

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

Neue Ant-Tasks

Es wurden drei weitere Ant-Tasks hinzugefügt.

  • MavenProjectImportTask

  • MavenProjectRefreshTask

  • GitStatusPorcelainTask

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>

Mit dem GitStatusPorcelainTask ist es möglich den Workspace auf lokale Änderungen zu prüfen. Der Ant-Task kann mit zwei Parametern konfiguriert werden: Ob der Build fehlschlägt wenn Änderungen gefunden werden und die verbosity der Ausgabe. Die Ausgabe kann mit diff, verbose und quiet eingestellt werden. Diff protokolliert die gefundenen Änderungen im Git Diff / Patch-Format. Verbose listet alle modifizierten Dateien auf. Quiet protokolliert keine Änderungen.

<taskdef name="faktorips.gitStatus" classname="org.faktorips.devtools.ant.GitStatusPorcelainTask" />
<target name="status">
    <faktorips.gitStatus failBuild="true" verbosity="diff" />
</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. Der Aufruf von IpsPlugin.getMultiLanguageSupport() ist nicht mehr möglich und kann durch IIpsModel.get().getMultiLanguageSupport() ersetzt werden.

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.

Menü-Aufbau instantiiert keine Objekte mehr

In Eclipse prüft jeder Eintrag in einem (Popup-)Menü, wenn dieses aufgeklappt wird, ob er angezeigt werden soll. Dies wurde in Faktor-IPS an vielen Stellen dadurch gelöst, dass das IPS-Objekt geladen und dann geprüft wurde, ob es z.B. ein Produktbaustein ist. Diese Information ist allerdings auch verfügbar, ohne das Objekt komplett laden zu müssen, was insbesondere bei umfangreichen Tabellen oder Produktvarianten merklich dauert. Ab 21.6 nutzt Faktor-IPS einen neuen PropertyTester, der auch für eigene Plugins zur Verfügung steht.

Alt Neu
<visibleWhen checkEnabled="true">
  <with variable="selection">
    <iterate>
      <adapt type="org.faktorips.devtools.model.ipsobject.IIpsObject">
        <instanceof value="org.faktorips.devtools.model.productcmpt.IProductCmpt">
        </instanceof>
      </adapt>
    </iterate>
  </with>
</visibleWhen>
<visibleWhen checkEnabled="true">
  <with variable="selection">
    <iterate>
      <adapt type="org.faktorips.devtools.model.ipsobject.IIpsSrcFile">
        <test property="org.faktorips.devtools.core.ui.commands.IpsObjectTypeTester.isIpsObjectType" value="ProductCmpt">
        </test>
      </adapt>
    </iterate>
  </with>
</visibleWhen>

Non-Standard Blanks

Faktor-IPS Version 21.6.0 fügt eine Option hinzu um Nicht-Standard-Leerzeichen wie den Non-breaking Space ( ) oder den em-Space ( ) in XML-Dateien zu ersetzen, um diese bei manuellem Dateivergleich einfacher unterscheiden zu können. Dies kann besonders interessant sein wenn zu Java 11 gewechselt wird, da manche ältere VMs diese Escapesequenzen beim Lesen nicht ersetzen und sie somit auch wieder unverändert schreiben während die meisten aktuellen VMs sie beim Lesen durch die passenden Unicode-Character ersetzen, welche dann direkt ins XML geschrieben werden (was problemlos funktioniert, aber für menschliche Augen schwer zu unterscheiden ist).

<Setting name="escapeNonStandardBlanks" enabled="true" />

Weitere Funktionen und Verbesserungen

  • 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)

  • Änderungen an Design-Time in N&N dokumentierten (FIPS-7581)

  • 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)

  • Produktinfo Tool – Dokuverbesserung maxLength TableNames (FIPS-7443)

  • Usage-Doku verbessern (FIPS-7651)

  • Move Mojo execution to generate-sources (FIPS-7668)

  • ModelContentProvider#getUnfilteredChildren sollte IpsObjekte nicht unnötig instantiieren (FIPS-7685)

  • Runtime-Addons signieren und auf Maven Central deployen (Runtime-Addons signieren und auf Maven Central deployen (FIPS-7532)

  • phase-Definition aus poms und Doku entfernen (FIPS-7706)

  • Explizite Codierung von Sonderzeichen in Strings geht verloren unter Java 11 (FIPS-7603)

  • Relevance um Methode(n) erweitern, die passende ValueSets erstellen. (FIPS-7705)

  • Workspace in Maven Phase clean löschen (FIPS-7716)

  • Geänderte Dateien sollen zu Build-Warning führen (FIPS-7787)

  • faktorips.skip für Mojo (FIPS-7794)

  • Template für Insert-Statements (FIPS-7805)

  • Offizielle Eclipse-Update-Site als Default im Mojo nutzen (FIPS-7816)

Behobene Fehler

  • 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)

  • Zahlen über Integer.MAX_VALUE in ValueSets führen zu falschem Verhalten (FIPS-6569)

  • 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. <null>)“ wird als Enum interpretiert (FIPS-7518)

  • Rechtschreibfehler im generierten Javadoc (FIPS-7577)

  • Fehlerhafter Code bei abstrakten Enums an Vertragsteilklassen (FIPS-7605)

  • POMs in JARS auf Maven Central enthalten -SNAPSHOT in Version (FIPS-7644)

  • Thirdparty-Repo auf Drone sollte nur im internen Build genutzt werden (FIPS-7646)

  • faktorips.repository.version mit Version des Plugins vorbelegen (FIPS-7649)

  • JUnit-Dependencies aus Mojo entfernen (FIPS-7654)

  • Update der .project Datei nach Migration zu 21.6 (FIPS-7657)

  • MessageList#getMessagesByMarker(Predicate) ist nicht richtig nutzbar (FIPS-7658)

  • Warning im generierten Code (FIPS-7674)

  • GenericRelevanceValidation#validate ruft shouldValidate nicht auf (FIPS-7690)

  • NullPointer beim Hinzufügen der IPS Nature (FIPS-7693)

  • Dropdowns in den Faktor-IPS Code Generator Einstellungen funktionieren nicht (FIPS-7695)

  • Pfadprobleme unter Windows mit ant: ProjectImportTask (FIPS-6571)

  • Icon-Overlay für verlinkte Bausteine im New-Generation-Wizard funktioniert nicht (FIPS-7713)

  • Generische Validierung in Validator-Klasse erzeugt Compilefehler (FIPS-7754)

  • ü wird im „Werte übersetzen“ Dialog falsch dargestellt (FIPS-7753)

  • Namen für Bereich-Typ werden nicht angezeigt (FIPS-7742)

  • Archetype und Plugin werden mit falschen Dateiendungen deployt (FIPS-7765)

  • RuntimeRepository.getEnumValues Returns null (FIPS-1150)

  • Archetype hat falsche Versionen (FIPS-7777)

  • faktorips-maven-plugin Ordner mit Spaces (FIPS-7779)

  • Annotationen an generierten XML-Adapter werden gelöscht (FIPS-7784)

  • Generierter Javadoc Kommentar an Feldern ungewollt geändert? (FIPS-7797)

  • FIPS Nature hinzufügen erzeugt Fehler (FIPS-7798)

  • Fehlendes Icon & Widget is disposed (FIPS-7801)

  • GenericVisitorSupport sollte nur Parent-Child-Beziehungen verfolgen. (FIPS-7806)

  • FaktorIPS Integrationtest NPE (FIPS-7815)

  • Doppelte generische Validierung beim Überschreiben von Attributen (FIPS-7824)

  • Generische Validierung ohne MessageCodes problematisch (FIPS-7826)

  • Codegenerator generiert bei Double deprecated Code (FIPS-7828)

  • Keine generische Validierung für Enumerationen in abstrakten Typen (FIPS-7829)

  • Vom Archetype generiertes POM ist uneinheitlich formatiert (FIPS-7830)

  • StackOverflow bei Relevance#asValueSetFor (FIPS-7866)

  • Exception in Test-Launch-Configs (FIPS-7877)

  • Java 11 Fehlermeldungen „illegal reflective access“ wegen GroovyFormulaEvaluatorFactory (FIPS-7883)

  • NullPointerException bei Prüfen eines Wertes eines Attributes vom Typ Long in einer LongRange (FIPS-7884)

  • IllegalArgumentException bei Prüfen eines Wertes eines Attributes vom Typ Money in ValueSet mit unterschiedlicher Währung (FIPS-7885)

  • Fehler beim Hinzufügen der Fips-Nature zu einem Maven Modul (FIPS-7889)