Просмотр исходного кода

Merge pull request #1691 from Yakindu/issue_1681

Refactoring C/C++ ExpressionCode
rherrmannr 8 лет назад
Родитель
Сommit
0495feaef1
29 измененных файлов с 290 добавлено и 457 удалено
  1. 1 1
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/CCodeGeneratorModule.java
  2. 49 90
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ExpressionCode.xtend
  3. 1 1
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ConstantInitializationResolver.xtend
  4. 1 1
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/FlowCode.xtend
  5. 2 2
      plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/eventdriven/EventDrivenExpressionCode.xtend
  6. 0 35
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/templates/Expressions.xtend
  7. 92 0
      plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/templates/ExpressionsGenerator.xtend
  8. 3 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/CppCodeGeneratorModule.java
  9. 52 0
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/CppExpressionsGenerator.xtend
  10. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/CppGenerator.xtend
  11. 20 22
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Naming.xtend
  12. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/EventCode.xtend
  13. 0 125
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/ExpressionCode.xtend
  14. 2 2
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/FlowCode.xtend
  15. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineHeader.xtend
  16. 2 2
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineImplementation.xtend
  17. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineInterface.xtend
  18. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/TimedStatemachineInterface.xtend
  19. 1 1
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/TimerInterface.xtend
  20. 3 3
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Types.xtend
  21. 2 3
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/eventdriven/EventDrivenExpressionCode.xtend
  22. 3 5
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/eventdriven/EventNaming.xtend
  23. 3 4
      plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/eventdriven/StatechartEvents.xtend
  24. 30 78
      plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/ExpressionCode.xtend
  25. 1 1
      plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/FlowCode.xtend
  26. 1 1
      plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/StatemachineInterface.xtend
  27. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/FlowCode.xtend
  28. 14 72
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/ExpressionCode.xtend
  29. 1 1
      plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/StatemachineInterface.xtend

+ 1 - 1
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/CCodeGeneratorModule.java

@@ -79,7 +79,7 @@ public class CCodeGeneratorModule implements IGeneratorModule {
 		if(eventDrivenAnnotation != null) {
 			binder.bind(StatemachineHeader.class).to(EventDrivenStatemachineHeader.class);
 			binder.bind(StatemachineSource.class).to(EventDrivenStatemachineSource.class);
-			binder.bind(ExpressionCode.class).to(EventDrivenExpressionCode.class);
+			binder.bind(CExpressionsGenerator.class).to(EventDrivenExpressionCode.class);
 		}
 	}
 

+ 49 - 90
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ExpressionCode.xtend

@@ -1,35 +1,26 @@
-/**
- * Copyright (c) 2012 committers of YAKINDU and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+/** 
+ * Copyright (c) 2017 committers of YAKINDU and others. 
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
  * Contributors:
- * 	committers of YAKINDU - initial API and implementation
+ * committers of YAKINDU - initial API and implementation
  * 
  */
+
 package org.yakindu.sct.generator.c
 
 import com.google.inject.Inject
-import org.yakindu.base.expressions.expressions.AssignmentExpression
 import org.yakindu.base.expressions.expressions.BoolLiteral
-import org.yakindu.base.expressions.expressions.DoubleLiteral
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression
 import org.yakindu.base.expressions.expressions.Expression
 import org.yakindu.base.expressions.expressions.FeatureCall
-import org.yakindu.base.expressions.expressions.FloatLiteral
-import org.yakindu.base.expressions.expressions.HexLiteral
-import org.yakindu.base.expressions.expressions.IntLiteral
-import org.yakindu.base.expressions.expressions.Literal
 import org.yakindu.base.expressions.expressions.LogicalAndExpression
 import org.yakindu.base.expressions.expressions.LogicalNotExpression
 import org.yakindu.base.expressions.expressions.LogicalOrExpression
 import org.yakindu.base.expressions.expressions.LogicalRelationExpression
 import org.yakindu.base.expressions.expressions.NullLiteral
-import org.yakindu.base.expressions.expressions.ParenthesizedExpression
-import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
-import org.yakindu.base.expressions.expressions.StringLiteral
-import org.yakindu.base.expressions.expressions.TypeCastExpression
 import org.yakindu.base.types.Enumerator
 import org.yakindu.base.types.Event
 import org.yakindu.base.types.Operation
@@ -37,126 +28,94 @@ import org.yakindu.base.types.Property
 import org.yakindu.base.types.inferrer.ITypeSystemInferrer
 import org.yakindu.base.types.typesystem.GenericTypeSystem
 import org.yakindu.base.types.typesystem.ITypeSystem
-import org.yakindu.sct.generator.core.templates.Expressions
-import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
+import org.yakindu.sct.generator.core.templates.ExpressionsGenerator
 import org.yakindu.sct.model.sexec.naming.INamingService
 import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
 import org.yakindu.sct.model.stext.stext.EventRaisingExpression
 import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
 import org.yakindu.sct.model.stext.stext.OperationDefinition
 import org.yakindu.sct.model.stext.stext.VariableDefinition
-import org.yakindu.base.expressions.expressions.ConditionalExpression
-import org.yakindu.base.expressions.expressions.BinaryLiteral
 
