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