All notable changes to this project are documented in this file.
Format of the log is loosely based on Keep a Changelog. The project does not follow Semantic Versioning and the changes are documented in reverse chronological order, grouped by calendar month.
- Variability: The propagation of configuration updates to referencing configurations has been improved. Due to this optimization, it needs much less CPU time now.
- The Maven POM now contains all bundled JARs as dependencies with
providedscope to help with automated license and vulnerability scanning.
- A bug was fixed that caused the editor of NumberLiteral to break if a property macro was used for its value.
- Added missing support for IndexExpr for the operations findFirst and forEach.
- An invalid checking rule for parameter value types of functional component instances has been removed. It was introduced by a move of IETS3.Core languages in February 2025.
- Variability: Some changes regarding variant configurations:
- A check has been added for duplicate names of configurations in the same container.
- Configurations might become inconsistent due to errors during manual conflict merges. A couple of model checks have been added to detect this. Additionally, there are quickfixes to fix such errors.
- The internal storage of configurations has changed, this requires a language migration. Note that after the execution of the migration, extended configurations must be adapted via intention to their changed base configuration.
- A VCS merge hint has been added for the
__hashproperty (e.g., for variant configurations). This avoids merge conflicts which cannot be resolved manually anyway (in those cases, the hash value has to be recomputed anyway). - Requirements modeling (language
org.iets3.req.core)- It now supports a "requires" relation, which can express that a requirement needs other requirements as a precondition.
- The requirements chunk provides a flag "hide empty child requirements sections" (in the inspector). If selected, the flag hides empty child requirements sections in the tabular requirements view.
- Some additional internal changes (e.g., implementation of
ICanHideinterface, needed for variability support).
- A new intention is available to split kernelF StringLiterals into concatenation parts
- Improved the readability of lists by enforcing a new line when a threshold of three elements per list is exeeded.
- A DecTab bug not respecting the default value was fixed and a corresponding warning was added to warn users which default value takes precedence
- Ignored concepts of the coverage analyzer are now colored with IGNORED_COLOR.
- Data tables, binary and multi-criteria decision tables now support deletion, copying and pasting when multiple cells are selected with the mouse.
- The renderReadable/getPresentation implementations were improved and are now equivalent in all concepts.
- Variability: For feature attributes, the inspector in the configuration editor shows the current value of the attribute and what caused this value (manual input by user, default, forced by tool, etc). This assignment cause is read-only now. An intention is added to manually set it to 'manual' state.
- Variability: In the configuration editor, pressing Return/Enter anywhere will create an empty line after the configuration. Pressing Shift-Return/Enter on the header line of a configuration will create an empty line before the configuration.
- Data tables, binary and multi-criteria decision tables now support deletion, copying and pasting when multiple cells are selected with the mouse.
- Expressions of ShortLambdas are now correctly updated and used for interpretation after they are changed
- API for coverage calculation and restored original functionality. Coverage is now calculated during interpreter execution
- Duplicated colors for PARTIAL and IGNORED
- CI tests for InterpreterCoverageAssQuery which make use use the calculated coverage data
- Solver: Add test infrastructure to ensure that errors computed by any solver are converted to editor messages properly.
- Variability: APIs for FilterParams (configuration of filter&instantiate process) and skeleton tree data structure were extended
- Warning for BangOp in case type is not OptionType
- Added languages and solution for basic variability, moved from IETS3-Core project. The following modules were added:
- variability:
org.iets3.variability.*(6 languages, 2 solutions) - variability devkit:
org.iets3.variability.base.devkit - analysis support:
org.iets3.analysis.logic.operator,org.iets3.analysis.solversupport.util - contextfilter for UI:
org.iets3.contextfilter,org.iets3.contextfilter.plugin
- variability:
-
Published SBOM contains dependencies only from runtime configurations
-
To avoid confusion,
U+03BC μ GREEK SMALL LETTER MUis no longer recognized as the 'micro' unit prefix, onlyU+00B5 µ MICRO SIGNis. Although technically considered 'legacy', the micro sign is the character produced by macOS and Windows keyboard layouts when pressingAltGr/Option+M.An enhancement script is provided to replace 'mu' with 'micro sign'.
- The language org.iets3.variability.artifacts.base was temporarily renamed to org.iets3.variability.artifacts.vanguard.
-
Plugin org.iets3.safety was renamed to org.iets3.safety.os fixing the name collision with a plugin in org.iets3.core
-
A NullPointerException was fixed for cases where a node implementing IValidNamedConcept had no name.
-
When calculating the supertype of number types, the precision is now correctly set to infinite when one of the types has an infinite precision.
-
The primitiveTypeMapper extension supports a new method
PrimitiveTypeMapper#useStringConstraintsthat can be set to false to disable string types with constraints and go back to regular string types.
- Number literals in scientific format e.g. 1e10 now require a number before "e". Numbers like "e-5" are not valid anymore because it caused exceptions in other parts of the code base.
- An issue with conflicting rules for overloaded operation types with rational types was fixed.
- The interpreter of the lookup tables was fixed.
- The syntax of optional names in assert statements was improved.
- A stack overflow related to success types was fixed.
- Invalid value and constrained failed test items now show why tests fail.
- An exception related to generator vs interpreter selection for tests was fixed.
- The demo language
org.iets3.core.expr.typetags.libwas removed. - The unused field
ReferenceableFlag#idMemberwas removed.
-
Move languages org.iets3.protocol.transport, org.iets3.components.functional, org.iets3.components.hardware, org.iets3.components.toplevel.adapter, org.iets3.core.mapping, and org.iets3.safety.attributes from iets3.core to iets3.os
-
a new approach to run interpreter test case from command line (and inside MPS) directly without invoking JUnit code generation
-
Added EmptyType to Pluggable Type Facade (PTF). If your language has some kind of NixType, you should override
PrimitiveTypeMapper.isEmptyType()to recognize your NixType.
- Strings are not comparable with strings with constraints.
- The usability of editors (code completion menu, color) was improved.
- Added a language to accommodate variability management concepts and features. Initially it provides only an Interface to mark variation points.
- The copy and pasting of existing nodes was slightly improved.
- NPE in
ISolvableMonitorNotification#projectOpen(#1202).
- All custom views are deactivated by default. You can enable each of them through their own extension point: components explorer (
componentsextension point), specification explorer (specextension point), requirements explorer (requirementsextension point), bookmark explorer (bookmarkextension point). - Empty list literals now have automatically the length constraint 0.
- Lists of lists now derive the correct size.
- The line wrapping ability of some concepts was improved.
- Hexadecimal attributes are now better visible in the diff view.
- Negative decimal values are now correctly converted to hexadecimal values.
- It is now possible to customize where hex values are enabled. With PrimitiveTypeMapper#filterHexadecimalSupportingNodes you can now enable/disable them for specific nodes.
- The physical units B and b were renamed to byte and bit to avoid confusion.
- Breaking change: The units of digital information were split into 3 different libraries: UnitsOfInformationIEC, UnitsOfInformationJEDEC, UnitsOfInformationMetric. They are still considered part of the derived units.
- Physical units now also support metric scaling for only the positive and negative prefixes. Scaling can also be overwritten for units by overwritten
IUnitLangConfig#getOverwrittenScalingfor the extension pointPhysUnitLangConfig. - Execution of Test by Interpreter can be done without generation and compilation.
- If two quantities are compatible but implicit conversions are not enabled, this check can now be disabled through setting
IUnitLangConfig#allowMixingUnitPrefixesWithoutConversionsto true for thePhysUnitLangConfigextension point.
- Type calculation for implicit conversions in the physunit language was improved.
- Number types have trailing zeros stripped in their ranges after type calculations for divisions.
- The compatibility check of quantities of the physical unit language was improved.
- The interpreter of the
successexpression was fixed. - Custom Java exceptions have now a
equalsandhashCodeimplementation so that they can be compared in tests. - Error messages and checks were improved.
- More error messages are now shown when the supertype can't be calculated.
- The end cells of table rows of all tables where improved and now all support delete and insert actions.
- Quantities are not allowed in tagged types anymore.
- Units with same quantities are now checked if they can be (implicitely) converted between each other.
- Record literals are automatically initialized based on their type.
- Record literals now show the referenced members of the record declaration.
- Tuples can use parenthesis instead of brackets for their presentation. To use the new presentation, overwrite PrimitiveTypeMapper#useParenthesisInsteadOfBracketsForTuples in the extension point.
- Implicit conversions can now be deactivated conditionally in the physunit language.
- The
noConvertexpressions in the physunit language doesn't strip the unit anymore. Use thestripUnitexpression for that.
- Then precision for number types is now only derived from the finite bounds of the range. The precision of
number[-∞|∞]is the same as ofnumberwhich is 0. - Tuple types where all elements have the same type can now be used interchangeable with list types.
- The extension point
IUnitLangConfighas a new method useSlashInsteadOfDivisionSymbol that allows to replace the "÷" character in unit names with the more common "/" character. - Number literals, collection size specifications and number range specifications now support entering numbers in hexadecimal format. This feature can be activated through PrimitiveTypeMapper#allowHexadecimalNumbers.
- Collection size and number range specifications now initialize with an infinite range by default. Setting the min and max field therefore is equal to setting them to infinity.
- TraceExplorer can decorate editors of lambda nodes with their values.
- The code completion of the new unit language was improved.
- The performance of error type propagation (especially in relation to type tags) was improved.
- The name of the unitless unit can now be customized through the
PhysUnitLangConfigextension point.
- Gradle dependency licenses scanning enabled via custom sbom-utility feature
- Tuple types now support a new method
nTimesto ease initialization of long tuples.
- Tracing editor can be exchanged by customers using editor hints.
- An issue was fixed where the substitute menu entries of
IDotTargetwere duplicated because two default menus were created. - The same issue was fixed for the right transformation menu of
IDotTarget.
- Reduction rule for EnumLiterals can now also be applied for subconcepts
- A new memory prefix for units was implemented (https://en.wikipedia.org/wiki/JEDEC_memory_standards#Unit_prefixes_for_semiconductor_storage_capacity)
- Quantities now support transformation properties such as scalar or vector, so that you can't incorrectly mix units such as speed (scalar) and velocity (vector).
- The error message that a unit is shadowed, can now be ignored through an annotation.
- The name changes to the binary IEC unit prefixes was reversed.
- The prevision loss when converting units in the interpreter was fixed.
- An editor issue in NumberRangeSpec was fixed that also prevented adding a precision to a number type.
- A layouting issue with the class EndCell was fixed.
- The unnecessary super types of the tuple type were removed and are not necessary anymore.
- RecordValues can have a customized string representation.
- Empty-like nodes now automatically select the first code completion entry if there is only one entry.
- Enum literals now can be compared for equality in the generator.
- String representation of RecordValues is improved.
ComponentKind#canbeContent(conceptNode<>)was deprecated in favour ofComponentKind#canbeContent(concept<>)Component#canBeInComponentContent(conceptNode<>)was deprecated in favour ofComponent#canBeInComponentContent(concept<>)
- Numbers ranges now support exclusive and inclusive intervals.
- Various small improvements and fixes were made in
org.iets3.core.expr.typetags.physunits.
- MessageDefiniton uses extensionPoint/IdentifierConfigurator/ that allows the user to decide to use german umlauts and paragraphs in it.
- This extensionPoint got a new method to select which implementation will be chosen.
- A new (experimental) language
org.iets3.core.expr.typetags.physunitswas added that should eventually replace the old unit language. Read the documentation inorg.iets3.core.expr.typetags.physunits.documentationto learn more about the features of the new language.
- The type calculation of field setters now works.
NumberType#containsZeronow correctly deals with infinite values.- Various usability issues where fixed.
- updated gradle build. Build will now fail in case tests were failing.
- Enumerations can have an order by declaration, by literal or by value associated with the literal
- A new devkit
org.iets3.core.expr.base.devkitwas added that excludes the REPL and tracing language. org.iets3.core.expr.core.devkitandorg.iets3.core.expr.advanced.devkitwere extracted into a separate pluginorg.iets3.core.expr.devkits.- A new devkit
org.iets3.core.expr.interpreter.devkitwas created for all expression interpreters. - A new devkit
org.iets3.core.expr.repl.devkitwas created for the REPL language.
- The expression tracing support was extracted into a new plugin
org.iets3.core.expr.tracing. - The REPL support was extracted into
org.iets3.core.expr.repl. - Enumerations can have an order by declaration, by literal or by value ascociated with the literal
- Update java generator to fix compilation error of generated TupleAccess
- The PCollections library was updated to version 4.0.1.
- Uncaught
DateTimeExceptionduring check DateLiteral. - IntHelper.equals now correctly deals with the combination of 0.0,-0.0,0 and -0.
NumberLiteralcan now be converted to aBigDecimalwith the methodtoBigDecimal.- Uncatched
DateTimeExceptionduring check DateLiteral - The type parameter is now used in the Java generation of the FailExpr.
- Named based access of result columns of multi decision tables were added. Columns can be referenced by name and coexist with the index based access.
- The
indexexpression in collections operations now works correctly in nested expressions in the interpreter and generator. - Generation of nested short lambda expression now use the correct type for "it" as a variable.
- Collections: The index expression now works with collection types in the generator.
- The
allandanyoperation of collections now also support theindexexpression. The conceptsAllWithIndexOpandAnyWithIndexOpare therefore deprecated.
- The class
IETS3ExprEvalHelperwas deprecated and a new classIETS3ExprEvaluatorwas introduced that can also influence the creation of the computation trace.
- The
sortmethod of collections now supports more types: all primitive types, the option type, all datetime types, the temporal type and the record type- Records: The sorting order can be added through the intention
Add a Comparison Order, otherwise, the records are sorted based on the declaration order of the members - Option: Sorting removes all
nonevalues since the underlying data structure of collections doesn't support null values.
- Records: The sorting order can be added through the intention
- The comparison helper in org.iets3.core.expr.simpleTypes.runtime and the equals helper in the test language where merged into a new class EqualsHelper inside the first runtime solution to return the same values.
- String validation: A bug in the number detection logic was fixed
- String validation: A bug in the successor execution logic was fixed
- Generation of nested short lambda expression now use the correct type for "it" as a variable.
- Temporal Literal shows an error if two slices use the same point in time. The check can handle date literals and (nested) references to constants with a date literal. (See PR 707)
- Temporal Literal shows a warning if the point in time of a slice cannot be unwrapped to a date literal, rendering the duplicates-check mentioned above ineffective. (See PR 707)
The language extends typetags with support for different binding times of values. Consistency checks ensure that information is passed on at appropriate levels.
- Unit comparisons for the same unit defined in different packages now lead to an error message for compatibility
SliceValuecan now correctly be checked for equality:SliceValue.equals()andSliceValue.hashCode()are overwritten.TemporalValue.hashCode()was overwritten, thusequalsandhashCode()are in sync now.- Generation of nested short lambda expression now use the correct type for "it" as a variable.
- the MetaUnit node was removed since it was not actively used
- Computation of the least common supertype for expressions with different return types has been fixed. The type system now correctly infers a join type (c.f. original issue)
- Naming constraint of IValidNamedConcept is customizable original request
- Made transformation action applyCommentsToIDocumentable only applicable if documentation is allowed original request
- Tuples are now handled within the type system. Instead of allowing JoinTypes within tuples we merge different tuple types by JoinTypes.
- Each subconcept of IValidNamedConcept can now contribute and customize naming constraints
IETS3ExprEvalHelpermethods no longer log exceptions that they re-throw. Some callers may ignore exceptions thrown by the interpreter, and having them logged unnecessarily clutters the logs. It is now the caller's responsibility to log exceptions where needed.