-class ExpressionCode extends Expressions {
+class CExpressionsGenerator extends ExpressionsGenerator {
 
 	@Inject protected extension Naming
 	@Inject protected extension Navigation
+
 	@Inject protected extension ITypeSystem
 	@Inject protected extension ITypeSystemInferrer
 	@Inject protected extension INamingService
-	@Inject protected extension ICodegenTypeSystemAccess
 
 	/* Referring to declared elements */
 	def dispatch CharSequence code(ElementReferenceExpression it) {
 		it.code(it.definition)
 	}
 
-	def dispatch CharSequence code(FeatureCall it) {
-		it.code(it.definition)
-	}
-
+	/* Expressions */
 	def dispatch CharSequence code(Expression it, Event target) '''«target.access»'''
 
 	def dispatch CharSequence code(Expression it, VariableDefinition target) '''«target.access»'''
 
-	def dispatch CharSequence code(ElementReferenceExpression it, VariableDefinition target) '''«target.access»'''
-
-	def dispatch CharSequence code(FeatureCall it, VariableDefinition target) '''«target.access»'''
-	
-	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : expressions BEFORE ', ' SEPARATOR ', '»«arg.
-		code»«ENDFOR»)'''
+	/* TODO: check if event is active */
+	def dispatch CharSequence code(EventValueReferenceExpression it) '''«value.definition.event.valueAccess»'''
 
-	def dispatch CharSequence code(ElementReferenceExpression it, Operation target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
-		code»«ENDFOR»)'''
-	
-	def dispatch CharSequence code(ElementReferenceExpression it, Property target) '''«target.access»'''
-	
-	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : expressions BEFORE ', ' SEPARATOR ', '»«arg.
-		code»«ENDFOR»)'''
+	def dispatch CharSequence code(ElementReferenceExpression it, VariableDefinition target) '''«target.access»'''
 
-	def dispatch CharSequence code(FeatureCall it, Operation target) '''«it.owner.code».«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
+	def dispatch CharSequence code(ElementReferenceExpression it,
+		OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : expressions BEFORE ', ' SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
-		
-	def dispatch CharSequence code(FeatureCall it, Property target) '''«it.owner.code».«target.access»'''
-	
-	def dispatch CharSequence code(FeatureCall it, Enumerator target) '''«target.access»'''
-	
-	def dispatch CharSequence code(ConditionalExpression it) '''«condition.code» ? «trueCase.code» : «falseCase.code»'''
-
-	/* HANDLING LITERALS */
-	def dispatch CharSequence code(Literal it) '''#error unknown literal type «getClass().name» '''
-	
-	def dispatch CharSequence code(NullLiteral it) '''«Naming::NULL_STRING»'''
-
-	def dispatch CharSequence code(StringLiteral it) '''"«value.escaped»"'''
-
-	def String escaped(String it) {
-		return it.replace("\"", "\\\"");
-	}
-
-	def dispatch CharSequence code(BoolLiteral it) '''«IF value»bool_true«ELSE»bool_false«ENDIF»'''
-
-	def dispatch CharSequence code(IntLiteral it) '''«value.toString»'''
 
-	def dispatch CharSequence code(DoubleLiteral it) '''«value.toString»'''
-	
-	def dispatch CharSequence code(FloatLiteral it) '''«value.toString»'''
+	def dispatch CharSequence code(ElementReferenceExpression it,
+		Operation target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.code»«ENDFOR»)'''
 
-	def dispatch CharSequence code(HexLiteral it) '''0x«Integer::toHexString(value)»'''
-	
-	def dispatch CharSequence code(BinaryLiteral it) '''0b«Integer::toBinaryString(value)»'''
-
-	def dispatch CharSequence code(PrimitiveValueExpression it) '''«value.code»'''
-
-	/* Statements */
-	def dispatch CharSequence code(AssignmentExpression it) '''«varRef.code» «operator.literal» «expression.code»'''
+	def dispatch CharSequence code(ElementReferenceExpression it, Property target) '''«target.access»'''
 
 	def dispatch CharSequence code(EventRaisingExpression it) '''
-	«IF value != null»
+	«IF value !== null»
 		«event.definition.event.valueAccess» = «value.code»;
 	«ENDIF»
 	«event.definition.event.access» = bool_true'''
 
-	/* Logical Expressions */
+	def dispatch CharSequence code(
+		ActiveStateReferenceExpression it) '''«flow.stateActiveFctID»(«scHandle», «value.shortName»)'''
 
 	def dispatch CharSequence code(LogicalRelationExpression it) '''
 	«IF isSame(leftOperand.infer.type, getType(GenericTypeSystem.STRING))»
 		(strcmp(«leftOperand.code», «rightOperand.code») «operator.literal» 0)
 	«ELSE»«leftOperand.code» «operator.literal» «rightOperand.code»«ENDIF»'''
 
+	/* Feature call */
+	def dispatch CharSequence code(FeatureCall it) {
+		it.code(it.definition)
+	}
+
+	def dispatch CharSequence code(FeatureCall it, VariableDefinition target) '''«target.access»'''
 
-	/* TODO: check if event is active */
-	def dispatch CharSequence code(EventValueReferenceExpression it) '''«value.definition.event.valueAccess»'''
-	
-	def dispatch CharSequence code(ActiveStateReferenceExpression it) '''«flow.stateActiveFctID»(«scHandle», «value.shortName»)'''
+	def dispatch CharSequence code(FeatureCall it,
+		OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : expressions BEFORE ', ' SEPARATOR ', '»«arg.
+		code»«ENDFOR»)'''
+
+	def dispatch CharSequence code(FeatureCall it,
+		Operation target) '''«it.owner.code».«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
+		code»«ENDFOR»)'''
+
+	def dispatch CharSequence code(FeatureCall it, Property target) '''«it.owner.code».«target.access»'''
+
+	def dispatch CharSequence code(FeatureCall it, Enumerator target) '''«target.access»'''
+
+	/* Literals */
+	override dispatch CharSequence code(NullLiteral it) '''«Naming::NULL_STRING»'''
+
+	override dispatch CharSequence code(BoolLiteral it) '''«IF value»bool_true«ELSE»bool_false«ENDIF»'''
 
-	def dispatch CharSequence code(ParenthesizedExpression it) '''(«expression.code»)'''
-	
-	def dispatch CharSequence code(TypeCastExpression it) '''((«type.getTargetLanguageName») «operand.code»)'''
-	
 	// ensure we obtain an expression of type sc_boolean
-	
 	def dispatch CharSequence sc_boolean_code(Expression it) '''«it.code»'''
-	
+
 	def dispatch CharSequence sc_boolean_code(LogicalOrExpression it) '''(«it.code») ? bool_true : bool_false'''
-	
+
 	def dispatch CharSequence sc_boolean_code(LogicalAndExpression it) '''(«it.code») ? bool_true : bool_false'''
-	
+
 	def dispatch CharSequence sc_boolean_code(LogicalNotExpression it) '''(«it.code») ? bool_true : bool_false'''
-	
+
 	def dispatch CharSequence sc_boolean_code(LogicalRelationExpression it) '''(«it.code») ? bool_true : bool_false'''
-	
-	
 
 }

+ 1 - 1
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ConstantInitializationResolver.xtend

@@ -15,7 +15,7 @@ import org.yakindu.sct.model.stext.stext.VariableDefinition
 import org.yakindu.base.expressions.expressions.FeatureCall
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression
 
