Release notes
A list of new and noteworthy features as well as bugs we have tackled down in the particular releases.
itemis CREATE 5.5.0 (September 17, 2025)
This release mainly fixes Java simulation bugs and compatibility issues with the supported Eclipse platforms. It also delivers a newly added feature for the C# code generator.
C# code generator
- The C# code generator now supports generic tracing. With this feature, specific events are generated on certain execution events. These events can be consumed by any custom implementation or a generated YET Tracer.
For more information see: https://www.itemis.com/en/products/itemis-create/documentation/user-guide/codegen_csharp_code_generator#codegen_csharp_tracing_feature
Java domain simulation
Fixed several issues when java domain statecharts and external java source are used for simulation:
- Fixed an error when calling the constructor of an external class
- Fixed the simulation view for externally declared java objects
- Fixed the value assignment through the simulation view for externally declared variables
- Fixed execution and evaluation of externally declared functions
Validation and Modeling
- Relaxed validation of completion transitions in the context of multi statemachine models. Using completion transitions was forbidden before in this context what lead to a validation error. Now it is allowed to use completion transitions in multi statemachine models. Nevertheless if a state declares a submachine the submachines completion state is not considered yet. This will be implemented in a future release. For now a warning is raised if a completion transition is used in a state that declares a submachine.
Miscellaneous
- Fixed a bug that caused a stack overflow error (StackOverflowError) when starting a simulation for multi statemachine scenarios with cyclic references.
- The downloadable application is now built on the latest (2025-09) Eclipse target instead of 2025-03.
- With the aforementioned change Eclipse 2025-06 and 2025-09 are now supported for features and plugins provided via the update site.
IMPORTANT NOTICE: As there was an EMF bug bundled with the Eclipse 2025-06 release the latest version of GMF Runtime SDK is required (1.8.0.202508120942).
It is shipped with the release train (https://download.eclipse.org/releases/latest) so installing CREATE with the default Available Software Sites the installation should pull it automatically.
In other cases it could be installed from https://download.eclipse.org/modeling/gmp/gmf-runtime/updates/releases/
itemis CREATE 5.4.0 (August 1, 2025)
This release provides a now fully completed C# code generators along with improvenets and bugfixes in several areas.
Multi-state machine support for C#
The C# code generator now fully supports multi-state machine scenarios, enabling correct and complete code generation when multiple state machines are defined.The C# code generator is now feature complete regarding common statechart and sctunit generator features.
SCTUnit Generator
-
C++
- Mock interfaces in generated test suites are now defined as inner classes of the test fixture class. This avoids global class name conflicts and prevents undefined behavior or segmentation faults during test execution.
- State machine instances in generated tests are now encapsulated as member variables of the test fixture class instead of being declared as global static variables. This eliminates One-Definition Rule (ODR) violations and ensures test isolation.
- Added value initialization for member variables in generated C++ classes to prevent undefined behavior from uninitialized pointers.
-
Java
- The SCTUnit Java code generator now correctly generates all required imports for types contributed via deep Java integration.
- Fixed incorrect access to public variables of types contributed via the Java domain.
- The generator now correctly handles operation names starting with an uppercase letter.
- The type system now correctly scopes Java domain types per project to prevent type collisions when using classes with identical names in different projects.
C++ Code Generator
- Raw pointers are now initialized and compared using
nullptr instead of the literal
0, improving code clarity and compliance with C++11 best practices.
- Initialization code for state machine variables is now correctly generated for C++11.
- Escaping of keywords used as identifiers has been improved. Identifiers such as
event,
interface, etc., are now correctly suffixed (e.g.,
event__) to prevent compilation errors.
- Namespace resolution in trace callback generation has been corrected to avoid redundant or malformed qualified names.
- Generated code now properly escapes C++ keywords when used in statechart declarations.
Deep C/C++ Integration
- Initialization of user-declared complex types no longer incorrectly assumes the existence of parameterized constructors. This was an issue with C++.
C# Code Generator
- Event handling for
out events has been refactored to follow standard C# idioms using
EventHandler and
EventHandler<T>.
- Generated event raisers are now null-safe using the null-conditional operator (
?.).
- Fixed generation errors when
out event names begin with a capital letter.
- Escaping of C# language keywords used in identifiers has been corrected. Affected keywords include:
as,
event,
interface,
internal,
in,
out, and
readonly.
- Enum access has been fixed for enumerations contained in packages by using fully qualified names.
Validation and Modeling
- Validation messages now include the name of the affected model element. This makes it easier to trace validation issues from the problem view.
- A new validation rule detects incompletely entered orthogonal states caused by missing default entries in regions with direct transitions to child states.
- Highlighting of keywords in expressions has been improved. Identifiers that match keywords are no longer incorrectly highlighted if they refer to valid model elements.
- Completion transitions targeting named entries are now correctly treated as completion transitions in code generation.
Customization & API
- Custom extensions can now define annotations for states. This allows for greater flexibility and configurability when extending the modeling language.
- The
StatechartExpressionParser now supports injector customization by allowing the
createStatechartResource method to be overridden.
- Type inference now correctly resolves elements in expression features.
Miscellaneous
- Fixed malformed paths for HTML content in the example wizard.
- Improved editor responsiveness when working with large statechart models, especially on macOS with AArch64 architecture.
- Fixed the UML2SCT generator, so it now produces deterministic output by maintaining a consistent order of declarations. This significantly reduces version control noise and simplifies reviews.
- Coverage values were not calculated correctly for child test suites beyond the first one. This has been corrected.
itemis CREATE 5.3.0 (April 16, 2025)
This release mainly fixes compatibility issues with the supported Eclipse platforms. It contains the following changes:
- The downloadable application is now built on the latest (2025-03) Eclipse target and bundles Java 23 JRE (instead of Java 21).
- For Apple silicons with AARch64 architecture is now supported. With that it is now also possible for these platforms to install and use the product into Eclipse via update-site.
- With the aforementioned feature Eclipse 2025-03 is now supported for features and plugins provided via the update site.
- For C# generated timer related files now also suffixed with “.g”.
- Choice nodes no longer can be used as predecessor for synchronizations, as this would overrides sync semantics.
Additionally, these issues were fixed:
- Fixed a bug with transformations of macros with variable arguments (in the C/C++ domain).
- Fixed a bug which resulted the UI to freez in some cases when editing transition label in a C domain statechart.
- Fixed a bug with execution tracing which resulted the Yet code to not work properly.
- Fixed a bug in UML to YSC transformation when named entries and guards were present in a transition.
- Fixed a bug which prevented pasting a region into a state.
- Fixed bug related to creating coverage reports.
- There is no longer advanced tab in statechart search, all options are visible by default.
IMPORTANT NOTICE: Users of floating servers are required to update their license server as a precondition to use this and newer releases.
itemis CREATE 5.2.5 (January 24, 2025)
This release mainly fixes compatibility issues with the supported Eclipse platforms. It contains the following changes:
- The downloadable application is now built on the latest (2024-12) Eclipse target and bundles Java 21 JRE (instead of Java 17).
- The features and plugins provided via the update site support Eclipse versions from 2022-12 as oldest version up to 2024-12 as latest version. So it is possible to install itemis CREATE features into Eclipse distributions which use one of the Eclipse releases from this range.
- The required Java version is now 17 or higher.
- Due to compatibility issues of release 5.2.4 it is not possible to update some configurations like Eclipse 2023-12 with itemis CREATE 5.2.4 to the 5.2.5 release. If you encounter this issue please install 5.2.5 directly into the target Eclipse without prior update to 5.2.4.
- The licence management service has been updated and is now called ‘itemis Licensemanagement’ instead of the previous ‘YAKINDU Licensemanagement’. This change does not have an impact on usage of existing licenses.
- Extended validation for transitions.
- Transitions can’t be used as transition source anymore.
- Improved resizing and reorientation of sync nodes.
Additionally, these issues were fixed:
- Fixed a bug when multiple simulations are running.
- Fixed a bug with the C# generator when an operation call was provided as a parameter of another operation call.
- Fixed a bug with Eclipse 2023-12 which prevented the statecharts to be loaded when the product is installed via the update-site into an existing Eclipse instance.
- Removed the redundant C# beta feature which couldn’t be installed.
- Removed the “completed” and “doCompletion” internal variables from the simulation view.
- Fixed a bug with incorrectly disposed SWT resource when using the “Genmodel wizard”.
- Fixed a bug that resulted in the incorrect statechart file could not be opened if the model file is incorrect.
- Fixed an exception that could occur when resizing a sync node.
- Fixed an exception that could occur when using editing proposals on states.
itemis CREATE 5.2.4 (December 23, 2024)
This release contains the following changes:
- The application is now built on the latest (2024-09) Eclipse target.
- The generated code for all target languages (except SCXML) was optimized for some modelling patterns. While neither the state machines APIs nor their behavior are affected this results in reduced code size and less issues if static code analysis tools are applied to the generated code.
- Reduced unnecessary variable value assignments
- Removed functions that represents state reactions if the state has no reaction
- Improved UML->SCT transformation.
- The C# code generator now supports the following new generator options:
-
compilerPragma : The specified string gets generated at the start of the ‘.cs’ file. This enables to specify C# compiler pragmas.
-
generatedFileExtension : If set to
true the generated files are suffixed with ‘.g.cs’ instead of ‘.cs’ to enable specific handling of those files when compiling a C# project.
- Extended the documentation for integrating generated state machine code with real time operating systems (RTOS). And additionally provide examples for FreeRTOS and Zephyr.
Additionally, these issues were fixed:
- fixed the statechart search feature.
- fixed a bug when local reactions of parent states get executed multiple times when a contained completion transition chain is executed.
- fixed a bug in UML->SCT transformation when transforming transitions from named exit points to named entry points.
- fixed a null pointer bug when validating proxy objects
- fixed a bug related to enumerations when simulating a Java domain statechart.
- fixed C code generator issues:
- ‘#include <string.h>’ is only generated if required.
- add size information of arrays in meta source.
- fixed the headless code generator application for SCTUnit generating for C language.
- fixed a null pointer bug related to coverage, when executing SCTUnit tests.
- fixed a scalability issue when simulating large statecharts.
- fixed some minor editor related issues.
- fixed an issue resulting in customers not getting the latest version of the examples when checking them out in the ‘Examples Wizard’.
- removed not necessary files from the compressed downloadable of the product.
itemis CREATE 5.2.3 (July 5, 2024)
This release contains the following main features:
- Our C# code generator now support the ‘Mocking’ SCTUnit feature. For more information see: https://www.itemis.com/en/products/itemis-create/documentation/user-guide/sctunit_the_sctunit_language#sctunit_mocking_an_operation_call
- Our C# code generator now support the ‘assert called...’ SCTUnit feature. For more information see: https://www.itemis.com/en/products/itemis-create/documentation/user-guide/sctunit_the_sctunit_language#Assertinganoperationcall
This release contains the following changes:
- The application is now built on the latest (2024-06) Eclipse target.
- Composite states now have their own life cycles. That means that the state configuration not only stores and represents leaf, but composite states also. With that, it is possible to check whether they are active e.g. during state transitions which was not possible before.
This results in changes in the generated code.
Additionally, these issues were fixed:
- fixed a bug when exit actions are not executed correctly when a transition from a choice exits states in a hierarchy.
- fixed a bug with the execution sequence when leaving a composite state throughout a choice node.
This results in changes in the generated code.
- fixed a bug in the C# code generator, when generated setter does not work due to its implicit value parameter when a statechart variable is called ‘value’.
- fixed a bug in the C# generated code related to nested operation calls.
- fixed a bug with operation overloading in C and C++.
- fixed model comparison feature. As the bug was related to the product definition it requires a clean install, updating the existing installations that contain the issue won’t solve it.
- fixed bug related to named arguments in operation calls.
itemis CREATE 5.2.2 (March 22, 2024)
This release contains the following main features:
- The Java domain for statecharts have been reactivated.
- With that you can import Java classes, interfaces and enums in your statechart and use them for your statechart variables.
- You can access all public and static members, like variables and methods, directly from the statechart. This avoids lots of boilerplate code.
- Java methods that are used in your statechart will be called during simulation. This avoids the cumbersome mocking of return values in the simulation process.
For examples and more info: https://blogs.itemis.com/en/deep-java-integration-for-yakindu-state-machines
This release contains the following changes:
- The application is now built on the latest (2023-12) Eclipse target.
- The C++11 code generator now uses “new style cast” for type conversion.
- Added documentation for the feature “Coverage Report”.
Additionally these issues were fixed:
- fixed headless code generator failed for C/C++ domain statecharts
- fixed headless code generator for SCXML domain statcharts
- fixed test coverage report
- fixed a bug with operation calls when named parameters were not ordered correctly
- fixed model comparison feature. As the bug was related to the product definition it requires a clean install, updating the existing installations that contains the issue won’t solve it.
itemis CREATE 5.2.1 (December 22, 2023)
This release contains the following changes:
- Added new generator option
timerServiceTimeType for C/C++ code generators to configure the data type used for time values processed by the timer service. So you can now configure e.g. to use
uint64_t. For more information please see the corresponding documentation.
- All APIs which handle time values now use the new type
sc_time for C and C++98 and
sc::time for C++11 and C++/Qt.
- This includes the return value of the
time_till_next_task function in the Timer Service have changed from
sc_integer to
sc_time. The default value of
sc_time is the same as the value of
sc_integer. For more information please see the documentation for the generator feature
timerServiceTimeType.
Additionally these issues were fixed:
- fixed image generator failed for C/C++ domain statecharts
- fixed bug related to overflow large 32bit time event values
- removed unused C# generator options
- fixed exception raised during handling test covearges
itemis CREATE 5.2.0 (November 2, 2023)
This release contains the following main features:
- Improved C# code generator. It is now part of the product, so there is no need to install it separately via the update site. In addition to statechart code generator also a C# code genrator for SCTUnit is now part of the release. The C# code generator has release candidate status. Most statechart and SCTUnit features are supported except for statecharts using multi state machine modeling feature and teh SCTUnit mocking features. If you find any bugs or just have an idea or observation please don’t hesitate to contact us!
- Introduced html reports for SCTUnit tests and extended coverage handling. It is now possible to export the coverage report that produced upon SCTUnit test runs. It can be exported in different formats and can be accessed in an interactive way through reactive HTML site that can be generated from the SCTUnit view.
Additionally the following issues and bugs were fixed.
- Fixed editor issues regarding: region resizing and handling subdiagramms
- Fixed editor issues regarding: proposals in chained feature calls
- Fixed invalid execution of local reactions of child states without transitions using parent first execution schema
- Improved enumeration validation: it now raises only one validation issue for the last invalid enumerator instead for all the enumerators followed by the invalid one.
- Fixed redundant interface implementation in Java codegenerator
- Fixed issues regarding ‘.value’ schemantic.
- Fixed proposal provider for chained feature calls (e.g. enumerator access)
- Fixed simulation of SCXML statecharts that conatines ‘.value’ expression.
- Fixed issue regarding Mac Os signing.
- Added support for Eclipse targets ‘2023-09’.
- Updated examples for C++ reflecting the slightly changed codes and presenting the smart pointer usage.
- Fixed an issue for target platforms older then '2021-06'
- Fixed timer service implementation’s order scheduler logic for C and C++.
itemis CREATE 5.1.1 (August 11, 2023)
This release contains the following changes:
- Fixed editor issue: Proposal does not work properly in right hand side in BinaryExpression.
- Fixed validation issue: States which are part of a transition cycle are not detected as unreachable if the whole cycle is unreachable.
- Fixed validation issue: Validation fails with NullPointerException on uncomplete ‘raise’ statement.
- Fixed SCTUnit issue: In mock operations string parameters were not validated correctly (“The value type string:literal doesn't match the return type string of the operation”)
- Fixed SCTUnit issue: Type inferrer is too strict for ‘proceed’ values.
- Fixed SCTUnit issue: Type inferrer complains about string literal assignment.
- Fixed SCTUnit isse: Validation of missing enter statement must be warning instead of error.
- Fixed issue: Type checker accepts enumeration types where only enumerators should be used.
- Fixed issue: Type inferrer does not match identical types if namespace is specified differently.
- Fixed C/C++ domain issue: Sporadic inference errors with CycleBased annotations.
- Fixed C/C++ domain issue: Access of function defined by class and refered by smart pointer does not work.
- Fixed C/C++ domain issue: Access to members of structs defined within structs is not generated correctly.
- Fixed C/C++ domain issue: “.value” property returns BaseType instead of actual type
- Fixed C/C++ domain issue: C char array defined in imported C code are not correctly handled a C strings.
- Fixed C++ generator issue: TimerTask::TimeBased::pt_evid may be used uninitialized.
- Fixed generator issue: State machines referenced by internal variables in multi state machine scenarios are not correctly subscribed for relevant events.
- Fixed issue: Statechart state enumerators include namespace in name.
- Fixed issue: ‘isFinal’ method contains redundant code which may lead issues with static code analysis.
- Fixed issue: Interpreter (simulation) does not process payloads correctly in some cases of CycleBased execution.
- Fixed issue: Interpreter implementation of state machines isStateActive method fails if final states are used.
itemis CREATE 5.1.0 (April 24, 2023)
This release contains the following fixes and improvements:
- Improved validation of choices targeted by sync nodes which are used as forks. In this case the outgoind trasitions of the choiuce must not leave the composite state.
- Improved documentation mode in statechart editor
- Enhanced documentation mode to only show documentation if present
- Fixed issue: Toggle Documentation is disabled after closing and reopening a model
- Feature: Deep C++ integration now supports smart pointers. Statechart event, variable, and operation declarations can make use of smart pointers.
- Feature: Allow array acces on internally defined pointers with Deep-C/C++ integration.
- Features and bugfixes related to timer service implementations
- For C++ the default timer service implementation and the one used by SCTUnit are now the same. So the implementation for both changed. To generate the new versions you may have to remove the old from the code base as those are only generated if no timer service can be found at the specified location.
- Added a method to C++ virtual timer service to request the next available time step.
- Fixed issue: C/C++ timer service does not deactivate fired time events correctly.
- Fixed issue: Proceeding C(++) timer services should trigger periodic events multiple times.
- Fixed issue: Timer service is potentially vulnerable to overflows.
- Fixed issue: Simulated Timer Service does not respect periodic event orders.
- Fixed issues regarding generating code in multi statemachine scenarios
- Cannot access identically named orthogonal states from referenced state machines.
- The C generator ‘StatemachinePrefix’ option is broken in multi statemachine scenarios
- Other bugfixes:
- Fixed issue: Headless code generator broken in release 5.0.0
- Fixed memory leak in C++11 event queue implementation
- Fixed issue: The C++ generates wrong code id statechart type is used as event payload
- Fixed issue: Potential clash of struct and class template for C++ subscription classes with Microsoft C++ ABI.
- Fixed issue: Java statemachine class does not extend base statemachine interface
- Fixed issue: Java SCTUnit code generator generates into wrong locations/packages
- Fixed issue: In specific scebaris the interpreter (simulation) drops events from event queue.
- Fixed issue: events with enumeration payload apply incorrect value type in simulation
- Fixed issue: ‘New Wizard’ still shows “YAKINDU SCT” instead of "itemis CREATE"
itemis CREATE 5.0.0 (Dec 22, 2022)
This is a new major release. The name
YAKINDU Statechart Tools (YSCT) will be discontinued and replaced by
itemis CREATE. From a functional point of view this release is compatible with previous releases. It is provided as the part of the regular tool maintenance. So no changes apply in regards to license handling.
- The new name and appearance
- All visible parts related to the new brand now use the new tool name, application icons, etc.. Also the documentation and welcome page are reworked accordingly.
- New generator ids were introduced which use the namespace
create:: instead of
yakindu::. The
yakindu:: ids are deprecated but can still be used. So no existing project setups will break.
- Modeling features were extended
- Added completion event semantics as defined by the UML specification. So it becomes much easier to process a sequence of state transitions within a single run to completion step.
- Added
triggerWithoutEvent to the API of event driven statecharts. As the name indicates it allows to trigger a run to completion step in the case that no event exists.
- New abstract statechart types
EventDrivenStatemachine and
CycleBasedStatemachine can be used as abstract types in multi state machine models.
-
UML state machines can be imported as itemis CREATE statecharts. This is an optional feature
- New C++11 & C++/Qt code generators
-
C++11 is the new default C++ code generator.
- Access to named state machine interfaces are now provided by reference instead of pointers for C++11.
- Removed compiler and linter warnings for genrated C++ code and improved AUTOSAR C++ 18 compliance.
- Existing code generator congigurations which use the C++98 code generator (default in 4.x versions) will continue generating C++98 code.
- Smart pointers are supported as an option for the C++11 code generator.
-
C++ for Qt code generator was added to the tool and supports a seamles integration into Qt projects by supporting Qt specific concepts like signals and slots. It is based on the C++11 code generator.
- Support headless code generation for statechart models created by the itemis CREATE statechart web editor. (generating from .scm files)
- General code generator maintenance
- The new generator option
generateAllSpecifiedIncludes allows to generate includes for headers which are included but actually not used by the model.this option applies to the C and C++ code generators.
- Support accessing nested structs for C code generation.
- Fixed issues with processing C++ namespaces when using Deep-C++ integration.
- Fixed issues with processing C++ namespaces in combination with enumerations.
- Fixed issue with namespace handling in Python unit test code generator.
- Fixed bug in the C observable implementation.
- UI improvements
- Test coverage view now inverts display order of covered and uncovered metric values.
YAKINDU Statechart Tools 4.1.2 (Jul 11, 2022)
This release contains the following fixes and improvements:
- C/C++98/11 code generator: If no getters are required then the code generator does no longer generate unused implementation fragments.
- C code generator: Fixed a bug that resulted in misplaced semicolons with a specific generator option combination.
- C SCTUnit code generator: Fixed a bug that resulted in incorrect code if the statechart’s variables were set in the SCTUnit test class.
- Python code generator: Fixed license text for default runtime service to be part of comment block.
- Java code generator: Fixed the handling of the state exit tracing option.
- Fixed incorrect behavior of completion transition with multiple nested composite states.
- Fixed inconsistent behavior of synchronization nodes. The validations for them are now complete and more user friendly.
- There is now a warning raised if the testclass' name is identical to the statechart’s name to indicate the risk of overwriting generated code.
YAKINDU Statechart Tools 4.1.1 (Jun 15, 2022)
This release contains the following fixes and improvements:
- C++11 code generator: Statechart namespaces are now generated properly if they consist of more than two parts.
- C++11 code generator: The generator option
moduleName is now properly applied.
- C++11 code generator: The generated code does not produce
Wsuggest_override warnings anymore.
- C++11 code generator: References to namespaced enum classes are now properly qualified in the generated code.
- C++98/11 code generator: The generated code does not produce
Wshadow warnings anymore.
- Headless code generator: References to C++ types within namespaces were incorrectly generated by the headless generator. This is fixed now.
- Headless code generator: Image generation is not supported for the headless generator and is skipped with a warning now instead of failing with an error.
- All generators: The statechart API now contains a method
triggerWithoutEvent for event-driven statecharts, which allows to perform a run-to-completion step without the need to raise an incoming event.
- SCXML domain: We fixed the execution of local reactions if no guard is defined.
- SCXML domain: Local reactions triggered by time events are now marked as
internal.
- SCXML domain: We added a missing
script element for action statements other than assignments.
- SCXML domain: Multiple time triggers used on one local reaction use separate time events now.
- SCXML generator: State names are shortened by skipping the superfluous statechart name.
- SCXML generator: SCXML now can be generated also for default domain statecharts.
- Documentation: Some smaller updates and fixes of broken links.
YAKINDU Statechart Tools 4.1.0 (May 9, 2022)
The 4.1 release is a major release that adds
Completion Transitions semantics to CREATE Statecharts, and comes with a first preview of the new
C++ 11 Code Generator.
Completion Transitions
From this version onwards, YAKINDU Statechart Tools applies the UML specification for completion transitions as defined in the OMG UML 2.5.1 specification under chapter 14.2.3.8.3. Completion transitions are transitions that do not declare any trigger or guard. In previous versions such empty transitions were never taken and a corresponding warning was displayed.
A completion transition is taken as soon as its source state is
completed. A simple state is considered to be completed when all its entry actions are executed. A composite/orthogonal state is considered to be completed when all its sub regions have reached a final state. Completion transitions make it much easier to synchronize the execution of parallel actions in orthogonal regions. A sub machine state is completed when the sub statemachine has reached its final state. However, the latter case is not yet supported, but will be implemented in the near future.
You can find more information on this feature in our
user documentation.
(Beta) C++ 11 Code Generator
In addition to the existing C++98 compliant code generator this release provides a beta version of a C++11 compliant code generator. C++11 was chosen as the base standard which fits very well into recent C++ standards.
The current version is intensively tested and can be used for production code. But please be aware that this version is beta. The API of the generated state machine code may change until the final release.
The main differences to the C++98 code generator relate to c++11 compliant changes to the generated state machine API:
- Overriden methods are now correctly declared using C++11
override which prevents related compiler warnings.
- State and event enumerations are now defined as
enum class instead of plain C enumerations.
- The base types used by the generated state machine code changed. These are defined in
sc_types.h. You have to regenerate this file.
- All sc types like
sc_integer or
sc_real which were defined in the global name space are now defined in the
sc name space. So
sc::integer is used instead of
sc_integer .
-
bool is now directly used instead of
sc_boolean typedef.
-
std::string is used instead of
sc_string which was defined as as C string.
-
sc_eventid which was used in the
TimerServiceInterface and
TimedInterface is replaced by
sc::eventid which is now based on a state machine internal time event index instead of a pointer value.
- The generated API has now a
triggerWithoutEvent method in order to perform a run-to-completion step without triggering an event.
-
check method is declared as
const.
- The internal implementation of the event handling was optimized.
You can use the C++11 code generator by specifying
create::cpp11 instead of
create::cpp in your
*.sgen files. Accordingly the C++11 SCTUnit code generator uses the generator id
sctunit::cpp11.
(Beta) Reworked Qt-C++ Code Generator
The Qt code generator has been reworked to use the new C++ 11 code generator. While doing so we have fixed several issues that were present in the previous Qt generator. You can install the Qt code generator from the release update site (under the category “YAKINDU Statechart Tools Extensions”).
Further Updates
This release contains the following updates:
- C/C++ domain: We fixed an issue with the parsing of overloaded operations that use the same type hierarchy in their input parameters.
- C/C++ domain: Changes in a header file that is imported in a statechart are now directly reflected in the statechart editor.
- C/C++ domain: Identically named types (enums, structs etc.) in different namespaces are now properly parsed and distinguished by the statechart editor and simulation.
- C/C++ code generator: The default value of function inlining is changed to true (see
here for more information)
- C/C++ code generator: We fixed the style of generated doxygen comments.
- Image generator: In some scenarios, the image generator produced different results depending on if the model was opened or closed. This is fixed now.
- Headless code generator: The generator now continues to generate all specified generator models even when one of them fails due to an error.
- Time triggers can now handle larger numbers (64-bit integers).
- Choice check functions are now inlined per default which avoids generation of dead code.
- We fixed an error when executing SCTUnit test suites.
- We fixed an issue in the editor when someone accidentally deleted the statechart name.
- We fixed a few issues with code completion proposals in generator models. They are now prettier and more informative.
- We fixed a sporadical issue causing the statechart editor to open with a “Resource contains no diagram” error.
- We fixed several usability issues in the definition section.
YAKINDU Statechart Tools 4.0.9 (Jan 24, 2022)
This release contains the following fixes and improvements:
- C/C++ Domain: It is now possible to use nested structs/enums/unions. Also, it is no more necessary to use typedefs when a struct/enum/union is to be used in the statechart.
- C/C++ Domain: Overloaded C++ operations containing type parameters were not properly linked in the statechart. This is fixed now.
- SCTUnit C code generation: The SCTUnit timer service for C is renamed from
sc_timer_service to
sc_unit_timer_service to avoid name clashes with the default statechart timer service for C.
- Python code generation: The active state check is now optimized to avoid superfluous checks.
- Headless code generation: We did several fixes here, regarding multi-statemachines, the usage of
SHA256 and
SCTFILE properties, and more.
- Statechart language: It is now possible to check for active final states in guard expressions.
- Statechart language: The scientific notation of a float now also allows an uppercased
E.
- Statechart language: We fixed several issues with our type inferrer, mostly regarding the usage of generic types.
- Statechart execution: When having multiple buffered events and one active out event, for each processing step in the event queue this out event was active, which results in unexpected behavior when this out event is checked in the same statechart. This is fixed now. The out event is only active once.
- Statechart execution: Using self-transitions with time triggers could cause infinite loops when super steps are enabled. This is fixed now. When a transition is taken, all its time events are cleared.
- Statechart editor: When using the documentation mode, the texts still had syntax coloring enabled. This is fixed now.
- Statechart editor: We fixed a bug when a renaming a variable that is used in a
submachine expression.
- Coverage View: When a region has multiple entry/exit nodes, the test coverage was sometimes incorrectly set to 0 for this region. This is fixed now.
- We fixed a performance issue with cyclic references in multi-statemachine scenarios.
- We fixed a few performance issues when using large SCTUnit files.
YAKINDU Statechart Tools 4.0.8 (Sep 21, 2021)
This release contains the following bugfixes:
- C/C++ code generation: Include paths now always use forward slashes independent of the OS under which the code was generated.
- C/C++ code generation: In multi statemachine scenarios, the ‘statemachinePrefix’ settings for sub machines were not properly taken into account, resulting in compilation errors. This is fixed now.
- C/C++ Domain: It is now possible to use events with struct or pointer payloads. The struct member values can now be set in the Simulation View.
- C/C++ Domain: We fixed an issue that occurred when an imported header file included types from header files outside the current workspace.
- SCTUnit C code generation: When using mocks for operations from external header files, the produces code was invalid. This is fixed now.
- We fixed a few issues regarding the simulation highlighting, in particular in combination with subdiagrams.
- In some rare cases, annotations in the definition section were not found and the statechart was not usable. This is fixed now.
- We fixed an issue that caused exit node transitions leading to a fork node not being properly taken, resulting in an inconsistent state configuration.
YAKINDU Statechart Tools 4.0.7 (Jul 09, 2021)
This release contains the following bugfixes:
- In multi statemachine scenarios, specifiying custom names for the generated modules or types would break the generated code. This is fixed now for the C and C++ code generators.
- It is now possible to use the headless code generator (scc) for multi statemachine scenarios.
- The default timer service in C and C++ had a bug which caused in some cases the wrong timer being taken if multiple timers with the same time were specified. This is fixed now.
- We also fixed some “unused parameter” warnings in the SCTUnit code generators for C and C++, especially when using operation mocks.
- The image generator produced files with different contents for the same statechart, if the statechart file was not opened in an editor. The outcome of the generator is now deterministic.
- On Windows, when using relative paths in CDT preferences, this could result in header files being not properly parsed by the C/C++ domain. This is fixed now.
- Using SHA256 or SCT_FILE constants in generator model produces errors when used globally. This is now only possible inside a generator entry.
YAKINDU Statechart Tools 4.0.6 (Apr 16, 2021)
This release contains several bugfixes:
- We fixed a memory leak in event-driven C++ state machines.
- The SCXML code generator now also generates a documentation attribute containing the statechart elements' documentation text.
- We fixed a few issues with handling packages/paths in the Python code generator.
- The image generator now also works for state machines that contain errors.
- We fixed an issue with generating post-fix expressions in a multi-statemachine scenario.
- Using the ‘submachine’ keyword now also works for cycle-based statecharts.
- Using ‘isStateActive’ in SCTUnit tests for multi-statemachine scenarios produced invalid code in Java and Python. This is fixed now.
- We fixed an issue when deleting statecharts that still run in a simulation.
- We fixed some issues with the simulation highlighting.
- Disabling the SCT features in the license preferences now also prevents the license website to open on startup.
YAKINDU Statechart Tools 4.0.5 (Feb 08, 2021)
This release contains the following new features:
- The C code generator can now generate meta files containing state names and features as string arrays. You can enable this feature with the
metaSource option in
GeneratorOptions. Read more about this feature
here.
- For the C and C++ code generators it is now possible to configure the file extensions of the generated artifacts. You can specify which file extensions should be used with the
headerFilenameExtension and
sourceFilenameExtension options in
IdentifierSettings. For the corresponding SCTUnit code generators you can use the option
testFilenameExtension to configure the file extension of the generated GTest file. Read more about this feature
here.
- We added a new validation that produces a warning when unbuffered in/local events are raised but not consumed downstream.
- We added a new validation that produces a warning when unbuffered local events are used but never raised upstream.
- We added a new validation that produces an error for assignments to a submachine’s readonly properties.
In addition, the following issues were fixed:
- The C++ domain had an issue with parsing operations that used parameters of template and normal types. This is fixed now.
- The C++ domain had an issue with typedefs used in combination with namespaces. This is fixed now.
- The C++ domain had an issue with parsing the linkage specification in some cases. This is fixed now.
- The C++ code generator sometimes produced initialization lists with duplicated statements. This is fixed now.
- We fixed several issues for the YET C code generator.
- The Python code generator produced a warning when ‘valueof’ was used on string typed events. This is fixed now.
- The Python code generator produced unused properties for outgoing events even if out event getters are disabled. This is fixed now.
- In the generated Java and Python code for SCTUnit, the
proceed x cycles statement now proceeds only the remaining time that is required for the
x cycles to be invoked. Before that, the statement always proceeded
x * cyclePeriod milliseconds.
- The simulation view had an issue when complex types with nested boolean properties were used multiple times. This is fixed now.
- We fixed a few issues that caused UI freezes during statechart editing.
- The note widget is now usable again.
YAKINDU Statechart Tools 4.0.4 (Dec 04, 2020)
This release contains several bugfixes, new examples and documentation updates:
- Child-first execution is enabled per default now, instead of parent-first execution.
- The C code generator had an issue when using ‘@ShortCIdentifiers’ and ‘active’ expressions. This is fixed now.
- The C code generator had an issue when both options, ‘Tracing.generic’ and ‘GeneratorOptions.userAllocatedQueue’, were enabled. This is fixed now.
- The Java code generator had an issue when the ‘synchronized’ option was enabled. This is fixed now.
- We further improved the Python code generator to be more pylint compliant.
- We did some clean up in the Python generator model, proper defaults, validations, removed obsolete options etc.
- We fixed an issue with ‘proceed cycle’ statements in SCTUnit, and also updated the documentation.
- The SCTUnit C++ generator was resetting operation mocks also in non-test operations. This is fixed now.
- The SCTUnit Python generator now properly handles ‘assert called’ statements.
- The rename refactoring also removed whitespaces in some circumstances. This is fixed now.
Documentation
- We reworked the chapters on code generators (C, C++, Python and Java).
- We updated the embedded systems integration guide to show the usage of out event observers.
- We updated some parts of the SCTUnit documentation and added a new chapter on the SCTUnit test coverage feature.
Examples
- We restructured the example wizard categories.
- We updated the examples on code generation.
- We added new examples for using SCTUnit and generating C (gtest), C++ (gtest), Java (JUnit) and Python (unittest) from SCTUnit tests.
YAKINDU Statechart Tools 4.0.3 (Nov 13, 2020)
This release contains several bugfixes as well as improvements for the Python code generator:
- We fixed an issue with the C++ code generator for multi statemachine scenarios when internal scopes were used.
- We fixed an issue in the editor that caused an error dialog to pop up frequently in certain circumstances.
- The Python code generator now generates code that is much more pylint compliant.
YAKINDU Statechart Tools 4.0.2 (Nov 06, 2020)
This is mainly a bugfix release, containing several fixes for our code generators and the YET infrastructure, but also some usability improvements.
Code Generation
In this release we added new feature for the C and C++ code generators: It is now possible to generate a
software timer service implementation by using the ‘timerService’ parameter in the generator model, like in the example below:
Example:
feature GeneralFeatures {
timerService = true
}
Furthermore, we fixed several issues, among others:
- We fixed an issue in the C code generator where the generated check methods for choice transitions incorrectly used a const qualifier.
- We fixed an issue the C code generator when type aliases were defined in a C/C++ domain statechart.
- We fixed the C code generator for statechart using certain combinations of event buffering and time events.
- We changed the names of the event and feature enumerators to be more consistent with the other API methods (no ‘Iface’ in the name)
- We fixed an issue in the C code generator when generic tracing is enabled.
- For multi state machine scenarios, we fixed an issue in the C++ code generator when the ‘isStateActive’ method is used.
- For multi state machine scenarios, we fixed all code generators to properly reference sub machines that use a namespace.
- We removed the obsolete parameters ‘apiTargetFolder’ and ‘apiTargetPackage’ from the Java and Python generator models.
YET Infrastructure
For this release, we also spent some effort in further improving the CREATE Execution Trace (CET) infrastructure:
- We improved the YET C code generator to make the generated code compilable with pedantic checks,
- We fixed an issue in the YET C code generator and debugger when declarations in named statechart interfaces were used.
- We fixed several minor issues in the YET debugger
Editor Usability and Other Fixes
- We fixed several smaller usability issues to make statechart modeling more convenient.
- Selecting a region is now more intuitive again: Single click just selects the region; click & move spans a multi-selection rectangle.
- We fixed an issue causing an incorrect region order when moving a region into an orthogonal state.
- For C/C++ domain statecharts, it is now possible to access external members, that are in the same namespace as the statechart, without the namespace qualifier.
- Fixed an issue with the quick-fix to change the statechart domain in the generator model.
- New SCTUnit files now proper reference the selected statechart when it declares a namespace.
YAKINDU Statechart Tools 4.0.1 (Oct 20, 2020)
This is mainly a bugfix release, containing the following:
- Fixed a few issues that occurred when event buffering for incoming events was disabled (simulation and code generation).
- Added validation to ensure local event buffering is not disabled for event-driven statecharts.
- Headless (standalone) code generator is working again.
- The Python code generator now also makes use of the libraryTargetFolder parameter, has a new libraryPackage parameter, and does not create an empty timer package anymore.
YAKINDU Statechart Tools 4.0.0 (Oct 09, 2020)
- The new graphical editor comes with live feedback and enhanced transition routing, which along with a fresh look and feel, gives a significantly improved user experience.
-
Multi Statemachine Support: Now state machines can reference other state machines. Import state machines, access variables and raise or react on events to set up a system of collaborating state machines.
-
Super Step Semantics: A super step executes a sequence of single steps until a stable state configuration is reached. You can activate or deactivate super step execution for each state machine with the
@SuperStep annotation.
-
Python Code Generator: The Python code generator is available with the official 4.0 release.
YAKINDU Statechart Tools 3.5.13 (Sep 04, 2020)
This is mainly a bugfix release, containing the following:
- Fixed an issue in the C code generator that produced unreachable code in some cases.
- Fixed an issue in the C code generator when multiple internal blocks were used in the statechart definition section.
- Fixed an issue in all code generators which produced non-compilable code when composite states without inner states were used.
- Fixed an issue when accessing static class members in C++ domain statecharts.
- Fixed an issue with @CycleBased annotations in Java domain statecharts.
- Time events are now properly paused when the simulation is paused.
- Time events in orthogonal regions were not always properly raised in the Simulation, this is fixed now.
YAKINDU Statechart Tools 3.5.12 (Jun 15, 2020)
This is mainly a bugfix release, containing the following:
- Fixed some scoping issues when using C++ namespaces in C++ domain statecharts. In particular, elements from namespaces that are split over multiple files are now properly accessible in the statechart.
- Fixed an issue in the C code generator that resulted in a duplicate type cast.
- Improved performance when validating SCTUnit files. Especially for larger SCTUnit test classes, the performance improvement is significant.
- Fixed an issue when opening the generator model wizard without selecting a file.
- Fixed handling of guard expressions in statechart entry and exit reactions.
- Fixed an issue when time events were used in regions without inner states.
- Added the ‘Send Feedback’ option also to the Standard Edition.
SCXML
In this release we also put some effort in improving the SCXML integration, containing the following:
- Update to latest Apache Commons SCXML Engine.
- Several bug fixes, especially for handling Choice and Synchronization nodes.
- We also added various validation rules to ensure that the modeled statechart can always be transformed into valid SCXML.
YAKINDU Statechart Tools 3.5.11 (Apr 07, 2020)
This is mainly a bugfix release, containing the following:
- Fixed the C++ code generator when multiple namespaces are used.
- Improved the C++ code generator to not produce a warning in initialization lists anymore.
- Fixed some case where generated C/C++ code did not compile with -pedantic flag.
- Fixed usage of synchronization nodes for SCXML domain statecharts.
- Fixed an issue where the JRE was not found on startup.
YAKINDU Statechart Tools 3.5.10 (Feb 24, 2020)
This is mainly a bugfix release, containing the following:
- Fixed severe performance issues when using C/C++ domain statecharts in large C/C++ projects.
- Improved the C/C++ code generators to not produce unused functions and parameters anymore.
- Fixed a bug in C/C++ domain causing C headers with ‘extern C’ directives not being properly parsed.
- Fixed a bug that causes a parent state’s local reaction not being executed when a child state’s self-transition was taken.
- Fixed headless code generation for SCTUnit models using ‘proceed’ statements.
- Code generators now print a warning if files could not be written due to missing write access rights.
YAKINDU Statechart Tools 3.5.9 (Nov 14, 2019)
This is mainly a bugfix release, containing the following:
- Fixed the C++ code generation for setter function when variables with name ‘value’ were used.
- Fixed a bug causing an exception in the C/C++ domain.
- Fixed a bug in the Java code generator where operation calls were not properly synchronized in a multi-thread scenario.
- Fixed a bug in the Java code generator when elements with name ‘switch’ were used.
- When creating new statechart models the name is now properly validated.
- Fixed a small rendering bug for choice nodes.
- State names are bold again.
- The links in the context help now link to some useful part of the documentation.
- Cleaned-up menus and toolbars.
- Removed JVM argument ‘-server’ to avoid problems with some Java installations.
Documentation
For this release we also spent some additional time on our documentation. We restructured the user-guide and updated some parts. We also added two new chapters:
- Embedded Systems Integration Guide: Demonstrates how to integrate the generated C code with code running on an embedded device
- Lab Features: Lists our lab features and corresponding resources to get started with them
YAKINDU Statechart Tools 3.5.8 (Oct 10, 2019)
This is mainly a bugfix release, containing the following:
- Fixed a bug in the C++ code generator where namespaced elements were incorrectly accessed in the generated code.
- In some use cases, overloaded functions could not be properly used in the statechart model. This is fixed now.
- Fixed import resolution of C domain statecharts located in linked folders.
- Command-line code generator (scc) now also works when the project name in .project file differs from project’s folder name.
- In the Java domain, it is now possible to use arrays. Although it is not yet possible to directly initialize them in the statechart model, you can initialize them by calling a Java operation, for example.
- In Java domain statecharts, you can now also import code from JARs that are located in the same project.
- Besides bugfixing, we also continued to improve the usability of the Statechart Tools products. In this regards, we have started to clean-up several menus and toolbars from rather useless, distracting items. This is an ongoing process and will be continued in the upcoming releases.
Example Wizard
We have restructured the examples from the example wizard and added new ones. Please make sure that you update your examples (click on Update button in example wizard) in order to benefit from the new structure. In particular, we added new examples to explain some more advanced statechart concepts like histories, statechart hierarchies, orthogonality and our execution schemes (event-driven, cycle-based, parent-first, child-first). In addition we added new simple examples for code generation in C, C++ and Java.
YAKINDU Statechart Tools 3.5.7 (Sep 16, 2019)
This is a bugfix release, containing the following:
- The SCTUnit code generators now properly handle “valueOf” expressions. This allows you to test the value of an outgoing event, e.g. “assert valueof(myEvent) == 42”.
- In SCTUnit, it is now possible to use all kinds of expressions inside of “proceed” statements. For example, you can now write “proceed x ms” where x is a variable defined in the statechart.
- The C code generator now adds a cast to void in isFinal function to avoid warnings about unused parameters.
YAKINDU Statechart Tools 3.5.6 (Sep 3, 2019)
This is a bugfix release, containing the following:
- For event-driven statecharts, out events are no more cleared when processing local events.
- It is now possible to use generic types in type cast expressions. In case of C/C++ domain statecharts, this allows casting to void pointers, for example.
- For statechart operations with complex return types there was no way to mock the return values in the simulation. This is now fixed and especially helpful for the C/C++ and Java domains.
- The generated C++ code now contains a null-check for the trace observer to avoid runtime crashes, especially in combination with generated SCTUnit test code.
- In SCTUnit, when mocking operations with enum return types, the generated C++ code did not compile. This is fixed now.
- Fixed a problem when importing external C++ headers where in some cases types were not properly transformed.
- The news feed feature is disabled as it produces severe problems with Java 11.
YAKINDU Statechart Tools 3.5.5 (June 18, 2019)
This is a bugfix release, containing the following:
- Fixed error with latest Xtext release 2.18 to ensure compatibility with upcoming Eclipse 2019-06.
- Licensemanagement: When restarting or switching workspace in Eclipse, the currently used licenses are not returned (on Windows).
- Licensemanagement: Startup crash in conjunction with osgi.dataAreaRequiresExplicitInit=true.
YAKINDU Statechart Tools 3.5.4 (May 15, 2019)
This is a bugfix release, containing the following:
- Fixed C code generation when
@ShortCIdentifiers annotation is used. In version 3.5.3, this resulted in generation of duplicate react methods.
- Fixed usage of enumerations within namespaces in C/C++ domain. Enumeration types can now be accessed by qualifiying them with their namespace, and enumerators can be assigned to corresponding variables.
- Fixed a bug in headless code generation for C/C++ domain statecharts causing header files not being found in certain scenarios.
- Fixed a bug in Python code generator causing generation errors when variables are used as arguments in operation calls.
Event-driven execution support for C# code generator
The C# code generator now also supports statecharts with event-driven execution semantics. The generated code now contains corresponding run-cycle calls when events are triggered as well as a queue for internal events.
YAKINDU Statechart Tools 3.5.3 (Mar 29, 2019)
This release adds in-event queue support for C and Java code generators as well as some usability improvements.
In-event queue support for C and Java code generator
Similar to the C++ code generator, C and Java code generators now also support an additional event queue for incoming events if the statechart is event-driven. To enable it, set the
inEventQueue option of the
GeneratorOptions (in Java
GeneralFeatures) to
true. If an operation callback or function is executed by the state machine and that function raises an event, this event will be appended to the in-event queue. The state machine’s API will remain unchanged. After the origin event was processed, all events in the in-events queue will be processed automatically in the order they were raised.
Usability
We added two more buttons to the
simulation view to easier restart simulation runs:
-
(Terminate and Relaunch) : Terminates the current simulation and runs it again from the start
-
(Restart): Starts a new simulation while keeping the current one active
The
generator model now suggests a quick fix in case the specified target project does not exist:
Miscellaneous
In addition, this release contains the following changes:
- Fixed handling of transitions with multiple exit point specifications
- Fixed a bug in C# code generator regarding operation calls to react methods
- Fixed a bug in C code generator causing the RequiredHeader.h to be not included when
tracing is activated
- C++ code generator now uses
strcmp for comparing strings
- The Java domain now also takes interface methods without explicit
public modifiers into account
YAKINDU Statechart Tools 3.5.2 (Feb 28, 2019)
This release focuses on stability and performance, especially in the C/C++ domain.
C/C++ Domain
The transformation of C/C++ code does not rely on the C/C++ indexer to be finished anymore. Especially in C++ projects, the side effects were
sporadically unresolved types. When the transformation is invoked while the C/C++ indexer is running, indexer information is discarded and header files get parsed again. This also means that SCT can be used with the C/C++ indexer being disabled, which is in some cases necessary due to performance reasons.
We also improved the runtime
performance of the C/C++ transformation dramatically which is particularly noticeable in C++ projects with the C/C++ indexer being disabled.
The C/C++ code generator now prints
includes in the same order as they are defined in the statechart model. In that way, the user can influence the generated include order directly in the statechart model. The code generator also does not resolve symbol links on its own anymore.
The
content assist for import statements shows header files from the workspace first, before showing system headers.
Generator Model Wizard
We added an option to install more generators from within the generator model wizard. Using this option, the install wizard opens with a list of available code generators from our
Labs update site.
Example Wizard
The examples delivered with YAKINDU Statechart Tools now contain information about requirements to other features. This information is read out in the example wizard and an
Install Dependencies button is shown if a required features are missing. Clicking on this button opens the install wizard with the required features being preselected.
Java Domain (Beta)
It is now possible to use
inner classes and
enumerators in Java domain statecharts.
We removed some useless entries from the content assist. The content assist for import statements shows own Java classes first, before showing JRE classes.
Miscellaneous
In addition, this release contains
- a fix for a bug that caused the image generator to
not render transition and region priorities when the model was closed
- a fix for a bug that caused the Snapshot view to not open properly
- a fix for a bug when renaming elements from statechart interfaces
- better error and assert messages in SCTUnit
YAKINDU Statechart Tools 3.5.1 (Feb 04, 2019)
This release focuses on stabilization of the SCXML and Java domains.
SCXML Domain
Statecharts with multiple choices in different composite states are now handled properly.
We also fixed a bug in the simulation of SCXML statecharts in which execution slots could not be properly resolved.
Java Domain
We added a bunch of new features to the Java domain and also improved performance and stability.
We added target type inference to our type system. This means, you can now write the following:
var song : Optional<Song> = Optional.empty()
In this case, the type inferer will deduce that
Optional.empty() returns an
Optional of type
Song.
Java class constructors are now transformed into static
new(...) methods. This means, you can now create new objects like this:
var song : Song = Song.new("mysong.wav")
Changes in imported Java classes are now directly reflected in the statechart, so you do not need to re-load the statechart model anymore.
We also improved the performance of the Java domain significantly, so it can be finally used in larger projects.
Miscellaneous
In addition, this release contains
- a better positioning of transition priority numbers. In particular, choice elements are no more occluded with transition priorities.
- better error messages where generic types are involved.
YAKINDU Statechart Tools 3.5.0 (Jan 22, 2019 )
This release adds a rich set of new and noteworthy features:
- Deep Java integration (YAKINDU Statechart Tools Professional Edition)
- Tracing callbacks for C++ and Java (YAKINDU Statechart Tools Standard Edition)
- Qt C++ code generator (YAKINDU Statechart Tools Labs)
- In-event queue for C++ code generator (YAKINDU Statechart Tools Standard Edition)
We upgraded the underlying Eclipse platform to the new Eclipse 09-2018 release.
This will be the last release of YAKINDU Statechart Tools that supports 32-bit versions since the Eclipse Foundation decided to drop 32-bit with the 12-2018 release (
https://bugs.eclipse.org/bugs/show_bug.cgi?id=536766
). However, you will still be able to install YAKINDU Statechart Tools into an older 32-bit Eclipse version via our update site - only the bundled products won’t support 32-bit in the future.
Deep Java integration (beta)
After more than a year of work, we are proud to present the first beta release of deep Java integration in YAKINDU Statechart Tools. It allows you to directly access Java APIs in your statechart, and it hence facilitates an incorporation of state machine modeling in your Java development process. The beta version contains the following features:
- You can import Java classes, interfaces and enums in your statechart and use them for your statechart variables.
- You can access all public and static members, like variables and methods directly from the statechart. This avoids lots of boilerplate code.
- Java methods that are used in your statechart will be called during simulation. This avoids the cumbersome mocking of return values in the simulation view.
You can read more and watch a video in the following blog post:
https://blogs.itemis.com/en/statechart-modeling-for-java-development
.
Tracing callbacks for C++ and Java
The tracing feature enables the generation of tracing callback functions for Java and C++. We added a new feature to the generator model where you can configure the tracing events you are interested in:
feature Tracing {
enterState = true
exitState = true
}
The
enterState parameter specifies whether to generate a callback function that is used to notify about state-entering events, and the
exitState parameter specifies whether to generate a callback that is used to notify about state-exiting events.
Qt C++ code generator
With the SCXML domain (
https://blogs.itemis.com/en/taking-scxml-to-the-next-level-with-yakindu-statechart-tools
), we already have a powerful and flexible way to integrate YAKINDU Statechart Tools into Qt (
https://www.qt.io/
) applications. But there are still use cases where you can’t use the Qt SCXML Interpreter. That is why we started the development of a Qt C++ code generator and released a first version via our YAKINDU Statechart Tools labs update site.
The Qt specific flavor of the C++ code generator makes use of Qt signals and slots. So the generated state machine can easily be integrated into Qt applications using this mechanism. The generated statemachine inherits from
QObject. _A _QTimer-based implementation of a timer service is generated, if the statechart makes use of time triggers.
An example of the Qt C++ code generator together with a simple QML user interface is available via our example wizard.
In-event queue support for C++ code generator
The C++ code generator now also supports an additional event queue for incoming events if the statechart is event-driven. To enable it, set the
inEventQueue option of the
GeneratorOptions feature to
true. If an operation callback or function is executed by the state machine and that functions raises an event, this event will be appended to the in-event queue. The state machine’s API will remain unchanged. After processing of the origin event is completed, all events in the in-events queue will be processed automatically in the order they were raised.
To enable the in-event queue, add the following generator option to your
.sgen file:
feature GeneratorOptions {
inEventQueue = true
}
Miscellaneous
- We improved the generated code in terms of readability and removed superfluous parts.
- For the C code generator, the definition of
sc_null changed in
sc_types.h since the existing definition clashes with certain C compilers.
You will have to regenerate the
sc_types.h
file in your workspace to remove compile errors.
- We fixed several bugs in the SCXML domain and added a detection for endless loops for invalid models that contain dead locks.
YAKINDU Statechart Tools 3.4.0 (Aug 20, 2018)
This release comes with a pile of new cool features:
-
Model Search (Standard and Professional Edition): You can now search for statechart elements; even better, you can search for references of events, variables and so on.
-
SCXML Domain (Professional Edition): The
SCXML
domain allows to generate SCXML files from your statechart. Also, the statechart execution semantics during simulation is the same as specified in the SCXML Standard. And of course you can use SCTUnit for testing out of the box.
-
SCTUnit for C Domain (Professional Edition): You can now use the SCTUnit testing framework together with C domain statecharts, i.e. in your unit tests you can access all C elements which your statechart can access via its imported header files.
Model Search
The larger the model, the greater the need to quickly search for elements, for example, all states with a given name resp. name pattern, all occurrences of a certain variable, etc. This is now possible with the new model search integrated in the Eclipse search dialog:
The model search allows you to use regular expressions and to filter for the kind of elements you want to search for. Once the search is performed, its results are listed in the search view where you can quickly navigate to the corresponding statechart elements.
A similar but slightly different use case is to search for all references of an element. You can find this option now in the context menu. The results will be listed in the same view as for the standard model search.
SCXML Domain
This version of YAKINDU Statechart Tools comes with an SCXML domain made to facilitate generating SCXML files from CREATE Statecharts. SCXML, short for
Statechart XML, is a statechart interchange format based on XML,
standardized by the W3C
. All states, events, variables and so on are defined in the XML. SCXML relies on external engines to execute the statechart according to the standard, which allows a statechart defined in SCXML to be highly portable. Like other XML based formats, it is only an interchange format and hence not really suitable for direct editing.
YAKINDU Statechart Tools Professional Edition with its SCXML domain allows you to design and verify statecharts exactly according to the SCXML standard. The built-in simulation engine of YAKINDU Statechart Tools Professional Edition was adopted to reflect the execution semantics of SCXML correctly. And of course, the SCTUnit framework takes the SCXML domain into account as well, so you can be sure that the test results reflect the behavior of the SCXML engine of your choice.
To see everything in action we have added an example to our example wizard. This example was taken from the
Qt examples
and modeled with YAKINDU Statechart Tools. It contains a traffic light statechart which is on-the-fly transformed into an SCXML file. You can edit, simulate and test the statechart as you are used to in YAKINDU Statechart Tools. Additionally, the example comes with some Qt code, so you can run it in your Qt environment and see the traffic light in action.
Speaking of our example wizard, we also put some effort here to provide a cleaner, more structured appearance.
SCTUnit for C Domain
We have adopted our testing framework SCTUnit to also work with C domain statecharts. This means, you can now write unit tests for your C statecharts in SCTUnit, execute them, and also generate GTests, for execution on a build server, for example.
In SCTUnit you can easily mock the environment your state machine is interacting with by raising events or mocking operation results and then verify corresponding state changes or outgoing events. When writing SCTUnit tests for your C statechart you can access all C elements (variables, operations, datastructures) that are also made accessible in your C statechart by the imported header files.
We have added an SCTUnit test suite to our coffee machine example which you can find in our example wizard. Executing the test suite will also reveal our coverage view showing you which states and transitions have been covered by your tests.
Miscellaneous
Apart from these new features we also worked on many smaller improvements, bug fixes and better performance:
Usability:
- Added a new page to the statechart creation wizard that shows a description text for the selected statechart domain, so you can better understand what this domain stands for
- Improved error message when generator model refers to non-existing statechart
- Show error message if region contains an unnamed and a ‘default’ named entry
- Add validations and content assist for entry/exit points
- New statecharts will be now annotated with @EventDriven and @ChildFirstExecution per default
- Added validation rule for synchronization nodes that contain outgoing triggers
Bugfixes:
- Fixed strange positioning of transition arrows at exit nodes
- Fixed a bug which in certain situations made synchronization nodes being traversed while not all incoming states were active
- Fixed several problems with toggling the documentation mode
- Fixed usage of equally named Java operations from different interfaces during simulation
- Fixed “<” and “>” signs being replaced with 0 and 2 in C# code generation
- Removed unused functions from generated event driven Java code
- Removed unused functions from generated event driven C++ code
- Fixed rename refactoring via context menu for Linux
- Fixed several scoping issues in SCTUnit
- Fixed problem in SCTUnit when used with cycle-based statecharts
- Several improvements for SCTUnit C++ generator
- Make C++ methods defined inline in class definition available in C/C++ domain
- Fixed calling function pointers from structs in C/C++ domain
Performance / Stabilization:
- Some performance improvements for pinned definition section
- Fixed a problem that caused a deadlock in certain situations
- Fixed refreshing/updating of references when files get deleted/added
YAKINDU Statechart Tools 3.3.0 (Mar 26, 2018)
In this release our team closed 126 issues in total. Here are the new and noteworthy changes:
Statechart image generator (Standard and Professional Edition):
The statechart image generator renders a statechart and all its subdiagrams, if any, as image files. The generator supports several pixel-based and vector-based image formats. It is configured via a generator model, just like all the other YAKINDU Statechart Tools generators:
GeneratorModel for create::images {
statechart CoffeeMachine {
feature Outlet {
targetProject = "coffeemachine"
targetFolder = "images"
}
feature Renderer {
format = "svg"
}
}
}
Each time the underlying CoffeeMachine statechart is changed, this will create SVG images of the statechart in the folder “images” in project “coffeemachine”.
SCov - Test Coverage Tracing for SCTUnit (Professional Edition)
SCov is the new model coverage feature and part of YAKINDU Statechart Tools Professional Edititon. When a SCTUnit test is executed,
SCov will automatically trace all model elements that are executed during a test run. A model element that is fully executed is colored in green, elements that are not executed are colored in red and partly executed model elements are colored in yellow.
The first version supports state activation and transition coverage. Coverage of state local reactions is currently not supported. The upcoming version will also take local reactions into account.
MISRA Short Identifiers (Professional Edition)
The C Domain now offers a further annotation:
@ShortCIdentifiers helps you to keep the generated code compliant to rules which require C identifiers not to be longer than 31 characters. To achieve this, instead of shortening names which are part of a statechart’s API, YAKINDU Statechart Tools gives feedback about the names that will be generated and warns if any user input results in C Code that is non-compliant with the 31 character rule. This puts the user in charge of the naming scheme and keeps the resulting C identifiers predictable.
Miscellaneous
-
Usability improvements: We improved the usability of the graphical editor. For example, dithering connection anchors are removed (link) to have a more robust connection routing layout.
- New built-in variables for the generator model: We added two new variables that can be used in an arbitrary generator model, for instance, to print a hash code in the generated file comment.
- bq.
SHA256 (String): The hash of the referenced statechart file.
- bq.
SCTFILE (String): Path to the statechart file relative to the workspace.
YAKINDU Statechart Tools 3.2.0 (Jan 11, 2018)
For this release, the YAKINDU Statechart Tools team fixed 66 Standard Edition and 28 Professional Edition issues. Apart from several bug fixes, we added some great new features:
-
Pinned diagram editor: The editor for the statechart definition section can be pinned and collapsed now.
-
Reworked simulation view: Better support for working with parallel simulation sessions and time triggers.
-
Statechart image generator: Automatically export raster or SVG images for statechart models and subdiagrams.
-
Built-in variables for the generator model: Built-in variables like USER, SCTVERSION and TIMESTAMP can be used in the generator model.
-
C++ domain (beta): First beta release of deep C++ integration is available. C++ headers can be accessed from the statechart model now.
We also changed the license management for this release. After 30 days of trial you
need a valid license file for non-commercial use now. YAKINDU Statechart Tools still is and always be free of charge for non-commercial and academic use. You can apply for a non commercial license here:
https://info.itemis.com/yakindu/statecharts/non-commercial/order/
Pinned diagram editor
By default, a statechart’s definition section is positioned at the left-hand side of the canvas, and it is part of the diagram. Now the definition section comes with an option to pin it to the left-hand side of the view. In order to pin the definition section, you simply click on the small decorator icon in the upper-left corner of the area. This feature has to be enabled first via
Window / Preferences / YAKINDU Statechart Tools / Diagram Appearance / Enable pinning of definition section.
New Simulation view
We completely reworked the
Simulation view to ease working with parallel simulation sessions. The
Simulation view now provides a drop-down box that lists all running sessions.
Resume, Pause, Stop and
Single step actions can be accessed directly from the view. Furthermore, the current simulation time is now shown. This is especially useful when working with time triggers.
Built-in variables for the generator model
With the October release 3.1.0 we introduced
properties and expressions for the generator model . We extended this feature in the current version with a set of meaningful built-in properties that can be used within expressions:
- SCTVERSION: Returns the current version of YAKINDU Statechart Tools
- TIMESTAMP: Returns the current date and time as a localized string
- USER: Returns the name of the current user
- HOSTNAME: Returns the host name of the machine
These properties can be used within generator model expressions, for example, to add timestamp, user, and version to the license header in the generated code.
feature LicenseHeader {
licenseText = "Generated on " + TIMESTAMP + " with YAKINDU Statechart Tools " + SCTVERSION
}
This feature produces the following output:
/* Generated on 11.12.2017 17:08:14 with YAKINDU Statechart Tools 3.2.0 */
C++ Domain (beta)
This release contains the first version of the deep C++ integration feature. It is now possible to import C++ headers and use C++-specific language concepts directly from within a statechart model. Detailed documentation and examples will follow soon.
Miscellaneous improvements and bug fixes
- Diagram syntax coloring can be activated via _Window / Preferences / YAKINDU Statechart Tools / Diagram Appearance / Syntax Coloring
- Updated documentation regarding the execution semantics of child-first/parent first and reactions
- Keyboard shortcut [Ctrl+0] resets the zoom factor
- Region priorities are now shown on the canvas
- The expression language now supports postfix increment and decrement operations
- Code generators check whether callback interfaces are set
- SCT is now fully compatible with Java 9
YAKINDU Statechart Tools 3.1.0 (Oct 4, 2017)
This release comes with several bug fixes and the following main features:
- Using properties and expressions in generator models
- Named parameter calls
- Option to skip generation of library files
- New
online documentation
Using properties and expressions in generator models
An generator model may assign values to properties and later use these properties in expressions. The following sample generator model uses the
var keyword to declare the properties
projectName,
version,
isBeta, and
generateTimerServce with their respective types and default values.
GeneratorModel for create::java {
//Variables can be overridden from command line interface:
var projectName : string = "light_switch_series"
var version : string = "1.0"
var isBeta : boolean = true
var generateTimerServce : boolean = true
statechart myStateAutomaton {
feature Outlet {
targetProject = projectName
targetFolder = "src-gen/" + version + (isBeta ? "beta" : "")
libraryTargetFolder = "src"
}
feature GeneralFeatures {
TimerService = generateTimerServce
}
}
}
The model then uses these values in
feature clauses by referring to the properties: The values assigned to properties are
default values only and can be overridden from the headless code generator like this:
scc -m myGenmodel.sct -v version=2.0;isBeta=false
The name/value pairs specified by the -v option would override the corresponding default values of the properties in the generator model.This is a very flexible way to tailor the code generator within a headless build.
Read more about this feature in our
user guide .
Named parameter calls
Now you can can use named parameters when calling an operation. Consider the following operation declaration:
operation myOperation(xValue : int, yValue : int) : void
This can be called with name parameters like this:
myOperation(xValue = 27, yValue = 42)
Named parameters make their order irrelevant. The following call is semantically equivalent to the one above:
myOperation(yValue = 42, xValue = 27)
While an operation call with named parameters is longer than the equivalent call with positional parameters, named parameters are a great means for self-documenting code (especially if the parameter names are more telling than in the example above).
Option to skip generation of library files
The
Outlet feature now has an option to skip the generation of library files. This is useful to prevent the generation of a new library file when an existing one should be used:
feature Outlet {
targetProject = projectName
targetFolder = "src-gen/"
libraryTargetFolder = "src"
skipLibraryFiles = headless ? true : false
}
skipLibraryFiles (Boolean, optional): If you wish to exclude the static files from the code generation, i.e. those that are put into the
libraryTargetFolder, you can set this value to
true. If the value is
false or not specified at all, the files are generated as usual. Currently supported for the Java, C and C++ generators.
Miscellaneous improvements and bug fixes
Usability improvements:
- Add a checkbox "save automatically" to the save dialog when running a simulation
- Perspective switch for "Debug As"
- Error markers of subdiagrams are not propagated to parent diagram
- “Run As” context menu action available in diagram
- Implicit imports for active(State) statements
Code generation improvements:
- “Effective C++” compliant code
- Removed unused includes for cycle based state machines
- Provide a constant that provides the maximum number of parallel time events of a state machine
Bug fixes:
- [Performance] The system still slows down more and more for each successive single-step
- Content assist on transitions and states shows implicit variable "period"
- Missing validation rule for top-level regions without entry
YAKINDU Statechart Tools 3.0.0 (Jul 18, 2017)
This release is the first major release introducing the YAKINDU Statechart Tools
Standard and
Professional Editions.
In the last years, YAKINDU Statechart Tools has become more and more popular. This is shown by an ever increasing number of users who use the tool for both commercial and non-commercial purposes, e.g. in academic research. This goes hand in hand with increasing demand for new features and professional support.
In addition to this continuous growth, we also want to ensure sustainable support for the future. So the
Standard Edition complements the
Professional Edition and we believe that both editions better address our users demand for statechart modeling and development solutions. Both editions are intended for commercial use. For academic and non-commercial use free licenses are available.
The
Standard Edition comes with:
- statechart unit testing support – a widely requested feature (BETA)
- support for declarative execution semantics
- usability improvements
- code generator improvements
The
Professional Edition is built on top of the
Standard Edition. Thus, all the new features available in the Standard Edition, like our testing framework
SCTUnit
, are also available in the Professional Edition. In addition to that, the Professional Edition provides a tight
integration of statecharts with C code
as well as the possibility to use
breakpoints and snapshots
for debugging your state machine.
The
Professional Edition and comes with the following new features and improvements:
- possibility to import C system headers using the deep C integration
- very large header file support (also deep C integration)
- statechart unit testing support - a widely requested feature (BETA)
- support for declarative execution semantics
- usability improvements
- code generator improvements
Besides fixing several smaller issues, we took our time in reworking some internals of the deep C integration, especially when it comes to handling header imports. The most notable difference for the user is the possibility to include systems headers in your statechart model.
As you may have noticed the import syntax slightly changed. The preferred way now is to use a string literal to import a header file. However, the old syntax is still supported, but deprecated.
YAKINDU Statechart Tools are used in many different application domains with different project sizes. Especially in the automotive domain, when dealing with large AUTOSAR models, it is not uncommon to have thousands of source files with sizes up to several MBs with hundreds of thousand of declarations. In order to provide a very good user experience while editing statecharts and also for the code generators, we reworked our indexing infrastructure which is now remarkably faster while using less memory.
SCTUnit - The Testing Framework for State Machines
With this release, we introduce a beta version of our testing framework SCTUnit. SCTUnit allows test-driven development of CREATE Statechart Models. These tests can be executed directly within your IDE to check if the model behaves as expected. It also generates unit tests for Java, C and C++.
Features that can be used in SCTUnit are:
- Execute tests directly in your IDE
- Code generators for C/C++ (
GTest
&
GMock
) and Java (
JUnit
&
Mockito
)
- Mocking operation return values
- Verifying operation calls and their parameters
- Virtual Time - easy testing of time triggers
For more information, see our
online documentation
.
Statechart Execution Semantics
Users now specify the concrete variant of execution semantics in the statechart itself. In previous versions you specified
cycle based or
event driven semantics using run configurations. Now this is specified using so called annotations. Annotations are also used to specify if the execution order in a hierarchical statechart chart should be
parents-first or
child-first. For more information, see our
online documentation
.
Filter for Generator Models
In some cases it might be inconvenient to execute all generator models during a project build, especially if you have different generator models for different use-cases, for example, headless execution. To provide a more fine-grained control of which ones should be executed, it is now possible to exclude particular generator models or entire folders from the automatic build execution in the project’s properties.
Deep C Integration Improvements
- Support for variadic functions (variable length argument lists)
- Simulation of C statecharts only shows used elements in simulation view
Usability Improvements
- Choice nodes can now be resized with a fix aspect ratio
- Perspective switches back to modeling view when simulation terminates
- Note attachments can be deleted now
- In simulation view, operations have a distinctive icon now
- In generator model creation wizard, the order of statechart models is aligned with the one in project explorer
- Fading time for snap-to-grid support lines is reduced for better user experience
- Warning for sgen files that do not contain any entries
- It is now possible to use binary literals like ‘0b01011’ as integer values
- Hint for content assist in definition section
- Double click drag tracker added for notes
- Color of active states in simulation is changed to yellow now
- Disabled auto reveal on selection
Code Generation Improvements
- Removed magic numbers in generated C code
- Fixed isActive() method to return correct values for inactive state machines
- For C++ code generation, StatemachineInterface.h is placed into library target folder
Bug Fixes
- Fix display of error markers
- Fix TODO and FIXME markers
- Bug in AbstractTypeSystem.remove(Type)