123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- h1. Generating Code
- Code generation can be configured by providing a generator configuration model (a text file with suffix __.sgen__) that defines the code generator to use and the generator specific parameters.
- The code generator can be executed via the context menu of the __.sgen__ files (__right click > Generate statechart Artifacts__).
- h2. Common Generator Configuration
- A minimum generator model looks as follows:
- pre. GeneratorModel for yakindu::c {
- statechart MyStatechart {
- feature Outlet {
- targetProject = "MyProject"
- targetFolder = "src-gen"
- }
- }
- The generator to use is configured by specifying the corresponding generator id (__yakindu::c__ in the example).
- Available generator ids are:
- * __yakindu::c__ Generates C Code
- * __yakindu::cpp__ Generates C++ Code
- * __yakindu::java__ Generates Java Code
- * __yakindu::generic__ Executes Generators from the workspace
- * __yakindu::xpand__ Executes Xpand templates form the workspace
- For each statechart that shall be processed, a configuration block must be provided that contains the configuration for the generator features (starting with keyword __statechart__ followed by the name of the statechart).
- Every generator requires the __Outlet__ feature that defines the target project and folder where the output shall be written.
- Depending on the chosen generator, more features might be required.
- h2. Using the Generator Model Wizard
- The wizard for generator models is available under __New > Yakindu > YAKINDU statechart Generator Model__.
- It allows to select statecharts that should be processed and a generator type to use.
- The wizard will create a new generator model file with reasonable defaults for the generator's configuration features.
- h1. Generic Xpand Generator
- The generic Xpand Generator (Generator id __yakindu::xpand__) allows to execute Xpand templates located inside the workspace.
- h2. Configuration
- The generator requires a __Template__ configuration feature that defines the Xpand template that shall be executed.
- pre. GeneratorModel for yakindu::xpand {
- statechart MyStatechart {
- feature Template {
- templateProject = "MyXpandProject"
- templatePath = "org::yakindu::sct::generator::xpand::Main::main"
- }
- feature Outlet {...}
- }
- }
- h2. Implementation
- The Xpand template is expected to have the following entry method signature:
- pre. «DEFINE main(sgen::GeneratorEntry entry) FOR sexec::ExecutionFlow-»
- «ENDDEFINE»
- h2. Xpand Generator Project Wizard
- A wizard for Xpand-based generators is available under __New > Yakindu > YAKINDU Xpand Generator Project__.
- It will create a new project with all needed library dependencies and a hello world template to generate artifacts from a statechart.
- h3. Exporting the Generator as Plugin
- The wizard provides options to setup the new generator project as exportable plugin.
- Therefor, a generator id, a generator name and a generator class name must be specified. Optionally, a feature library can be generated to use custom configuration options with the generator.
- h1. Generic Workspace Generator
- The generic Workspace Generator (Generator id __yakindu::generic__) allows to execute Java classes located inside the workspace.
- h2. Configuration
- The generator requires a __Generator__ configuration feature that defines the Java class that shall be executed
- pre. GeneratorModel for yakindu::generic {
- statechart MyStatechart {
- feature Generator {
- generatorProject = "MyJavaProject"
- generatorClass = "org.yakindu.sct.generator.MyGenerator"
- }
- feature Outlet {..}
- }
- }
- h2. Implementaion
- The Java class that is referenced from the configuration must extend __org.yakindu.sct.generator.core.AbstractWorkspaceGenerator__.
- The signature of the generator entry method looks as follows:
- pre. public class MyGenerator extends AbstractWorkspaceGenerator {
- @Override
- public void generate(ExecutionFlow flow, GeneratorEntry entry) {
- }
- }
- If you prefer to implement the generator using Xtend, the following signature is required:
- pre. class Bla extends AbstractWorkspaceGenerator {
- override generate(ExecutionFlow flow, GeneratorEntry entry) {
- }
- }
-
- h2. Generic Java Generator Project wizard
- A wizard for Java/Xtend-based generators is available under __New > Yakindu > YAKINDU Workspace Generator Project__.
- It will create a new project with all needed library dependencies and a default generator implementation.
- The type of the generator (Java or Xtend) can be chosen from the wizard.
|