-class ConstantInitializationResolver extends ExpressionCode {
+class ConstantInitializationResolver extends CExpressionsGenerator {
 	
 	def CharSequence resolveConstants(Expression it) {
 		code

+ 1 - 1
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/FlowCode.xtend

@@ -35,7 +35,7 @@ class FlowCode {
 	
 	@Inject extension Naming
 	@Inject extension Navigation
-	@Inject extension ExpressionCode
+	@Inject extension CExpressionsGenerator
 	@Inject extension INamingService
 	@Inject extension GenmodelEntries
  

+ 2 - 2
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/eventdriven/EventDrivenExpressionCode.xtend

@@ -12,13 +12,13 @@ package org.yakindu.sct.generator.c.eventdriven
 
 import com.google.inject.Inject
 import org.yakindu.base.types.Direction
-import org.yakindu.sct.generator.c.ExpressionCode
+import org.yakindu.sct.generator.c.CExpressionsGenerator
 import org.yakindu.sct.model.stext.stext.EventRaisingExpression
 
 /**
  * @author René Beckmann
  */
-class EventDrivenExpressionCode extends ExpressionCode {
+class EventDrivenExpressionCode extends CExpressionsGenerator {
 	@Inject extension EventNaming
 	
 	protected static int valueVarIndex = 0

+ 0 - 35
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/templates/Expressions.xtend

@@ -1,35 +0,0 @@
-/**
- * Copyright (c) 2016 committers of YAKINDU and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * Contributors:
- * 	committers of YAKINDU - initial API and implementation
- * 
- */
-
-package org.yakindu.sct.generator.core.templates
-
-import org.eclipse.emf.ecore.EObject
-import org.yakindu.base.expressions.expressions.BinaryExpression
-import org.yakindu.base.expressions.expressions.UnaryExpression
-
-/**
- * 
- * @author Rene Beckmann - Initial contribution and API
- */
-class Expressions {
-	
-	def dispatch CharSequence code(BinaryExpression expression) {
-		expression.leftOperand.code.toString.trim + " " + expression.operator.literal.toString.trim + " " + expression.rightOperand.code
-	}
-
-	def dispatch CharSequence code(UnaryExpression expression) {
-		expression.operator.literal + expression.operand.code
-	}
-	
-	def dispatch CharSequence code(EObject it) {
-		throw new IllegalStateException("No dispatch function for " + getClass().name)
-	}
-}

+ 92 - 0
plugins/org.yakindu.sct.generator.core/src/org/yakindu/sct/generator/core/templates/ExpressionsGenerator.xtend

@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2016 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+
+package org.yakindu.sct.generator.core.templates
+
+import com.google.inject.Inject
+import org.eclipse.emf.ecore.EObject
+import org.yakindu.base.expressions.expressions.AssignmentExpression
+import org.yakindu.base.expressions.expressions.BinaryExpression
+import org.yakindu.base.expressions.expressions.BinaryLiteral
+import org.yakindu.base.expressions.expressions.BoolLiteral
+import org.yakindu.base.expressions.expressions.ConditionalExpression
+import org.yakindu.base.expressions.expressions.DoubleLiteral
+import org.yakindu.base.expressions.expressions.FloatLiteral
+import org.yakindu.base.expressions.expressions.HexLiteral
+import org.yakindu.base.expressions.expressions.IntLiteral
+import org.yakindu.base.expressions.expressions.Literal
+import org.yakindu.base.expressions.expressions.NullLiteral
+import org.yakindu.base.expressions.expressions.ParenthesizedExpression
+import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
+import org.yakindu.base.expressions.expressions.StringLiteral
+import org.yakindu.base.expressions.expressions.TypeCastExpression
+import org.yakindu.base.expressions.expressions.UnaryExpression
+import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
+
+/**
+ * 
+ * @author Rene Beckmann - Initial contribution and API
+ */
+class ExpressionsGenerator {
+
+	@Inject protected extension ICodegenTypeSystemAccess
+
+	def dispatch CharSequence code(EObject it) {
+		throw new IllegalStateException("No dispatch function for " + getClass().name)
+	}
+
+	/* Expressions */
+	def dispatch CharSequence code(BinaryExpression it) {
+		leftOperand.code.toString.trim + " " + operator.literal.toString.trim + " " + rightOperand.code
+	}
+
+	def dispatch CharSequence code(UnaryExpression it) {
+		operator.literal + operand.code
+	}
+
+	def dispatch CharSequence code(AssignmentExpression it) '''«varRef.code» «operator.literal» «expression.code»'''
+
+	def dispatch CharSequence code(ConditionalExpression it) '''«condition.code» ? «trueCase.code» : «falseCase.code»'''
+
+	def dispatch CharSequence code(PrimitiveValueExpression it) '''«value.code»'''
+
+	def dispatch CharSequence code(ParenthesizedExpression it) '''(«expression.code»)'''
+
+	def dispatch CharSequence code(TypeCastExpression it) '''((«type.getTargetLanguageName») «operand.code»)'''
+
+	/* Literals */
+	def dispatch CharSequence code(Literal it){
+		throw new IllegalStateException("No dispatch function for " + getClass().name)
+	}
+
+	def dispatch CharSequence code(StringLiteral it) '''"«value.escaped»"'''
+
+	def protected String escaped(String it) {
+		return it.replace("\"", "\\\"");
+	}
+
+	def dispatch CharSequence code(IntLiteral it) '''«value.toString»'''
+
+	def dispatch CharSequence code(DoubleLiteral it) '''«value.toString»'''
+
+	def dispatch CharSequence code(FloatLiteral it) '''«value.toString»'''
+
+	def dispatch CharSequence code(HexLiteral it) '''0x«Integer::toHexString(value)»'''
+
+	def dispatch CharSequence code(BinaryLiteral it) '''0b«Integer::toBinaryString(value)»'''
+
+	def dispatch CharSequence code(BoolLiteral it) '''«value.toString»'''
+
+	def dispatch CharSequence code(NullLiteral expression) {
+		'null'
+	}
+
+}

+ 3 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/CppCodeGeneratorModule.java

@@ -18,6 +18,7 @@ import org.yakindu.base.types.Annotation;
 import org.yakindu.base.types.inferrer.ITypeSystemInferrer;
 import org.yakindu.sct.generator.c.DefaultGenArtifactConfigurations;
 import org.yakindu.sct.generator.c.IGenArtifactConfigurations;
+import org.yakindu.sct.generator.c.Naming;
 import org.yakindu.sct.generator.c.SimpleGenArtifactConfigurations;
 import org.yakindu.sct.generator.c.types.CTypeSystemAccess;
 import org.yakindu.sct.generator.core.IExecutionFlowGenerator;
@@ -49,6 +50,7 @@ public class CppCodeGeneratorModule implements IGeneratorModule {
 		binder.bind(ICodegenTypeSystemAccess.class).to(CTypeSystemAccess.class);
 		binder.bind(INamingService.class).to(CppNamingService.class);
 		binder.bind(ITypeSystemInferrer.class).to(STextTypeInferrer.class);
+		binder.bind(Naming.class).to(CppNaming.class);
 		bindEventDrivenClasses(entry, binder);
 		bindIGenArtifactConfigurations(entry, binder);
 	}
@@ -71,7 +73,7 @@ public class CppCodeGeneratorModule implements IGeneratorModule {
 		if(eventDrivenAnnotation != null) {
 			binder.bind(StatemachineHeader.class).to(EventDrivenStatemachineHeader.class);
 			binder.bind(StatemachineImplementation.class).to(EventDrivenStatemachineImplementation.class);
-			binder.bind(ExpressionCode.class).to(EventDrivenExpressionCode.class);
+			binder.bind(CppExpressionsGenerator.class).to(EventDrivenExpressionCode.class);
 			binder.bind(EventCode.class).to(EventDrivenEventCode.class);
 		}
 	}

+ 52 - 0
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/CppExpressionsGenerator.xtend

@@ -0,0 +1,52 @@
+/** 
+ * Copyright (c) 2015 committers of YAKINDU and others. 
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * Contributors:
+ * committers of YAKINDU - initial API and implementation
+ * 
+ */
+ 
+package org.yakindu.sct.generator.cpp
+
+import com.google.inject.Inject
+import org.yakindu.base.expressions.expressions.BoolLiteral
+import org.yakindu.base.expressions.expressions.ElementReferenceExpression
+import org.yakindu.base.expressions.expressions.FeatureCall
+import org.yakindu.base.types.typesystem.ITypeSystem
+import org.yakindu.sct.generator.c.CExpressionsGenerator
+import org.yakindu.sct.model.sexec.naming.INamingService
+import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
+import org.yakindu.sct.model.stext.stext.EventRaisingExpression
+import org.yakindu.sct.model.stext.stext.OperationDefinition
+
+class CppExpressionsGenerator extends CExpressionsGenerator {
+
+	@Inject protected extension CppNaming
+	@Inject protected extension Navigation
+	@Inject protected extension ITypeSystem
+	@Inject protected extension INamingService
+
+	override dispatch CharSequence code(ElementReferenceExpression it,
+		OperationDefinition target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
+		code»«ENDFOR»)'''
+
+	override dispatch CharSequence code(EventRaisingExpression it) '''
+	«IF value !== null»
+		«event.definition.event.valueAccess» = «value.code»;
+	«ENDIF»
+	«event.definition.event.access» = true'''
+
+	override dispatch CharSequence code(
+		ActiveStateReferenceExpression it) '''«flow.stateActiveFctID»(«value.shortName»)'''
+
+	/* Feature Call */
+	override dispatch CharSequence code(FeatureCall it,
+		OperationDefinition target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.code»«ENDFOR»)'''
+
+	/* Literals */
+	override dispatch CharSequence code(BoolLiteral it) '''«IF value»true«ELSE»false«ENDIF»'''
+
+}

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/CppGenerator.xtend

@@ -37,7 +37,7 @@ class CppGenerator implements IExecutionFlowGenerator {
 	@Inject extension StatemachineHeader statemachineHeaderContent
 	@Inject extension StatemachineImplementation statemachineSourceContent
 	@Inject extension Navigation
-	@Inject extension Naming
+	@Inject extension CppNaming
 	@Inject extension ICoreLibraryHelper
 
 	@Inject

+ 20 - 22
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Naming.xtend

@@ -1,18 +1,20 @@
 /**
-  Copyright (c) 2013-2017 committers of YAKINDU and others.
-  All rights reserved. This program and the accompanying materials
-  are made available under the terms of the Eclipse Public License v1.0
-  which accompanies this distribution, and is available at
-  http://www.eclipse.org/legal/epl-v10.html
- 
-  Contributors:
-  	Markus Mühlbrandt - Initial contribution and API
+ *   Copyright (c) 2013-2017 committers of YAKINDU and others.
+ *   All rights reserved. This program and the accompanying materials
+ *   are made available under the terms of the Eclipse Public License v1.0
+ *   which accompanies this distribution, and is available at
+ *   http://www.eclipse.org/legal/epl-v10.html
+ *  
+ *   Contributors:
+ *   	Markus Mühlbrandt - Initial contribution and API
  */
+ 
 package org.yakindu.sct.generator.cpp
 
 import com.google.inject.Inject
 import org.yakindu.base.types.Event
 import org.yakindu.base.types.Parameter
+import org.yakindu.sct.generator.c.Naming
 import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
 import org.yakindu.sct.generator.cpp.features.GenmodelEntriesExtension
 import org.yakindu.sct.model.sexec.ExecutionFlow
@@ -27,17 +29,16 @@ import org.yakindu.sct.model.stext.stext.OperationDefinition
 import org.yakindu.sct.model.stext.stext.StatechartScope
 import org.yakindu.sct.model.stext.stext.VariableDefinition
 
-
 /**
  * @author Markus Mühlbrands - Initial contribution and API
  * @author Axel Terfloth - updates
  */
-class Naming extends org.yakindu.sct.generator.c.Naming {
+class CppNaming extends Naming {
 
-	@Inject extension Navigation
-	@Inject extension ICodegenTypeSystemAccess
-	@Inject extension INamingService
-	@Inject extension GenmodelEntriesExtension
+	@Inject protected extension Navigation
+	@Inject protected extension ICodegenTypeSystemAccess
+	@Inject protected extension INamingService
+	@Inject protected extension GenmodelEntriesExtension
 	@Inject GeneratorEntry entry
 
 	def cpp(String it) { it + ".cpp" }
@@ -65,7 +66,7 @@ class Naming extends org.yakindu.sct.generator.c.Naming {
 	def timerInterface() {
 		'TimerInterface'
 	}
-	
+
 	def timerInstance() {
 		'timer'
 	}
@@ -73,7 +74,7 @@ class Naming extends org.yakindu.sct.generator.c.Naming {
 	def timeEventsCountConst() {
 		'timeEventsCount'
 	}
-	
+
 	def timeEventsCountparallelConst() {
 		'parallelTimeEventsCount'
 	}
@@ -104,13 +105,13 @@ class Naming extends org.yakindu.sct.generator.c.Naming {
 	def OCB_Instance(Scope it) {
 		it.instance + "_OCB"
 	}
-	
+
 	def dispatch String getInterfaceName(Scope it) '''
 		no interfaceName for «it»
 	'''
 
 	def dispatch String getInterfaceName(InterfaceScope it) {
-		if (name != null) {
+		if (name !== null) {
 			return "SCI_" + name.toFirstUpper()
 		} else {
 			return "DefaultSCI";
@@ -122,7 +123,7 @@ class Naming extends org.yakindu.sct.generator.c.Naming {
 	}
 
 	def dispatch String getSimpleName(InterfaceScope it) {
-		if (name != null) {
+		if (name !== null) {
 			return name
 		} else {
 			return "default";
@@ -137,9 +138,6 @@ class Naming extends org.yakindu.sct.generator.c.Naming {
 		interfaceName + "_OCB"
 	}
 
-	//	def String getInternalOperationCallbackName() {
-	//		"InternalOCB"
-	//	}
 	override asFunction(OperationDefinition it) {
 		name.asEscapedIdentifier
 	}

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/EventCode.xtend

@@ -20,7 +20,7 @@ import org.yakindu.sct.model.stext.stext.StatechartScope
  * @author René Beckmann
  */
 class EventCode {
-	@Inject protected extension Naming
+	@Inject protected extension CppNaming
 	@Inject protected extension Navigation
 	@Inject protected extension ICodegenTypeSystemAccess
 	

+ 0 - 125
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/ExpressionCode.xtend

@@ -1,125 +0,0 @@
-/** 
- * Copyright (c) 2015 committers of YAKINDU and others. 
- * All rights reserved. This program and the accompanying materials 
- * are made available under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution, and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- * Contributors:
- * committers of YAKINDU - initial API and implementation
- *
-*/
-package org.yakindu.sct.generator.cpp
-
-import com.google.inject.Inject
-import org.yakindu.base.expressions.expressions.AssignmentExpression
-import org.yakindu.base.expressions.expressions.BinaryLiteral
-import org.yakindu.base.expressions.expressions.BoolLiteral
-import org.yakindu.base.expressions.expressions.ConditionalExpression
-import org.yakindu.base.expressions.expressions.DoubleLiteral
-import org.yakindu.base.expressions.expressions.ElementReferenceExpression
-import org.yakindu.base.expressions.expressions.Expression
-import org.yakindu.base.expressions.expressions.FeatureCall
-import org.yakindu.base.expressions.expressions.FloatLiteral
-import org.yakindu.base.expressions.expressions.HexLiteral
-import org.yakindu.base.expressions.expressions.IntLiteral
-import org.yakindu.base.expressions.expressions.Literal
-import org.yakindu.base.expressions.expressions.LogicalRelationExpression
-import org.yakindu.base.expressions.expressions.NullLiteral
-import org.yakindu.base.expressions.expressions.ParenthesizedExpression
-import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
-import org.yakindu.base.expressions.expressions.StringLiteral
-import org.yakindu.base.expressions.expressions.TypeCastExpression
-import org.yakindu.base.types.Event
-import org.yakindu.base.types.inferrer.ITypeSystemInferrer
-import org.yakindu.base.types.typesystem.GenericTypeSystem
-import org.yakindu.base.types.typesystem.ITypeSystem
-import org.yakindu.sct.generator.core.templates.Expressions
-import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
-import org.yakindu.sct.model.sexec.naming.INamingService
-import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
-import org.yakindu.sct.model.stext.stext.EventRaisingExpression
-import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
-import org.yakindu.sct.model.stext.stext.OperationDefinition
-import org.yakindu.sct.model.stext.stext.VariableDefinition
-
-class ExpressionCode extends Expressions {
-
-	@Inject protected extension Naming
-	@Inject protected extension Navigation
-	@Inject protected extension ITypeSystem
-	@Inject protected extension ITypeSystemInferrer
-	@Inject protected extension INamingService
-	@Inject protected extension ICodegenTypeSystemAccess
-
-	/* Referring to declared elements */
-	def dispatch CharSequence code(ElementReferenceExpression it) {
-		it.code(it.definition)
-	}
-
-	def dispatch CharSequence code(FeatureCall it) {
-		it.code(it.definition)
-	}
-
-	def dispatch CharSequence code(Expression it, Event target) '''«target.access»'''
-
-	def dispatch CharSequence code(Expression it, VariableDefinition target) '''«target.access»'''
-
-	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
-		code»«ENDFOR»)'''
-		
-	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«FOR arg : expressions SEPARATOR ', '»«arg.
-		code»«ENDFOR»)'''
-
-	def dispatch CharSequence code(ConditionalExpression it) '''«condition.code» ? «trueCase.code» : «falseCase.code»'''
-
-	def dispatch CharSequence code(Expression it) '''#error TODO: generate code for «getClass().name»'''
-
-	/* HANDLING LITERALS */
-	def dispatch CharSequence code(Literal it) '''#error unknown literal type «getClass().name» '''
-
-	def dispatch CharSequence code(NullLiteral it) '''«Naming::NULL_STRING»'''
-
-	def dispatch CharSequence code(StringLiteral it) '''"«value.escaped»"'''
-
-	def String escaped(String it) {
-		return it.replace("\"", "\\\"");
-	}
-
-	def dispatch CharSequence code(BoolLiteral it) '''«IF value»true«ELSE»false«ENDIF»'''
-
-	def dispatch CharSequence code(IntLiteral it) '''«value.toString»'''
-
-	def dispatch CharSequence code(DoubleLiteral it) '''«value.toString»'''
-	
-	def dispatch CharSequence code(FloatLiteral it) '''«value.toString»'''
-
-	def dispatch CharSequence code(HexLiteral it) '''0x«Integer::toHexString(value)»'''
-	
-	def dispatch CharSequence code(BinaryLiteral it) '''0b«Integer::toBinaryString(value)»'''
-
-	def dispatch CharSequence code(PrimitiveValueExpression it) '''«value.code»'''
-
-	/* Statements */
-	def dispatch CharSequence code(AssignmentExpression it) '''«varRef.code» «operator.literal» «expression.code»'''
-
-	def dispatch CharSequence code(EventRaisingExpression it) '''
-	«IF value != null»
-		«event.definition.event.valueAccess» = «value.code»;
-	«ENDIF»
-	«event.definition.event.access» = true'''
-
-	def dispatch CharSequence code(LogicalRelationExpression it) '''
-	«IF isSame(leftOperand.infer.type, getType(GenericTypeSystem.STRING))»
-		(strcmp(«leftOperand.code», «rightOperand.code») «operator.literal» 0)
-	«ELSE»«leftOperand.code» «operator.literal» «rightOperand.code»«ENDIF»'''
-
-	/* TODO: check if event is active */
-	def dispatch CharSequence code(EventValueReferenceExpression it) '''«value.definition.event.valueAccess»'''
-
-	def dispatch CharSequence code(ActiveStateReferenceExpression it) '''«flow.stateActiveFctID»(«value.shortName»)'''
-
-	def dispatch CharSequence code(ParenthesizedExpression it) '''(«expression.code»)'''
-
-	def dispatch CharSequence code(TypeCastExpression it) '''((«type.getTargetLanguageName») «operand.code»)'''
-
-}

+ 2 - 2
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/FlowCode.xtend

@@ -28,8 +28,8 @@ import org.yakindu.sct.model.sexec.If
 
 class FlowCode extends org.yakindu.sct.generator.c.FlowCode {
 	
-	@Inject extension Naming naming
-	@Inject extension ExpressionCode expressions
+	@Inject extension CppNaming naming
+	@Inject extension CppExpressionsGenerator expressions
 	@Inject extension Navigation
 	@Inject extension INamingService
 	

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineHeader.xtend

@@ -33,7 +33,7 @@ import org.yakindu.sct.model.stext.stext.VariableDefinition
 
 class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader {
 
-	@Inject protected extension Naming
+	@Inject protected extension CppNaming
 	@Inject protected extension Navigation
 	@Inject protected extension ICodegenTypeSystemAccess
 	@Inject protected extension GenmodelEntriesExtension

+ 2 - 2
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineImplementation.xtend

@@ -30,13 +30,13 @@ import static org.eclipse.xtext.util.Strings.*
 
 class StatemachineImplementation implements IContentTemplate {
 	
-	@Inject protected extension Naming
+	@Inject protected extension CppNaming
 	@Inject protected extension Navigation
 	@Inject protected extension FlowCode
 	@Inject protected extension GenmodelEntriesExtension
 	@Inject protected extension ICodegenTypeSystemAccess
 	@Inject protected extension INamingService
-	@Inject protected extension ExpressionCode
+	@Inject protected extension CppExpressionsGenerator
 	@Inject protected extension StateVectorExtensions
 	@Inject protected extension EventCode
 	

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/StatemachineInterface.xtend

@@ -19,7 +19,7 @@ import org.yakindu.sct.model.sgen.GeneratorEntry
 class StatemachineInterface implements IContentTemplate {
 	
 	@Inject
-	extension Naming
+	extension CppNaming
 	
 	@Inject
 	extension GenmodelEntries

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/TimedStatemachineInterface.xtend

@@ -19,7 +19,7 @@ import org.yakindu.sct.model.sgen.GeneratorEntry
 class TimedStatemachineInterface implements IContentTemplate {
 	
 	@Inject
-	extension Naming
+	extension CppNaming
 	
 	@Inject
 	extension GenmodelEntries

+ 1 - 1
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/TimerInterface.xtend

@@ -19,7 +19,7 @@ import org.yakindu.sct.model.sgen.GeneratorEntry
 class TimerInterface implements IContentTemplate {
 	
 	@Inject
-	extension Naming
+	extension CppNaming
 	
 	@Inject
 	extension GenmodelEntries

+ 3 - 3
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/Types.xtend

@@ -19,7 +19,7 @@ import org.yakindu.sct.model.sgen.GeneratorEntry
 
 class Types implements IContentTemplate {
 
-	@Inject extension Naming
+	@Inject extension CppNaming
 	@Inject extension GenmodelEntries
 
 	override content(ExecutionFlow it, GeneratorEntry entry, IGenArtifactConfigurations locations) '''
@@ -43,8 +43,8 @@ class Types implements IContentTemplate {
 		
 		typedef intptr_t       sc_eventid;
 		
-		#ifndef «Naming::NULL_STRING»
-			#define «Naming::NULL_STRING» 0
+		#ifndef «CppNaming::NULL_STRING»
+			#define «CppNaming::NULL_STRING» 0
 		#endif
 		
 		#endif /* «typesModule.define»_H_ */

+ 2 - 3
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/eventdriven/EventDrivenExpressionCode.xtend

@@ -12,14 +12,13 @@
 
 import com.google.inject.Inject
 import org.yakindu.base.types.Direction
-import org.yakindu.sct.generator.cpp.ExpressionCode
+import org.yakindu.sct.generator.cpp.CppExpressionsGenerator
 import org.yakindu.sct.model.stext.stext.EventRaisingExpression
-import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
 
 /**
  * @author René Beckmann - Initial contribution and API
  */
-class EventDrivenExpressionCode extends ExpressionCode {
+class EventDrivenExpressionCode extends CppExpressionsGenerator {
 	@Inject extension EventNaming eventNaming
 	
 	override dispatch CharSequence code(EventRaisingExpression it) {

+ 3 - 5
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/eventdriven/EventNaming.xtend

@@ -12,18 +12,16 @@ package org.yakindu.sct.generator.cpp.eventdriven
 
 import com.google.inject.Inject
 import org.yakindu.base.types.Event
-import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
-import org.yakindu.sct.generator.cpp.Naming
+import org.yakindu.sct.generator.cpp.CppNaming
 import org.yakindu.sct.generator.cpp.Navigation
-import org.yakindu.sct.generator.cpp.features.GenmodelEntriesExtension
 import org.yakindu.sct.model.sexec.ExecutionFlow
 import org.yakindu.sct.model.sexec.naming.INamingService
-import org.yakindu.sct.model.sgen.GeneratorEntry
+
 /**
  * @author René Beckmann - Initial contribution and API
  */
 class EventNaming {
-	@Inject extension Naming
+	@Inject extension CppNaming
 	@Inject extension Navigation
 	@Inject extension INamingService
 	

+ 3 - 4
plugins/org.yakindu.sct.generator.cpp/src/org/yakindu/sct/generator/cpp/eventdriven/StatechartEvents.xtend

@@ -12,21 +12,20 @@ package org.yakindu.sct.generator.cpp.eventdriven
 
 import com.google.inject.Inject
 import org.yakindu.base.types.Direction
-import org.yakindu.sct.generator.c.IContentTemplate
-import org.yakindu.sct.generator.c.IGenArtifactConfigurations
 import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
-import org.yakindu.sct.generator.cpp.Naming
+import org.yakindu.sct.generator.cpp.CppNaming
 import org.yakindu.sct.generator.cpp.Navigation
 import org.yakindu.sct.generator.cpp.features.GenmodelEntriesExtension
 import org.yakindu.sct.model.sexec.ExecutionFlow
 import org.yakindu.sct.model.sexec.naming.INamingService
 import org.yakindu.sct.model.sgen.GeneratorEntry
 import org.yakindu.sct.model.stext.stext.EventDefinition
+
 /**
  * @author René Beckmann - Initial contribution and API
  */
 class StatechartEvents {
-	@Inject protected extension Naming
+	@Inject protected extension CppNaming
 	@Inject protected extension Navigation
 	@Inject protected extension ICodegenTypeSystemAccess
 	@Inject protected extension GenmodelEntriesExtension

+ 30 - 78
plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/ExpressionCode.xtend

@@ -1,24 +1,23 @@
+/** 
+ * Copyright (c) 2015 committers of YAKINDU and others. 
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution, and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * Contributors:
+ * committers of YAKINDU - initial API and implementation
+ * 
+ */
 package org.yakindu.sct.generator.csharp
 
 import com.google.inject.Inject
 import java.util.List
 import org.eclipse.emf.ecore.EObject
 import org.yakindu.base.expressions.expressions.AssignmentExpression
-import org.yakindu.base.expressions.expressions.BoolLiteral
-import org.yakindu.base.expressions.expressions.ConditionalExpression
-import org.yakindu.base.expressions.expressions.DoubleLiteral
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression
 import org.yakindu.base.expressions.expressions.FeatureCall
-import org.yakindu.base.expressions.expressions.FloatLiteral
-import org.yakindu.base.expressions.expressions.HexLiteral
-import org.yakindu.base.expressions.expressions.IntLiteral
 import org.yakindu.base.expressions.expressions.LogicalRelationExpression
-import org.yakindu.base.expressions.expressions.NullLiteral
-import org.yakindu.base.expressions.expressions.ParenthesizedExpression
-import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
 import org.yakindu.base.expressions.expressions.RelationalOperator
-import org.yakindu.base.expressions.expressions.StringLiteral
-import org.yakindu.base.expressions.expressions.TypeCastExpression
 import org.yakindu.base.types.Declaration
 import org.yakindu.base.types.Event
 import org.yakindu.base.types.Operation
@@ -26,26 +25,24 @@ import org.yakindu.base.types.Property
 import org.yakindu.base.types.inferrer.ITypeSystemInferrer
 import org.yakindu.base.types.typesystem.GenericTypeSystem
 import org.yakindu.base.types.typesystem.ITypeSystem
-import org.yakindu.sct.generator.core.templates.Expressions
-import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
+import org.yakindu.sct.generator.core.templates.ExpressionsGenerator
 import org.yakindu.sct.model.sexec.TimeEvent
 import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
 import org.yakindu.sct.model.stext.stext.EventRaisingExpression
 import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
 import org.yakindu.sct.model.stext.stext.OperationDefinition
 
-class ExpressionCode extends Expressions {
+class CSharpExpressionsGenerator extends ExpressionsGenerator {
 
-	@Inject extension Naming
-	@Inject extension Navigation
-	@Inject extension ITypeSystem
-	@Inject extension ITypeSystemInferrer
-	@Inject extension ICodegenTypeSystemAccess
+	@Inject protected extension Naming
+	@Inject protected extension Navigation
+	@Inject protected extension ITypeSystem
+	@Inject protected extension ITypeSystemInferrer
 
 	private var List<TimeEvent> timeEvents;
 
 	def private getTimeEvents(TimeEvent it) {
-		if (timeEvents == null) {
+		if (timeEvents === null) {
 			timeEvents = flow.timeEvents
 		}
 		return timeEvents
@@ -55,50 +52,9 @@ class ExpressionCode extends Expressions {
 		return context + "operationCallback." + name.asEscapedIdentifier;
 	}
 
-	def dispatch CharSequence code(PrimitiveValueExpression primValue) {
-		primValue.value.code;
-	}
-
-	def dispatch CharSequence code(ParenthesizedExpression e) {
-		"(" + e.expression.code.toString.trim + ")";
-	}
-
 	/* Assignment */
-	def dispatch CharSequence code(AssignmentExpression it) {
-		varRef.code.toString.trim  + " " +  operator.literal + " " + expression.code.toString.trim
-	}
-
-	/* Literals */
-	def dispatch CharSequence code(BoolLiteral expression) {
-		expression.value.toString()
-	}
-
-	def dispatch CharSequence code(IntLiteral expression) {
-		expression.value.toString();
-	}
-
-	def dispatch CharSequence code(DoubleLiteral expression) {
-		expression.value.toString();
-	}
-
-	def dispatch CharSequence code(FloatLiteral expression) {
-		expression.value.toString();
-	}
-
-	def dispatch CharSequence code(NullLiteral expression) {
-		'null'
-	}
-
-	def dispatch CharSequence code(StringLiteral expression) {
-		"\"" + expression.value.toString().escaped + "\""
-	}
-
-	def CharSequence escaped(String it) {
-		return it.replace("\"", "\\\"");
-	}
-
-	def dispatch CharSequence code(ConditionalExpression expression) {
-		expression.condition.code.toString.trim + ' ? ' + expression.trueCase.code + ' : ' + expression.falseCase.code
+	override dispatch CharSequence code(AssignmentExpression it) {
+		varRef.code.toString.trim + " " + operator.literal + " " + expression.code.toString.trim
 	}
 
 	def dispatch CharSequence code(LogicalRelationExpression expression) {
@@ -123,7 +79,7 @@ class ExpressionCode extends Expressions {
 	}
 
 	def dispatch CharSequence code(EventRaisingExpression it) {
-		if (value != null) {
+		if (value !== null) {
 			event.definition.context + "raise" + event.definition.name.toFirstUpper + "(" + value.code + ")"
 		} else {
 			event.definition.context + "raise" + event.definition.name.toFirstUpper + "()"
@@ -151,43 +107,39 @@ class ExpressionCode extends Expressions {
 
 	def dispatch CharSequence code(Declaration it) {
 		context + name.asEscapedIdentifier
-		}
+	}
 
 	def dispatch CharSequence code(TimeEvent it) {
 		"timeEvents[" + getTimeEvents.indexOf(it) + "]"
 	}
 
-	def dispatch CharSequence code(TypeCastExpression it) {
-		'''((«type.getTargetLanguageName») «operand.code»)'''
-	}
-
 	def dispatch CharSequence getContext(Property it) {
 		if (it.const) {
 			return getConstContext(it)
 		}
-		if (scope != null) {
+		if (scope !== null) {
 			return scope.interfaceName.asEscapedIdentifier + "."
-			}
-		return ""
 		}
-	
-	def getConstContext(Property it){
-		if (scope != null) {
+		return ""
+	}
+
+	def getConstContext(Property it) {
+		if (scope !== null) {
 			return scope.interfaceName + "."
-		}else{
+		} else {
 			return it.flow.statemachineInterfaceName + "."
 		}
 	}
 
 	def dispatch CharSequence getContext(Event it) {
-		if (scope != null) {
+		if (scope !== null) {
 			return scope.interfaceName.asEscapedIdentifier + "."
 		}
 		return ""
 	}
 
 	def dispatch CharSequence getContext(OperationDefinition it) {
-		if (scope != null) {
+		if (scope !== null) {
 			return scope.interfaceName.asEscapedIdentifier + "."
 		}
 		return ""

+ 1 - 1
plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/FlowCode.xtend

@@ -23,7 +23,7 @@ import org.yakindu.sct.model.sexec.TimeEvent
 class FlowCode {
 	
 	@Inject extension Naming
-	@Inject extension ExpressionCode
+	@Inject extension CSharpExpressionsGenerator
 	@Inject extension SExecExtensions
 	
 	private var List<TimeEvent> timeEvents;

+ 1 - 1
plugins/org.yakindu.sct.generator.csharp/src/org/yakindu/sct/generator/csharp/StatemachineInterface.xtend

@@ -31,7 +31,7 @@ class StatemachineInterface {
 	@Inject extension Navigation
 	@Inject extension ITypeSystem
 	@Inject extension ICodegenTypeSystemAccess
-	@Inject extension ExpressionCode
+	@Inject extension CSharpExpressionsGenerator
 	@Inject Beautifier beautifier
 
 	def generateStatemachineInterface(ExecutionFlow flow, GeneratorEntry entry, IFileSystemAccess fsa) {

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/FlowCode.xtend

@@ -35,7 +35,7 @@ class FlowCode {
 	
 	@Inject extension Naming
 	@Inject extension INamingService
-	@Inject extension ExpressionCode
+	@Inject extension JavaExpressionsGenerator
 	@Inject extension SExecExtensions
 	
 	private var List<TimeEvent> timeEvents;

+ 14 - 72
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/ExpressionCode.xtend

@@ -16,49 +16,37 @@ import org.eclipse.emf.ecore.EObject
 import org.yakindu.base.expressions.expressions.ArgumentExpression
 import org.yakindu.base.expressions.expressions.AssignmentExpression
 import org.yakindu.base.expressions.expressions.AssignmentOperator
-import org.yakindu.base.expressions.expressions.BoolLiteral
-import org.yakindu.base.expressions.expressions.ConditionalExpression
-import org.yakindu.base.expressions.expressions.DoubleLiteral
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression
 import org.yakindu.base.expressions.expressions.Expression
 import org.yakindu.base.expressions.expressions.FeatureCall
-import org.yakindu.base.expressions.expressions.FloatLiteral
-import org.yakindu.base.expressions.expressions.HexLiteral
-import org.yakindu.base.expressions.expressions.IntLiteral
 import org.yakindu.base.expressions.expressions.LogicalRelationExpression
-import org.yakindu.base.expressions.expressions.NullLiteral
-import org.yakindu.base.expressions.expressions.ParenthesizedExpression
 import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
 import org.yakindu.base.expressions.expressions.RelationalOperator
-import org.yakindu.base.expressions.expressions.StringLiteral
-import org.yakindu.base.expressions.expressions.TypeCastExpression
 import org.yakindu.base.types.Declaration
 import org.yakindu.base.types.Operation
 import org.yakindu.base.types.Property
 import org.yakindu.base.types.inferrer.ITypeSystemInferrer
 import org.yakindu.base.types.typesystem.GenericTypeSystem
 import org.yakindu.base.types.typesystem.ITypeSystem
-import org.yakindu.sct.generator.core.templates.Expressions
-import org.yakindu.sct.generator.core.types.ICodegenTypeSystemAccess
+import org.yakindu.sct.generator.core.templates.ExpressionsGenerator
 import org.yakindu.sct.model.sexec.TimeEvent
 import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
 import org.yakindu.sct.model.stext.stext.EventRaisingExpression
 import org.yakindu.sct.model.stext.stext.EventValueReferenceExpression
 import org.yakindu.sct.model.stext.stext.OperationDefinition
 
-class ExpressionCode extends Expressions {
+class JavaExpressionsGenerator extends ExpressionsGenerator {
 
-	@Inject extension Naming
-	@Inject extension JavaNamingService
-	@Inject extension Navigation
-	@Inject extension ITypeSystem
-	@Inject extension ITypeSystemInferrer
-	@Inject extension ICodegenTypeSystemAccess
+	@Inject protected extension Naming
+	@Inject protected extension JavaNamingService
+	@Inject protected extension Navigation
+	@Inject protected extension ITypeSystem
+	@Inject protected extension ITypeSystemInferrer
 
 	private var List<TimeEvent> timeEvents;
 
 	def private getTimeEvents(TimeEvent it) {
-		if (timeEvents == null) {
+		if (timeEvents === null) {
 			timeEvents = flow.timeEvents
 		}
 		return timeEvents
@@ -68,16 +56,8 @@ class ExpressionCode extends Expressions {
 		return getContext + "operationCallback." + name.asEscapedIdentifier;
 	}
 
-	def dispatch String code(PrimitiveValueExpression primValue) {
-		primValue.value.code.toString;
-	}
-
-	def dispatch String code(ParenthesizedExpression e) {
-		"(" + e.expression.code + ")";
-	}
-
 	/* Assignment */
-	def dispatch String code(AssignmentExpression it) {
+	override dispatch String code(AssignmentExpression it) {
 		if (varRef.definition instanceof Property) {
 			var property = varRef.definition as Property
 			if (eContainer instanceof Expression) {
@@ -106,40 +86,6 @@ class ExpressionCode extends Expressions {
 		return cmd
 	}
 
-	/* Literals */
-	def dispatch String code(BoolLiteral expression) {
-		expression.value.toString()
-	}
-
-	def dispatch String code(IntLiteral expression) {
-		expression.value.toString();
-	}
-
-	def dispatch String code(DoubleLiteral expression) {
-		expression.value.toString();
-	}
-
-	def dispatch String code(FloatLiteral expression) {
-		expression.value.toString();
-	}
-
-	def dispatch String code(NullLiteral expression) {
-		'null'
-	}
-
-	def dispatch String code(StringLiteral expression) {
-		"\"" + expression.value.toString().escaped + "\""
-	}
-
-	def String escaped(String it) {
-		return it.replace("\"", "\\\"");
-	}
-
-
-	def dispatch String code(ConditionalExpression expression) {
-		expression.condition.code + ' ? ' + expression.trueCase.code + ' : ' + expression.falseCase.code
-	}
-
 	def dispatch String code(LogicalRelationExpression expression) {
 		if (isSame(expression.leftOperand.infer.type, getType(GenericTypeSystem.STRING))) {
 			expression.logicalString
@@ -162,7 +108,7 @@ class ExpressionCode extends Expressions {
 	}
 
 	def dispatch String code(EventRaisingExpression it) {
-		if (value != null) {
+		if (value !== null) {
 			event.definition.getContext + "raise" + event.definition.name.toFirstUpper + "(" + value.code + ")"
 		} else {
 			event.definition.getContext + "raise" + event.definition.name.toFirstUpper + "()"
@@ -210,20 +156,16 @@ class ExpressionCode extends Expressions {
 		"timeEvents[" + getTimeEvents.indexOf(it) + "]"
 	}
 
-	def dispatch String code(TypeCastExpression it) {
-		'''((«type.getTargetLanguageName») «operand.code»)'''
-	}
-
 	def dispatch String getContext(Property it) {
-		if (scope != null) {
+		if (scope !== null) {
 			return scope.interfaceName.asEscapedIdentifier + "."
 		}
 		return ""
 	}
-	
+
 	def dispatch String getStaticContext(Property it) {
 		if (it.const) {
-			if (scope != null) {
+			if (scope !== null) {
 				var result = scope.interfaceName + "."
 				return result
 			} else {
@@ -235,7 +177,7 @@ class ExpressionCode extends Expressions {
 	}
 
 	def dispatch String getContext(Declaration it) {
-		if (scope != null) {
+		if (scope !== null) {
 			return scope.interfaceName.asEscapedIdentifier + "."
 		}
 		return ""

+ 1 - 1
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/StatemachineInterface.xtend

@@ -34,7 +34,7 @@ class StatemachineInterface {
 	@Inject extension Navigation
 	@Inject extension ITypeSystem
 	@Inject extension ICodegenTypeSystemAccess
-	@Inject extension ExpressionCode
+	@Inject extension JavaExpressionsGenerator
 
 	@Inject ICoreLibraryHelper outletFeatureHelper