Converted SLG Commons transformers to Java - step 1
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/ActivityGraphItemTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/ActivityGraphItemTransformer.java
new file mode 100644
index 0000000..ee07a46
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/ActivityGraphItemTransformer.java
@@ -0,0 +1,96 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.ChannelReceive;
+import org.eclipse.app4mc.amalthea.model.ChannelSend;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.RunnableCall;
+import org.eclipse.app4mc.amalthea.model.Ticks;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TicksTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class ActivityGraphItemTransformer extends SLGBaseTransformer {
+	private static final String UNSUPPORTED_ELEMENT = "Unsupported element inside ActivityGraph : {}";
+
+	private static final Logger LOG = LoggerFactory.getLogger(ActivityGraphItemTransformer.class);
+
+	@Inject private RunnableTransformer runnableTransformer;
+	@Inject private LabelAccessTransformer labelAccessTransformer;
+	@Inject private TicksTransformer ticksTransformer;
+
+	protected TranslationUnit _transform(final ActivityGraphItem activityGraphItem) {
+		ActivityGraphItemTransformer.LOG.error(UNSUPPORTED_ELEMENT, activityGraphItem.getClass().getName());
+		return new TranslationUnit("undefined", "", "", "");
+	}
+
+	protected TranslationUnit _transform(final RunnableCall runnableCall) {
+		return this.runnableTransformer.transform(runnableCall.getRunnable());
+	}
+
+	protected TranslationUnit _transform(final Ticks ticks) {
+		return this.ticksTransformer.transform(ticks);
+	}
+
+	public List<TicksTranslationUnit> transformAllItems(final Ticks ticks) {
+		return this.ticksTransformer.transformAllItems(ticks);
+	}
+
+	protected TranslationUnit _transform(final LabelAccess labelAccess) {
+		return this.labelAccessTransformer.transform(labelAccess);
+	}
+
+	protected TranslationUnit _transform(final ChannelReceive channelReceive) {
+		ActivityGraphItemTransformer.LOG.error(UNSUPPORTED_ELEMENT, channelReceive.getClass().getName());
+		return new TranslationUnit("undefined", "", "", "");
+	}
+
+	protected TranslationUnit _transform(final ChannelSend channelSend) {
+		ActivityGraphItemTransformer.LOG.error(UNSUPPORTED_ELEMENT, channelSend.getClass().getName());
+		return new TranslationUnit("undefined", "", "", "");
+	}
+
+	public TranslationUnit transform(final ActivityGraphItem channelReceive) {
+		if (channelReceive instanceof ChannelReceive) {
+			return _transform((ChannelReceive) channelReceive);
+		} else if (channelReceive instanceof ChannelSend) {
+			return _transform((ChannelSend) channelReceive);
+		} else if (channelReceive instanceof LabelAccess) {
+			return _transform((LabelAccess) channelReceive);
+		} else if (channelReceive instanceof Ticks) {
+			return _transform((Ticks) channelReceive);
+		} else if (channelReceive instanceof RunnableCall) {
+			return _transform((RunnableCall) channelReceive);
+		} else if (channelReceive != null) {
+			return _transform(channelReceive);
+		} else {
+			throw new IllegalArgumentException(
+					"Unhandled parameter types: " + Arrays.<Object>asList(channelReceive).toString());
+		}
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/ActivityGraphItemTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/ActivityGraphItemTransformer.xtend
deleted file mode 100644
index 63d372b..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/ActivityGraphItemTransformer.xtend
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import java.util.List
-import org.eclipse.app4mc.amalthea.model.ActivityGraphItem
-import org.eclipse.app4mc.amalthea.model.ChannelReceive
-import org.eclipse.app4mc.amalthea.model.ChannelSend
-import org.eclipse.app4mc.amalthea.model.LabelAccess
-import org.eclipse.app4mc.amalthea.model.RunnableCall
-import org.eclipse.app4mc.amalthea.model.Ticks
-import org.eclipse.app4mc.slg.commons.m2t.generators.TicksTranslationUnit
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
-
-@Singleton
-class ActivityGraphItemTransformer extends SLGBaseTransformer {
-
-	static final Logger LOG = LoggerFactory.getLogger(typeof(ActivityGraphItemTransformer))
-
-	@Inject RunnableTransformer runnableTransformer
-	@Inject LabelAccessTransformer labelAccessTransformer
-	@Inject TicksTransformer ticksTransformer
-
-	dispatch def TranslationUnit transform(ActivityGraphItem activityGraphItem) {
-
-		LOG.error("Unsupported element inside ActivityGraph : " + activityGraphItem.class.name)
-		return new TranslationUnit("undefined", "", "", "")
-	}
-
-	dispatch def TranslationUnit transform(RunnableCall runnableCall) {
-		return runnableTransformer.transform(runnableCall.runnable)
-	}
-
-	dispatch def TranslationUnit transform(Ticks ticks) {
-		return ticksTransformer.transform(ticks)
-	}
-
-	def List<TicksTranslationUnit> transformAllItems(Ticks ticks) {
-		return ticksTransformer.transformAllItems(ticks)
-	}
-
-	dispatch def TranslationUnit transform(LabelAccess labelAccess) {
-		return labelAccessTransformer.transform(labelAccess)
-	}
-
-	dispatch def TranslationUnit transform(ChannelReceive channelReceive) {
-
-		LOG.error("Unsupported element inside ActivityGraph : " + channelReceive.class.name)
-		return new TranslationUnit("undefined", "", "", "")
-	}
-
-	dispatch def TranslationUnit transform(ChannelSend channelSend) {
-
-		LOG.error("Unsupported element inside ActivityGraph : " + channelSend.class.name)
-		return new TranslationUnit("undefined", "", "", "")
-	}
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupHeaderTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupHeaderTransformer.java
new file mode 100644
index 0000000..7219c1a
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupHeaderTransformer.java
@@ -0,0 +1,100 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.function.Consumer;
+
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.Component;
+import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.xtext.xbase.lib.StringExtensions;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class GroupHeaderTransformer extends ActivityGraphItemTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private ActivityGraphItemTransformer psCallGraphItemTransformer;
+
+	public static String getModuleName(final Group group) {
+		return "groups";
+	}
+
+	public static String getFunctionDef(final Group group) {
+		return "group_" + group.getName() + "()";
+	}
+
+	public TranslationUnit transform(final Group group, final Component component) {
+		final ArrayList<?> key = CollectionLiterals.newArrayList(group, component);
+		final TranslationUnit _result;
+		synchronized (cache) {
+			if (cache.containsKey(key)) {
+				return cache.get(key);
+			}
+			TranslationUnit _translationUnit = new TranslationUnit();
+			_result = _translationUnit;
+			cache.put(key, _result);
+		}
+		_init_transform(_result, group, component);
+		return _result;
+	}
+
+	private final HashMap<ArrayList<?>, TranslationUnit> cache = CollectionLiterals.newHashMap();
+
+	private void _init_transform(final TranslationUnit it, final Group group, final Component component) {
+		it.setPath(GroupHeaderTransformer.getModuleName(group));
+		it.setCall(GroupHeaderTransformer.getFunctionDef(group));
+
+		final LinkedHashSet<String> groupItemIncludes = new LinkedHashSet<>();
+		final LinkedHashSet<String> groupItemCalls = new LinkedHashSet<>();
+
+		EList<ActivityGraphItem> _items = null;
+		if (group != null) {
+			_items = group.getItems();
+		}
+		final Consumer<ActivityGraphItem> _function = (ActivityGraphItem item) -> {
+			final TranslationUnit tmp = this.psCallGraphItemTransformer.transform(item);
+			if (((!StringExtensions.isNullOrEmpty(tmp.getExtendedIncPath()))
+					&& (!it.getExtendedIncPath().equals(tmp.getExtendedIncPath())))) {
+				groupItemIncludes.add(tmp.getExtendedIncPath());
+			}
+			if (!StringExtensions.isNullOrEmpty(tmp.getCall())) {
+				groupItemCalls.add(tmp.getCall());
+			}
+		};
+		_items.forEach(_function);
+
+		final int index = it.getExtendedIncPath().lastIndexOf(".");
+		final String trimmedIncPath = it.getExtendedIncPath().substring(0, index);
+
+		outputBuffer.appendTo("INC", trimmedIncPath, "\n//Group " + group.getName() + "----\n");
+
+		groupItemIncludes.forEach(include -> 
+			outputBuffer.appendTo("INC", trimmedIncPath, "#include \"" + include + ".h\"\n"));
+
+		outputBuffer.appendTo("INC", trimmedIncPath, "void " + it.getCall() + ";\n");
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupHeaderTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupHeaderTransformer.xtend
deleted file mode 100644
index 718775a..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupHeaderTransformer.xtend
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import java.util.LinkedHashSet
-import org.eclipse.app4mc.amalthea.model.Component
-import org.eclipse.app4mc.amalthea.model.Group
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class GroupHeaderTransformer extends ActivityGraphItemTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject ActivityGraphItemTransformer psCallGraphItemTransformer
-
-	static def getModuleName(Group group) {
-		return "groups"
-	}
-
-	static def getFunctionDef(Group group) {
-		return "group_" + group.name + "()"
-	}
-
-	def create new TranslationUnit()
-		transform(Group group, Component component) {
-
-		it.path = GroupHeaderTransformer.getModuleName(group)
-		it.call = GroupHeaderTransformer.getFunctionDef(group)
-
-		val groupItemIncludes = new LinkedHashSet<String>
-		val groupItemCalls = new LinkedHashSet<String>
-		group?.items.forEach [ item |
-			val tmp = psCallGraphItemTransformer.transform(item)
-			if (!tmp.extendedIncPath.isNullOrEmpty && !(it.extendedIncPath.equals(tmp.extendedIncPath)))
-				groupItemIncludes.add(tmp.extendedIncPath)
-			if (!tmp.call.isNullOrEmpty)
-				groupItemCalls.add(tmp.call)
-		]
-
-		// remove file extension
-		val index = it.extendedIncPath.lastIndexOf('.')
-		val trimmedIncPath = it.extendedIncPath.substring(0, index)
-
-		outputBuffer.appendTo("INC", trimmedIncPath, "\n//Group " + group.name + "----\n")
-		groupItemIncludes.forEach [ include |
-			outputBuffer.appendTo("INC", trimmedIncPath, "#include \"" + include + ".h\"\n")
-		]
-		outputBuffer.appendTo("INC", trimmedIncPath, "void " + it.call + ";\n")
-	}
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupSourceTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupSourceTransformer.java
new file mode 100644
index 0000000..2fc792b
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupSourceTransformer.java
@@ -0,0 +1,92 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.Component;
+import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.xtext.xbase.lib.StringExtensions;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class GroupSourceTransformer extends ActivityGraphItemTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private ActivityGraphItemTransformer psCallGraphItemTransformer;
+
+	public TranslationUnit transform(final Group group, final Component component) {
+		final ArrayList<?> key = CollectionLiterals.newArrayList(group, component);
+		final TranslationUnit _result;
+		synchronized (cache) {
+			if (cache.containsKey(key)) {
+				return cache.get(key);
+			}
+			TranslationUnit tu = new TranslationUnit();
+			_result = tu;
+			cache.put(key, _result);
+		}
+		_init_transform(_result, group, component);
+		return _result;
+	}
+
+	private final HashMap<ArrayList<?>, TranslationUnit> cache = CollectionLiterals.newHashMap();
+
+	private void _init_transform(final TranslationUnit it, final Group group, final Component component) {
+		it.setPath(GroupHeaderTransformer.getModuleName(group));
+		it.setCall(GroupHeaderTransformer.getFunctionDef(group));
+
+		final LinkedList<String> groupItemIncludes = new LinkedList<>();
+		final LinkedList<String> groupItemCalls = new LinkedList<>();
+
+
+		if (group != null) {
+			for (ActivityGraphItem item : group.getItems()) {
+				final TranslationUnit tmp = psCallGraphItemTransformer.transform(item);
+				if (!StringExtensions.isNullOrEmpty(tmp.getPath())) {
+					groupItemIncludes.add(tmp.getPath());
+				}
+				if (!StringExtensions.isNullOrEmpty(tmp.getCall())) {
+					groupItemCalls.add(tmp.getCall());
+				}
+			}
+		}
+
+		final int index = it.getExtendedSrcPath().lastIndexOf(".");
+		final String trimmedSrcPath = it.getExtendedSrcPath().substring(0, index);
+
+		outputBuffer.appendTo("SRC", trimmedSrcPath, (("\n//Group " + group.getName()) + "----\n"));
+
+		groupItemIncludes.forEach(include -> 
+			outputBuffer.appendTo("SRC", trimmedSrcPath, "#include \"" + include + ".h\"\n"));
+		
+		outputBuffer.appendTo("SRC", trimmedSrcPath, "void " + it.getCall() + "{\n");
+
+		groupItemCalls.forEach(call -> 
+			outputBuffer.appendTo("SRC", trimmedSrcPath, call + ";\n"));
+
+		outputBuffer.appendTo("SRC", trimmedSrcPath, "}");
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupSourceTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupSourceTransformer.xtend
deleted file mode 100644
index c32a9d0..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/GroupSourceTransformer.xtend
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import java.util.LinkedList
-import org.eclipse.app4mc.amalthea.model.Component
-import org.eclipse.app4mc.amalthea.model.Group
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class GroupSourceTransformer extends ActivityGraphItemTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject ActivityGraphItemTransformer psCallGraphItemTransformer
-
-	def create new TranslationUnit()
-		transform(Group group, Component component) {
-
-		it.path = GroupHeaderTransformer.getModuleName(group)
-		it.call = GroupHeaderTransformer.getFunctionDef(group)
-
-		val groupItemIncludes = new LinkedList<String>
-		val groupItemCalls = new LinkedList<String>
-		group?.items.forEach [ item |
-			val tmp = psCallGraphItemTransformer.transform(item)
-			if (!tmp.path.isNullOrEmpty)
-				groupItemIncludes.add(tmp.path)
-			if (!tmp.call.isNullOrEmpty)
-				groupItemCalls.add(tmp.call)
-		]
-
-		// remove file extension
-		val index = it.extendedSrcPath.lastIndexOf('.')
-		val trimmedSrcPath = it.extendedSrcPath.substring(0, index)
-
-		outputBuffer.appendTo("SRC", trimmedSrcPath, "\n//Group " + group.name + "----\n")
-		groupItemIncludes.forEach [ include |
-			outputBuffer.appendTo("SRC", trimmedSrcPath, "#include \"" + include + ".h\"\n")
-		]
-		// write group body
-		outputBuffer.appendTo("SRC", trimmedSrcPath, "void " + it.call + "{\n")
-		groupItemCalls.forEach [ call |
-			outputBuffer.appendTo("SRC", trimmedSrcPath, call + ";\n")
-		]
-		outputBuffer.appendTo("SRC", trimmedSrcPath, "}")
-	}
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/InstrumentationTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/InstrumentationTransformer.java
index 002a6af..3d4b628 100644
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/InstrumentationTransformer.java
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/InstrumentationTransformer.java
@@ -1,5 +1,6 @@
 /**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
  * 
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -9,6 +10,7 @@
  * 
  * Contributors:
  *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
  */
 
 package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelAccessTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelAccessTransformer.java
new file mode 100644
index 0000000..293c2e5
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelAccessTransformer.java
@@ -0,0 +1,37 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.slg.commons.m2t.generators.LabelAccessTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class LabelAccessTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private LabelTransformer labelTransformer;
+
+	public LabelAccessTranslationUnit transform(final LabelAccess labelAccess) {
+		final LabelTranslationUnit tuLabel = this.labelTransformer.transform(labelAccess.getData());
+		return new LabelAccessTranslationUnit(this.outputBuffer, tuLabel, labelAccess);
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelAccessTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelAccessTransformer.xtend
deleted file mode 100644
index 87737f1..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelAccessTransformer.xtend
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.LabelAccess
-import org.eclipse.app4mc.slg.commons.m2t.generators.LabelAccessTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class LabelAccessTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject LabelTransformer labelTransformer
-
-	def LabelAccessTranslationUnit transform(LabelAccess labelAccess) {
-		val tuLabel = labelTransformer.transform(labelAccess.data)
-		return new LabelAccessTranslationUnit(outputBuffer, tuLabel, labelAccess)
-	}
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelTransformer.java
new file mode 100644
index 0000000..995fef5
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelTransformer.java
@@ -0,0 +1,66 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.slg.commons.m2t.generators.LabelGenerator;
+import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class LabelTransformer extends SLGBaseTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+
+	public LabelTranslationUnit transform(final Label label) {
+		final ArrayList<?> key = CollectionLiterals.newArrayList(label);
+		final LabelTranslationUnit _result;
+		synchronized (cache) {
+			if (cache.containsKey(key)) {
+				return cache.get(key);
+			}
+			LabelTranslationUnit tu = new LabelTranslationUnit(this.outputBuffer, label);
+			_result = tu;
+			cache.put(key, _result);
+		}
+		_init_transform(_result, label);
+		return _result;
+	}
+
+	private final HashMap<ArrayList<?>, LabelTranslationUnit> cache = CollectionLiterals.newHashMap();
+
+	private void _init_transform(final LabelTranslationUnit it, final Label label) {
+	}
+
+	@Override
+	public HashMap<ArrayList<?>, LabelTranslationUnit> getCache() {
+		return this.cache;
+	}
+
+	public boolean createCMake() {
+		return this.outputBuffer.appendTo("OTHER", LabelTranslationUnit.getMakeFilePathStatic(),
+				LabelGenerator.toCMake(this.getSrcFiles()));
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelTransformer.xtend
deleted file mode 100644
index d130ead..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/LabelTransformer.xtend
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import java.util.ArrayList
-import java.util.HashMap
-import org.eclipse.app4mc.amalthea.model.Label
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-import org.eclipse.app4mc.slg.commons.m2t.generators.LabelGenerator
-
-@Singleton
-class LabelTransformer extends SLGBaseTransformer {
-
-	@Inject OutputBuffer outputBuffer
-
-	def create new LabelTranslationUnit(outputBuffer, label)
-		transform(Label label) {
-	}
-
-	override HashMap<ArrayList<?>, LabelTranslationUnit> getCache() { return this._createCache_transform }
-
-	def createCMake() {
-		outputBuffer.appendTo("OTHER", LabelTranslationUnit.makeFilePathStatic, LabelGenerator.toCMake(getSrcFiles()))
-	}
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java
new file mode 100644
index 0000000..1633866
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.java
@@ -0,0 +1,71 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableGenerator;
+import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class RunnableTransformer extends SLGBaseTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private ActivityGraphItemTransformer psCallGraphItemTransformer;
+
+	public RunnableTranslationUnit transform(final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+		final ArrayList<?> key = CollectionLiterals.newArrayList(runnable);
+		final RunnableTranslationUnit _result;
+		synchronized (cache) {
+			if (cache.containsKey(key)) {
+				return cache.get(key);
+			}
+			RunnableTranslationUnit tu = new RunnableTranslationUnit(this.outputBuffer,
+					this.psCallGraphItemTransformer, runnable);
+			_result = tu;
+			cache.put(key, _result);
+		}
+		_init_transform(_result, runnable);
+		return _result;
+	}
+
+	private final HashMap<ArrayList<?>, RunnableTranslationUnit> cache = CollectionLiterals
+			.newHashMap();
+
+	private void _init_transform(final RunnableTranslationUnit it,
+			final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+	}
+
+	@Override
+	public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+		return this.cache;
+	}
+
+	public boolean createCMake() {
+		return this.outputBuffer.appendTo("OTHER", RunnableTranslationUnit.getMakeFilePathStatic(),
+				RunnableGenerator.toCMake(this.getSrcFiles()));
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.xtend
deleted file mode 100644
index e376f0b..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/RunnableTransformer.xtend
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.Runnable
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableGenerator
-
-@Singleton
-class RunnableTransformer extends SLGBaseTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject ActivityGraphItemTransformer psCallGraphItemTransformer
-
-	def create new RunnableTranslationUnit(outputBuffer, psCallGraphItemTransformer, runnable)
-		transform(Runnable runnable) {
-	}
-
-	override getCache() { return this._createCache_transform }
-
-	def createCMake() {
-		outputBuffer.appendTo("OTHER", RunnableTranslationUnit.makeFilePathStatic, RunnableGenerator.toCMake(getSrcFiles))
-	}
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TaskTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TaskTransformer.java
new file mode 100644
index 0000000..17b31fe
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TaskTransformer.java
@@ -0,0 +1,66 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.app4mc.amalthea.model.Component;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TaskTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class TaskTransformer extends SLGBaseTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private RunnableTransformer runnableTransformer;
+	@Inject private LabelTransformer labelTransformer;
+
+	public TaskTranslationUnit transform(final Task task, final Component component) {
+		final ArrayList<?> key = CollectionLiterals.newArrayList(task, component);
+		final TaskTranslationUnit _result;
+		synchronized (cache) {
+			if (cache.containsKey(key)) {
+				return cache.get(key);
+			}
+			TaskTranslationUnit _taskTranslationUnit = new TaskTranslationUnit(this.outputBuffer,
+					this.runnableTransformer, this.labelTransformer, task, component);
+			_result = _taskTranslationUnit;
+			cache.put(key, _result);
+		}
+		_init_transform(_result, task, component);
+		return _result;
+	}
+
+	private final HashMap<ArrayList<?>, TaskTranslationUnit> cache = CollectionLiterals.newHashMap();
+
+	private void _init_transform(final TaskTranslationUnit it, final Task task, final Component component) {
+	}
+
+	@Override
+	public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+		return this.cache;
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TaskTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TaskTransformer.xtend
deleted file mode 100644
index 35c030a..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TaskTransformer.xtend
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.Component
-import org.eclipse.app4mc.amalthea.model.Task
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.TaskTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class TaskTransformer extends SLGBaseTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject RunnableTransformer runnableTransformer
-	@Inject LabelTransformer labelTransformer
-
-	def create new TaskTranslationUnit(outputBuffer, runnableTransformer, labelTransformer, task, component)
-		transform(Task task, Component component) {
-	}
-
-	override getCache() { return this._createCache_transform }
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksTransformer.java
new file mode 100644
index 0000000..fee1ec6
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksTransformer.java
@@ -0,0 +1,77 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
+import org.eclipse.app4mc.amalthea.model.Ticks;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TicksTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TicksUtilsTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.emf.common.util.EMap;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class TicksTransformer extends SLGBaseTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private TicksUtilsTransformer ticksUtilsTransformer;
+
+	public TicksTranslationUnit transform(final Ticks ticks) {
+		if (ticks.getDefault() != null) {
+			final TicksUtilsTranslationUnit tuTicks = ticksUtilsTransformer.generate(ticks.getDefault());
+			return new TicksTranslationUnit(outputBuffer, tuTicks, ticks, "default", ticks.getDefault());
+		}
+		return null;
+	}
+
+	public List<TicksTranslationUnit> transformAllItems(final Ticks ticks) {
+		final List<TicksTranslationUnit> result = new ArrayList<TicksTranslationUnit>();
+		final IDiscreteValueDeviation defaultTicks = ticks.getDefault();
+		if ((defaultTicks != null)) {
+			final TicksUtilsTranslationUnit tuTicks = this.ticksUtilsTransformer.generate(ticks.getDefault());
+			result.add(new TicksTranslationUnit(this.outputBuffer, tuTicks, ticks,
+					"default", ticks.getDefault()));
+		}
+		EMap<ProcessingUnitDefinition, IDiscreteValueDeviation> _extended = null;
+		if (ticks != null) {
+			_extended = ticks.getExtended();
+		}
+		final EMap<ProcessingUnitDefinition, IDiscreteValueDeviation> puExtendedMap = _extended;
+		Set<ProcessingUnitDefinition> _keySet = puExtendedMap.keySet();
+		for (final ProcessingUnitDefinition puDefinition : _keySet) {
+			{
+				final IDiscreteValueDeviation ticksValue = puExtendedMap.get(puDefinition);
+				if (((puDefinition != null) && (ticksValue != null))) {
+					final TicksUtilsTranslationUnit tuTicks_1 = this.ticksUtilsTransformer.generate(ticksValue);
+					String _name = puDefinition.getName();
+					TicksTranslationUnit _ticksTranslationUnit_1 = new TicksTranslationUnit(this.outputBuffer,
+							tuTicks_1, ticks, _name, ticksValue);
+					result.add(_ticksTranslationUnit_1);
+				}
+			}
+		}
+		return result;
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksTransformer.xtend
deleted file mode 100644
index aa281ed..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksTransformer.xtend
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import java.util.ArrayList
-import java.util.List
-import org.eclipse.app4mc.amalthea.model.Ticks
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.TicksTranslationUnit
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-
-@Singleton
-class TicksTransformer extends SLGBaseTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject TicksUtilsTransformer ticksUtilsTransformer
-
-	def TicksTranslationUnit transform(Ticks ticks) {
-		if (ticks.^default !== null) {
-			val tuTicks = ticksUtilsTransformer.generate(ticks.^default)
-			return new TicksTranslationUnit(outputBuffer, tuTicks, ticks, "default", ticks.^default)
-		}
-	}
-
-	def List<TicksTranslationUnit> transformAllItems(Ticks ticks) {
-
-		val List<TicksTranslationUnit> result = new ArrayList
-
-		val defaultTicks = ticks.^default
-
-		if (defaultTicks !== null) {
-			val tuTicks = ticksUtilsTransformer.generate(ticks.^default)
-			result.add(new TicksTranslationUnit(outputBuffer, tuTicks, ticks, "default", ticks.^default))
-		}
-
-		val puExtendedMap = ticks?.extended
-
-		for (puDefinition : puExtendedMap.keySet) {
-			val ticksValue = puExtendedMap.get(puDefinition)
-			if (puDefinition !== null && ticksValue !== null) {
-
-				val tuTicks = ticksUtilsTransformer.generate(ticksValue)
-				result.add(new TicksTranslationUnit(outputBuffer, tuTicks, ticks, puDefinition.name, ticksValue))
-
-			}
-		}
-
-		return result
-	}
-
-}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksUtilsTransformer.java b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksUtilsTransformer.java
new file mode 100644
index 0000000..6e81f1f
--- /dev/null
+++ b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksUtilsTransformer.java
@@ -0,0 +1,82 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2021 Robert Bosch GmbH.
+ * 
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ *     Robert Bosch GmbH - initial API and implementation
+ ********************************************************************************
+ */
+
+package org.eclipse.app4mc.slg.commons.m2t.transformers.sw;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation;
+import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TicksUtilsGenerator;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TicksUtilsTranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
+import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer;
+import org.eclipse.app4mc.slg.config.ConfigModel;
+import org.eclipse.app4mc.transformation.util.OutputBuffer;
+import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class TicksUtilsTransformer extends SLGBaseTransformer {
+
+	@Inject private OutputBuffer outputBuffer;
+	@Inject private CustomObjectsStore customObjsStore;
+
+	public TicksUtilsTranslationUnit generate(final IDiscreteValueDeviation value) {
+		return this.generateIntern(value.getClass());
+	}
+
+	public TicksUtilsTranslationUnit generateIntern(final Object valueClass) {
+		final ArrayList<?> key = CollectionLiterals.newArrayList(valueClass);
+		final TicksUtilsTranslationUnit _result;
+		synchronized (cache) {
+			if (cache.containsKey(key)) {
+				return cache.get(key);
+			}
+			ConfigModel _instance = this.customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
+			TicksUtilsTranslationUnit tu = new TicksUtilsTranslationUnit(this.outputBuffer,
+					_instance, valueClass);
+			_result = tu;
+			cache.put(key, _result);
+		}
+		_init_generateIntern(_result, valueClass);
+		return _result;
+	}
+
+	private final HashMap<ArrayList<?>, TicksUtilsTranslationUnit> cache = CollectionLiterals
+			.newHashMap();
+
+	private void _init_generateIntern(final TicksUtilsTranslationUnit it, final Object valueClass) {
+	}
+
+	@Override
+	public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
+		return this.cache;
+	}
+
+	public boolean write() {
+		return this.createCMake();
+	}
+
+	public boolean createCMake() {
+		return this.outputBuffer.appendTo("OTHER", TicksUtilsTranslationUnit.getMakeFilePathStatic(),
+				TicksUtilsGenerator.toCMake(this.getSrcFiles()));
+	}
+
+}
diff --git a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksUtilsTransformer.xtend b/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksUtilsTransformer.xtend
deleted file mode 100644
index b9d11fe..0000000
--- a/load_generator/commons/plugins/org.eclipse.app4mc.slg.commons.m2t/src/org/eclipse/app4mc/slg/commons/m2t/transformers/sw/TicksUtilsTransformer.xtend
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * *******************************************************************************
- * Copyright (c) 2020 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- * *******************************************************************************
- */
-
-package org.eclipse.app4mc.slg.commons.m2t.transformers.sw
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation
-import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore
-import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGBaseTransformer
-import org.eclipse.app4mc.slg.commons.m2t.generators.TicksUtilsTranslationUnit
-import org.eclipse.app4mc.slg.config.ConfigModel
-import org.eclipse.app4mc.transformation.util.OutputBuffer
-import org.eclipse.app4mc.slg.commons.m2t.generators.TicksUtilsGenerator
-
-@Singleton
-class TicksUtilsTransformer extends SLGBaseTransformer {
-
-	@Inject OutputBuffer outputBuffer
-	@Inject CustomObjectsStore customObjsStore
-
-	def TicksUtilsTranslationUnit generate(IDiscreteValueDeviation value) {
-		return generateIntern(value.class) // hash according to class not instance
-	}
-
-	def create new TicksUtilsTranslationUnit(outputBuffer, customObjsStore.getInstance(ConfigModel), valueClass)
-		generateIntern(Object valueClass) {
-	}
-
-	override getCache() { return this._createCache_generateIntern }
-
-	def write() {
-		createCMake()
-	}
-
-	def createCMake() {
-		outputBuffer.appendTo("OTHER", TicksUtilsTranslationUnit.makeFilePathStatic, TicksUtilsGenerator.toCMake(getSrcFiles))
-	}
-
-}