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.
- 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
success
expression was fixed. - Custom Java exceptions have now a
equals
andhashCode
implementation 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
noConvert
expressions in the physunit language doesn't strip the unit anymore. Use thestripUnit
expression 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 ofnumber
which is 0. - Tuple types where all elements have the same type can now be used interchangeable with list types.
- The extension point
IUnitLangConfig
has 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
PhysUnitLangConfig
extension point.
- Gradle dependency licenses scanning enabled via custom sbom-utility feature
- Tuple types now support a new method
nTimes
to 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
IDotTarget
were 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.physunits
was added that should eventually replace the old unit language. Read the documentation inorg.iets3.core.expr.typetags.physunits.documentation
to learn more about the features of the new language.
- The type calculation of field setters now works.
NumberType#containsZero
now 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.devkit
was added that excludes the REPL and tracing language. org.iets3.core.expr.core.devkit
andorg.iets3.core.expr.advanced.devkit
were extracted into a separate pluginorg.iets3.core.expr.devkits
.- A new devkit
org.iets3.core.expr.interpreter.devkit
was created for all expression interpreters. - A new devkit
org.iets3.core.expr.repl.devkit
was 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
DateTimeException
during check DateLiteral. - IntHelper.equals now correctly deals with the combination of 0.0,-0.0,0 and -0.
NumberLiteral
can now be converted to aBigDecimal
with the methodtoBigDecimal
.- Uncatched
DateTimeException
during 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
index
expression 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
all
andany
operation of collections now also support theindex
expression. The conceptsAllWithIndexOp
andAnyWithIndexOp
are therefore deprecated.
- The class
IETS3ExprEvalHelper
was deprecated and a new classIETS3ExprEvaluator
was introduced that can also influence the creation of the computation trace.
- The
sort
method 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
none
values 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
SliceValue
can now correctly be checked for equality:SliceValue.equals()
andSliceValue.hashCode()
are overwritten.TemporalValue.hashCode()
was overwritten, thusequals
andhashCode()
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
IETS3ExprEvalHelper
methods 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.