Skip to content

Repository files navigation

iets3.opensource

Build instructions

Using Gradle

If you want to build the project, no prerequisites are required. Run ./gradlew build from the checkout directory. This will download the required mbeddr platform language library from the itemis Nexus repository. When the build finishes, you can open the project in MPS in <iets3.opensource>/code/languages/org.iets3.opensource

To publish this project's artifacts to the Maven local repository, run ./gradlew publishToMavenLocal.

If you want to use a custom version of mbeddr with Gradle, publish its artifacts to the local Maven repository (consult the mbeddr documentation).

Supported MPS versions

The latest supported MPS version is master, plus the two previous versions on maintenance branches.

What does support mean in this case?

We take care of porting changes done in older supported MPS versions to the newer ones. For details, see the wiki.

What MPS versions are currently supported?

MPS versionNexusbranch
Masterartifacts.itemis.cloudmaster
2026.1artifacts.itemis.cloudmaintenance/mps20261
2025.1artifacts.itemis.cloudmaintenance/mps20251
2024.1artifacts.itemis.cloudmaintenance/mps20241

Documentation

Community

Slack

Ask your questions about KernelF and talk to other users and authors of the IETS3 language library on the public Slack channel.

Opening the project in MPS

Open the folder [ROOT]/code/languages/org.iets3.opensource in MPS, where ROOT is the root folder of this project.

Project Structure

The project is separated into the following virtual packages:

_build

NameDescription
build-allScripts.xmlThis Ant script generates the overall build script that also contains the script for running the tests from the command line.
prebuild.xmlThis Ant script contains the analysis language, core base, and expressions base.
build-languages.xmlThis Ant script contains all languages and generates the finished zip file.
build-distro.xmlThis Ant script combines the files from the mbeddr platform with the files from the previous script.
build-tests.xmlThis Ant script contains all the test languages and solutions and also runs the KernelF generated tests as part of the build. This is achieved by including an instance of RunKernelFGeneratedTests.
build-testInterpreter.xmlThis Ant script generates and builds all project components to run the interpreter on test cases, without generating code for the tests. All test cases (specified per solution here) are not generated but directly run using the interpreter.

analysis

NameDescription
test.org.iets3.analysis.baseTest for solver supoprt.
test.org.iets3.analysis.base.solvableLanguage used in the tests.
org.iets3.analysis.solversupport.utilSupporting classes for analysis with solver.
org.iets3.analysis.base This language contains basic concepts and interfaces and a plugin solution related to solvers.
org.iets3.analysis.logic.operatorThis language provide operators to build model checking rules.

assessment

NameDescription
org.iets3.core.assessmentIt contains an AssessmentQuery to find untraced elements. It can be used inside an instance of Assessment inside an AssessmentContainer. It also contains a generic trace query to find traced elements.

contextfilter

NameDescription
org.iets3.contextfilter.pluginThis solution provide the plugin suport for the context filtering.
org.iets3.contextfilterThis language allows for selecting references (aka instances) of selected nodes in a projection .

comp (component)

NameDescription
org.iets3.components.core.interpreterIt contains the interpreter for the components language.
org.iets3.components.core.sandboxIt is a sandbox for components.
org.iets3.components.pluginIt contains a custom project view that displays all the components in the project.
tests.ts.components.coreIt contains test cases related to the components language.
org.iets3.components.coreThis language adds support for components (KernelF reference: page 24).
org.iets3.components.functionalThis language adds support for functional components.
org.iets3.components.hardwareThis language adds support for hardware components.
org.iets3.components.reqIt adds support for components in requirements.
test.iets3.component.attributeThis language adds test attributes to components (see instances in components tests).

core

NameDescription
org.iets3.core.pluginIt contains a custom project view that displays all nodes related to the specification.
tests.org.iets3.core.commentsIt contains tests for comments.
org.iets3.core.attributesIt contains the language that implements attributes for components.
org.iets3.core.baseThis language contains basic concepts/interfaces and a plugin solution related to this project.
org.iets3.core.usersThis language allows specifying users and user directories. Not used anywhere.

expr

