Browse Source

Pro issue 568 (#1169)

* Refactor code for better adjustability in subclasses

* Remove unused functions and imports
Thomas Kutz 8 years ago
parent
commit
89032d3535

+ 12 - 19
plugins/org.yakindu.sct.generator.c/src/org/yakindu/sct/generator/c/ExpressionCode.xtend

@@ -12,11 +12,7 @@ package org.yakindu.sct.generator.c
 
 import com.google.inject.Inject
 import org.yakindu.base.expressions.expressions.AssignmentExpression
-import org.yakindu.base.expressions.expressions.BitwiseAndExpression
-import org.yakindu.base.expressions.expressions.BitwiseOrExpression
-import org.yakindu.base.expressions.expressions.BitwiseXorExpression
 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
@@ -30,18 +26,18 @@ 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.NumericalAddSubtractExpression
-import org.yakindu.base.expressions.expressions.NumericalMultiplyDivideExpression
-import org.yakindu.base.expressions.expressions.NumericalUnaryExpression
 import org.yakindu.base.expressions.expressions.ParenthesizedExpression
 import org.yakindu.base.expressions.expressions.PrimitiveValueExpression
-import org.yakindu.base.expressions.expressions.ShiftExpression
 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
+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.model.sexec.naming.INamingService
 import org.yakindu.sct.model.stext.stext.ActiveStateReferenceExpression
@@ -49,18 +45,15 @@ 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.types.Operation
-import org.yakindu.base.types.Enumerator
-import org.yakindu.sct.generator.core.templates.Expressions
 
 class ExpressionCode extends Expressions {
 
-	@Inject extension Naming
-	@Inject extension Navigation
-	@Inject extension ITypeSystem
-	@Inject extension ITypeSystemInferrer
-	@Inject extension INamingService
-	@Inject extension ICodegenTypeSystemAccess
+	@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 String code(ElementReferenceExpression it) {
@@ -85,7 +78,7 @@ class ExpressionCode extends Expressions {
 	def dispatch String code(ElementReferenceExpression it, Operation target) '''«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 
-	def dispatch String code(ElementReferenceExpression it, org.yakindu.base.types.Property target) '''«target.access»'''
+	def dispatch String code(ElementReferenceExpression it, Property target) '''«target.access»'''
 
 	def dispatch String code(FeatureCall it, OperationDefinition target) '''«target.access»(«scHandle»«FOR arg : args BEFORE ', ' SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
@@ -93,7 +86,7 @@ class ExpressionCode extends Expressions {
 	def dispatch String code(FeatureCall it, Operation target) '''«it.owner.code».«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
 
-	def dispatch String code(FeatureCall it, org.yakindu.base.types.Property target) '''«it.owner.code».«target.access»'''
+	def dispatch String code(FeatureCall it, Property target) '''«it.owner.code».«target.access»'''
 	
 	def dispatch String code(FeatureCall it, Enumerator target) '''«target.access»'''
 

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

@@ -13,6 +13,7 @@ package org.yakindu.sct.generator.cpp
 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.ConditionalExpression
 import org.yakindu.base.expressions.expressions.DoubleLiteral
 import org.yakindu.base.expressions.expressions.ElementReferenceExpression
 import org.yakindu.base.expressions.expressions.Expression
@@ -39,16 +40,15 @@ 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
 
 class ExpressionCode extends Expressions {
 
-	@Inject extension Naming
-	@Inject extension Navigation
-	@Inject extension ITypeSystem
-	@Inject extension ITypeSystemInferrer
-	@Inject extension INamingService
-	@Inject extension ICodegenTypeSystemAccess
+	@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) {
@@ -65,10 +65,10 @@ class ExpressionCode extends Expressions {
 
 	def dispatch CharSequence code(ElementReferenceExpression it, OperationDefinition target) '''«target.access»(«FOR arg : args SEPARATOR ', '»«arg.
 		code»«ENDFOR»)'''
-
+		
 	def dispatch CharSequence code(FeatureCall it, OperationDefinition target) '''«target.access»(«FOR arg : args 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»'''

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

@@ -28,6 +28,7 @@ import org.yakindu.sct.model.stext.stext.InterfaceScope
 import org.yakindu.sct.model.stext.stext.InternalScope
 import org.yakindu.sct.model.stext.stext.StatechartScope
 import org.yakindu.sct.model.stext.stext.VariableDefinition
+import org.yakindu.sct.model.stext.stext.ImportScope
 
 class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader {
 
@@ -47,11 +48,7 @@ class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader
 		#ifndef «module().define»_H_
 		#define «module().define»_H_
 		
-		#include "«(typesModule.h).relativeTo(module.h)»"
-		#include "«statemachineInterface.h»"
-		«IF timed»
-			#include "«(timedStatemachineInterface.h).relativeTo(module.h)»"
-		«ENDIF»
+		«includes(artifactConfigs)»
 		
 		/*! \file Header of the state machine '«name»'.
 		*/
@@ -88,6 +85,14 @@ class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader
 		#endif /* «module().define»_H_ */
 	'''
 	}
+	
+	override includes(ExecutionFlow it, extension IGenArtifactConfigurations artifactConfigs) '''
+		#include "«(typesModule.h).relativeTo(module.h)»"
+		#include "«statemachineInterface.h»"
+		«IF timed»
+			#include "«(timedStatemachineInterface.h).relativeTo(module.h)»"
+		«ENDIF»
+	'''
 
 	def protected getInterfaceExtensions(ExecutionFlow flow) {
 
@@ -203,7 +208,7 @@ class StatemachineHeader extends org.yakindu.sct.generator.c.StatemachineHeader
 		«IF hasHistory»«statesEnumType» historyVector[«historyStatesConst»];«ENDIF»
 		sc_ushort stateConfVectorPosition;
 		
-		«FOR s : scopes.filter(typeof(StatechartScope))»
+		«FOR s : scopes.filter(typeof(StatechartScope)).filter[!(it instanceof ImportScope)]»
 			«s.interfaceName» «s.instance»;
 			«IF s.hasOperations && !entry.useStaticOPC»«s.interfaceOCBName»* «s.OCB_Instance»;«ENDIF»
 		«ENDFOR»