The package genjava contains interpreters for generating Java code from KernelF. It also included an example for generating Java code from state machines.

Core language constructs (lang-core)

This package contains the following parts of KernelF (full paper, reference) including runtime solution and interpreters:

PackageNameDescription
org.iets3.core.expr.baseKernelF base languagereference
org.iets3.core.expr.collectionssupport for lists, maps, setsKernelF reference: page 5
org.iets3.core.expr.lambdaanonymous functions lambda)KernelF reference: page 6
org.iets3.core.expr.pathpath expressions (record)KernelF reference: page 61
org.iets3.core.expr.replread–eval–print loopKernelF reference: page 12
org.iets3.core.expr.simpleTypessimple types (bool, numeric, string)KernelF reference: page 2
org.iets3.core.expr.simpleTypes.testssimple type testsIt contains tests for simple types.
org.iets3.core.expr.testsexpression test languageIt implements a language for testing expressions.
org.iets3.core.expr.topleveltop level expressionsIt contains expressions that can be used at the top level (records, functions, constants, etc). A top level can be, for example, a Library.
org.iets3.core.expr.tracingtracingIt is a utility language that helps with tracing.

Advanced language constructs (lang-advanced)

This package contains the following parts of KernelF (full paper, reference) including runtime solution and interpreters:

PackageNameDescription
org.iets3.core.expr.adtalgebraic data types(ADT)MPS Platform Docs
org.iets3.core.expr.datadata tablesMPS Platform Docs
org.iets3.core.expr.dataflowdata flowMPS Platform Docs
org.iets3.core.expr.datetimedate typeKernelF reference: page 19
org.iets3.core.expr.docexpression documentationIt contains additional top-level expressions for documentation purposes.
org.iets3.core.expr.lookuplookup tableIt implements a lookup table that supports a lookup method that returns the cell content at the specified index. example: KernelF reference: page 17
org.iets3.core.expr.mathmath expressionsKernelF reference: page 6, MPS Platform Docs
org.iets3.core.expr.messagesmessagesMPS Platform Docs
org.iets3.core.expr.metafunctionmeta functionsKernelF reference: page 28
org.iets3.core.expr.natlangnatural language expressionstests: #1
org.iets3.core.expr.queryquery expressionsMPS Platform Docs
org.iets3.core.expr.stringvalidationstring validationThis language implements efficient string validation.
org.iets3.core.expr.temporaltemporal typeKernelF reference: page 20, MPS Platform Docs
org.iets3.core.expr.typetagstype tagsKernelF reference: page 67
org.iets3.core.expr.typetags.unitsold unitsMPS Platform Docs
org.iets3.core.expr.typetags.phyunitsphysical unitsMPS Platform Docs
org.iets3.core.expr.util#DecTabbinary decision table
org.iets3.core.expr.util#DecTreedecision treeMPS Platform Docs
org.iets3.core.expr.util#MultiDecTabmulti-criteria decision tableMPS Platform Docs
org.iets3.core.expr.util#RangeSpecifierranges

Stateful language constructs (lang-stateful)

This package contains the following parts of KernelF (full paper, reference) including runtime solution and interpreters:

PackageNameDescription
org.iets3.core.expr.mutablemutable expressionsKernelF reference: page 9
org.iets3.core.expr.processprocesses including multi-party-boolean-decisionsKernelF reference: page 27
org.iets3.core.expr.statemachinesstate machinesKernelF reference: page 10

Plugins

PackageDescription
org.iets3.core.expr.doc.pluginIt implements a custom project view for bookmarks(IBookmark).
org.iets3.core.expr.lambda.pluginIt contains refactoring actions for lambda expressions.
org.iets3.core.expr.pluginIt contains various actions related to the KernelF language.
org.iets3.core.expr.repl.pluginIt contains various actions related to REPL.

Tests

The tests are grouped into the playground, test suites and node test cases. The language org.iets3.core.expr.testExecution contains a configuration for the test execution mode (generator, interpreter).

req

This package includes all things related to the requirement documents.

PackageDescription
org.iets3.req.pluginIt contains requirement-related actions, projection modes, and a custom project view that displays all requirements in the project.
org.iets3.req.glossaryThis language allows for defining terms in glossaries, which can be referenced in requirement documents.
org.iets3.req.req.coreThis language implements requirements documents. A new document can be created with the root node RequirementsChunk.

trace

This package includes all things related to tracing (KernelF reference: page 27).

PackageDescription
test.iets3.core.tracequeryIt contains trace tests.
org.iets3.core.traceIt implements trace attributes (can be, for example, used in components).
org.iets3.core.testIt is a language for trace testing.

variability

NameDescription
org.iets3.variability.artifacts.typesystem.runtimeRuntime classes and interfaces to support org.iets3.variability.artifacts.typesystem.
org.iets3.variability.artifacts.baseThis language contains basic concepts and interfaces related to variation point in artifacts.
org.iets3.variability.artifacts.baselineThis language allows for removing variability from artifacts (baselining).
org.iets3.variability.artifacts.typesystemThis language provide support for verification of artifact with variability.
org.iets3.variability.artifacts.vanguardThis language contains basic concepts and interfaces related to variation point in artifacts. NOTE: It will be merged into org.iets3.variability.artifacts.base.
org.iets3.variability.base.ideThis solution provides contribution to the IDE, e.g the visualisation of SkeletonTree used by variability algorithms as datas structure.
org.iets3.variability.baseThis language contains common concepts to support feature models, configuraions and artifacts.
org.iets3.variability.configuration.baseThis language allows for defining configurations of feature models.
org.iets3.variability.featuremodel.baseThis language allows for modeling feature models.
org.iets3.variability.os.sandboxThis sandbox contains some variability modeling examples.
org.iets3.variability.base.devkitThis devkit exposes all basic variability functionalities.

Devkits

The following devkits are available:

PackageContents
org.iets3.core.expr.interpreter.devkitinterpreters for core expressions
org.iets3.core.expr.base.devkitcore expressions + their interpreters
org.iets3.core.expr.core.devkitbase devkit + Read–Eval–Print Loop(REPL) + tracing
org.iets3.core.expr.advanced.devkitcore expressions + interpreters
org.iets3.core.expr.stateful.devkitstateful expressions + interpreters
org.iets3.core.expr.repl.devkitRead–Eval–Print Loop(REPL)
org.iets3.components.devkitcomponents
org.iets3.components.functional.devkitcomponents + functional components
org.iets3.components.hardware.devkitcomponents + hardware components
org.iets3.core.expr.genjava.core.devkitjava generation of core expressions
org.iets3.core.expr.genjava.advanced.devkitjava generation of advanced expressions
org.iets3.core.expr.genjava.stateMachineExample.devkitjava generation of state machine example
org.iets3.core.expr.genall.core.devkitall core generation devkits
org.iets3.core.expr.genall.advanced.devkitall advanced generation devkits
org.iets3.reqrequirements

Creating a PR

When you open a PR, the build on TeamCity needs to be approved by a colleague at itemis, and a PR review is necessary. If this doesn't happen, please ask in the Slack channel. Often, builds fail at the following step: Check for dirty files. If that happens, some migrations were not executed in the project. Run ./gradlew migrate remigrate or gradlew.bat migrate remigrate on the command line to execute them and commit the changes. You can also copy the diff from the build log and apply it with git apply as a patch. You need to strip the line numbers, though:

  • Mac: pbpaste | sed 's/^.\{13\}//' | git apply
  • Windows Powershell: Get-Clipboard | ForEach-Object { $_ -replace '^.{13}', '' } | git apply
  • Linux solution 1: xclip -o | sed 's/^.\{13\}//' | git apply
  • Linux solution 2: xsel --clipboard --output | sed 's/^.\{13\}//' | git apply

Automatic Updating Of Dependencies

The Renovate bot updates the dependencies automatically for the master branch or optionally other branches and creates PRs for those changes. The configuration can be found at renovate.json5. The documentation for the configuration can be found at https://docs.renovatebot.com/configuration-options/.

About

Open Source Parts of IETS3

Topics

Resources

Stars

53 stars

Watchers

22 watching

Forks

Releases

Packages

Used by

Contributors

Languages