Browse Source

Added type checker for SGen

Andreas Mülder 13 years ago
parent
commit
13bad25dca
38 changed files with 993 additions and 68724 deletions
  1. 5 5
      plugins/org.yakindu.sct.generator.core/library/CoreFeatureTypeLibrary.xmi
  2. 1 1
      plugins/org.yakindu.sct.generator.core/library/XpandFeatureTypeLibrary.xmi
  3. 5 4
      plugins/org.yakindu.sct.generator.genmodel.ui/.settings/org.eclipse.core.resources.prefs
  4. 3 0
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/AbstractSGenProposalProvider.java
  5. 1 1
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/SGenParser.java
  6. 0 11135
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.g
  7. 0 109
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.tokens
  8. 0 2461
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenLexer.java
  9. 0 33470
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenParser.java
  10. 0 82
      plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/internal/SGenActivator.java
  11. 1 0
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/action/GenerateModelAction.java
  12. 30 1
      plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java
  13. 14 3
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/SGen.xmi
  14. 0 3676
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g
  15. 0 109
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.tokens
  16. 0 2460
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenLexer.java
  17. 0 12595
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenParser.java
  18. 0 1249
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSemanticSequencer.java
  19. 0 117
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSyntacticSequencer.java
  20. 0 1021
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/services/SGenGrammarAccess.java
  21. 0 23
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/validation/AbstractSGenJavaValidator.java
  22. 10 3
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/SGen.xtext
  23. 63 22
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java
  24. 0 22
      plugins/org.yakindu.sct.generator.genmodel/xtend-gen/org/yakindu/sct/generator/genmodel/jvmmodel/SGenJvmModelInferrer.java
  25. 2 2
      plugins/org.yakindu.sct.generator.java/library/FeatureTypeLibrary.xmi
  26. 11 0
      plugins/org.yakindu.sct.model.sgen/model/emf/sgen.ecore
  27. 10 1
      plugins/org.yakindu.sct.model.sgen/model/emf/sgen.genmodel
  28. 58 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/FeatureParameter.java
  29. 15 37
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/FeatureParameterValue.java
  30. 28 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/FeatureType.java
  31. 262 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/ParameterTypes.java
  32. 118 2
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/SGenPackage.java
  33. 120 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/FeatureParameterImpl.java
  34. 57 111
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/FeatureParameterValueImpl.java
  35. 69 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/FeatureTypeImpl.java
  36. 52 1
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenFactoryImpl.java
  37. 47 0
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenPackageImpl.java
  38. 11 1
      plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/sgen.ecore

+ 5 - 5
plugins/org.yakindu.sct.generator.core/library/CoreFeatureTypeLibrary.xmi

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="ASCII"?>
-<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Core">
+<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Core">
   <types name="Outlet">
-    <parameters name="targetProject"/>
-    <parameters name="targetFolder"/>
+    <parameters name="targetProject" parameterType="STRING"/>
+    <parameters name="targetFolder" parameterType="STRING"/>
   </types>
-  <types name="Debug">
-    <parameters name="dumpSexec"/>
+  <types name="Debug" optional="true">
+    <parameters name="dumpSexec" parameterType="BOOLEAN"/>
   </types>
 </sgen:FeatureTypeLibrary>

+ 1 - 1
plugins/org.yakindu.sct.generator.core/library/XpandFeatureTypeLibrary.xmi

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ASCII"?>
-<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Xpand">
+<sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Xpand">
   <types name="Template">
     <parameters name="templateProject"/>
     <parameters name="templatePath"/>

+ 5 - 4
plugins/org.yakindu.sct.generator.genmodel.ui/.settings/org.eclipse.core.resources.prefs

@@ -1,4 +1,5 @@
-#Thu Nov 24 11:01:00 CET 2011
-eclipse.preferences.version=1
-encoding//src/org/yakindu/sct/generator/genmodel/ui/wizard/DefaultTemplate.xpt=ISO-8859-1
-encoding//xtend-gen/org/yakindu/sct/generator/genmodel/ui/wizard/ProjectTemplate.java=UTF-8
+#Thu Nov 24 14:19:53 CET 2011
+eclipse.preferences.version=1
+encoding//src/org/yakindu/sct/generator/genmodel/ui/wizard/DefaultTemplate.xpt=ISO-8859-1
+encoding//src/org/yakindu/sct/generator/genmodel/ui/wizard/ProjectTemplate.xtend=UTF-8
+encoding//xtend-gen/org/yakindu/sct/generator/genmodel/ui/wizard/ProjectTemplate.java=UTF-8

+ 3 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/AbstractSGenProposalProvider.java

@@ -57,6 +57,9 @@ public class AbstractSGenProposalProvider extends XbaseProposalProvider {
 	public void complete_XPrimaryExpression(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_XLiteral(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_QID(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}

+ 1 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/SGenParser.java

@@ -38,6 +38,7 @@ public class SGenParser extends AbstractContentAssistParser {
 				private static final long serialVersionUID = 1L;
 				{
 					put(grammarAccess.getXPrimaryExpressionAccess().getAlternatives(), "rule__XPrimaryExpression__Alternatives");
+					put(grammarAccess.getXLiteralAccess().getAlternatives(), "rule__XLiteral__Alternatives");
 					put(grammarAccess.getQIDAccess().getAlternatives_1_0(), "rule__QID__Alternatives_1_0");
 					put(grammarAccess.getXAssignmentAccess().getAlternatives(), "rule__XAssignment__Alternatives");
 					put(grammarAccess.getOpEqualityAccess().getAlternatives(), "rule__OpEquality__Alternatives");
@@ -51,7 +52,6 @@ public class SGenParser extends AbstractContentAssistParser {
 					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1(), "rule__XMemberFeatureCall__Alternatives_1");
 					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_0_0_1(), "rule__XMemberFeatureCall__Alternatives_1_1_0_0_1");
 					put(grammarAccess.getXMemberFeatureCallAccess().getAlternatives_1_1_3_1(), "rule__XMemberFeatureCall__Alternatives_1_1_3_1");
-					put(grammarAccess.getXLiteralAccess().getAlternatives(), "rule__XLiteral__Alternatives");
 					put(grammarAccess.getXExpressionInsideBlockAccess().getAlternatives(), "rule__XExpressionInsideBlock__Alternatives");
 					put(grammarAccess.getXVariableDeclarationAccess().getAlternatives_1(), "rule__XVariableDeclaration__Alternatives_1");
 					put(grammarAccess.getXVariableDeclarationAccess().getAlternatives_2(), "rule__XVariableDeclaration__Alternatives_2");

File diff suppressed because it is too large
+ 0 - 11135
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.g


+ 0 - 109
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGen.tokens

@@ -1,109 +0,0 @@
-RULE_ID=4
-T__29=29
-T__28=28
-T__27=27
-T__26=26
-T__25=25
-T__24=24
-T__23=23
-T__22=22
-RULE_ANY_OTHER=10
-T__21=21
-T__20=20
-T__61=61
-T__60=60
-T__55=55
-T__56=56
-T__19=19
-T__57=57
-T__58=58
-T__51=51
-T__16=16
-T__52=52
-T__15=15
-T__53=53
-T__18=18
-T__54=54
-T__17=17
-T__12=12
-T__11=11
-T__14=14
-T__13=13
-T__59=59
-RULE_INT=5
-T__50=50
-T__42=42
-T__43=43
-T__40=40
-T__41=41
-T__46=46
-T__47=47
-T__44=44
-T__45=45
-T__48=48
-T__49=49
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__30=30
-T__31=31
-RULE_STRING=6
-T__32=32
-T__33=33
-T__34=34
-T__35=35
-T__36=36
-T__37=37
-T__38=38
-T__39=39
-RULE_WS=9
-'instanceof'=41
-'>='=19
-'/'=29
-'=='=17
-'>'=21
-'||'=13
-'*.'=59
-'&&'=14
-'for'=36
-'?.'=58
-'+'=25
-'.'=16
-'=>'=54
-'true'=61
-'catch'=53
-'extends'=56
-'+='=12
-'{'=37
-'as'=42
-'?'=55
-'var'=60
-'feature'=40
-'('=48
-':'=49
-'**'=28
-'-'=26
-'statechart'=39
-','=43
-']'=47
-'..'=24
-'!'=31
-'|'=46
-'val'=32
-'null'=51
-'typeof'=52
-'='=11
-'GeneratorModel'=35
-'::'=15
-')'=44
-'%'=30
-'->'=23
-'super'=33
-'case'=50
-'}'=38
-'<='=20
-'!='=18
-'false'=34
-'<'=22
-'*'=27
-'['=45
-'&'=57

File diff suppressed because it is too large
+ 0 - 2461
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenLexer.java


File diff suppressed because it is too large
+ 0 - 33470
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/contentassist/antlr/internal/InternalSGenParser.java


+ 0 - 82
plugins/org.yakindu.sct.generator.genmodel.ui/src-gen/org/yakindu/sct/generator/genmodel/ui/internal/SGenActivator.java

@@ -1,82 +0,0 @@
-/*
- * generated by Xtext
- */
-package org.yakindu.sct.generator.genmodel.ui.internal;
-
-import static com.google.inject.util.Modules.override;
-import static com.google.inject.Guice.createInjector;
-
-import org.apache.log4j.Logger;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * This class was generated. Customizations should only happen in a newly
- * introduced subclass. 
- */
-public class SGenActivator extends AbstractUIPlugin {
-
-	private Map<String,Injector> injectors = new HashMap<String,Injector>();
-	private static SGenActivator INSTANCE;
-
-	public Injector getInjector(String languageName) {
-		return injectors.get(languageName);
-	}
-	
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		INSTANCE = this;
-		try {
-			registerInjectorFor("org.yakindu.sct.generator.genmodel.SGen");
-			
-		} catch (Exception e) {
-			Logger.getLogger(getClass()).error(e.getMessage(), e);
-			throw e;
-		}
-	}
-	
-	protected void registerInjectorFor(String language) throws Exception {
-		injectors.put(language, createInjector(
-		  override(override(getRuntimeModule(language)).with(getSharedStateModule())).with(getUiModule(language))));
-	}
-	
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		injectors.clear();
-		INSTANCE = null;
-		super.stop(context);
-	}
-	
-	public static SGenActivator getInstance() {
-		return INSTANCE;
-	}
-	
-	protected Module getRuntimeModule(String grammar) {
-		if ("org.yakindu.sct.generator.genmodel.SGen".equals(grammar)) {
-		  return new org.yakindu.sct.generator.genmodel.SGenRuntimeModule();
-		}
-		
-		throw new IllegalArgumentException(grammar);
-	}
-	
-	protected Module getUiModule(String grammar) {
-		if ("org.yakindu.sct.generator.genmodel.SGen".equals(grammar)) {
-		  return new org.yakindu.sct.generator.genmodel.ui.SGenUiModule(this);
-		}
-		
-		throw new IllegalArgumentException(grammar);
-	}
-	
-	protected Module getSharedStateModule() {
-		return new org.eclipse.xtext.ui.shared.SharedStateModule();
-	}
-	
-}

+ 1 - 0
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/action/GenerateModelAction.java

@@ -44,6 +44,7 @@ import com.google.inject.Inject;
  * @author andreas muelder - Initial contribution and API
  * 
  */
+@SuppressWarnings("restriction")
 public class GenerateModelAction implements IObjectActionDelegate {
 
 	private ISelection selection;

+ 30 - 1
plugins/org.yakindu.sct.generator.genmodel.ui/src/org/yakindu/sct/generator/genmodel/ui/contentassist/SGenProposalProvider.java

@@ -1,21 +1,36 @@
+/**
+ * Copyright (c) 2011 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.genmodel.ui.contentassist;
 
+import java.util.ArrayList;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.Keyword;
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
 import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions.GeneratorDescriptor;
 
+import com.google.common.collect.Lists;
+
 /**
  * 
  * @author andreas muelder - Initial contribution and API
  * 
  */
+@SuppressWarnings("restriction")
 public class SGenProposalProvider extends AbstractSGenProposalProvider {
-
 	@Override
 	public void completeGeneratorModel_GeneratorId(EObject model,
 			Assignment assignment, ContentAssistContext context,
@@ -30,4 +45,18 @@ public class SGenProposalProvider extends AbstractSGenProposalProvider {
 		}
 	}
 
+	public void createProposals(ContentAssistContext context,
+			ICompletionProposalAcceptor acceptor) {
+		super.createProposals(context, acceptor);
+
+	}
+
+	protected boolean isKeywordWorthyToPropose(Keyword keyword) {
+		if (keyword.getValue().length() == 1) {
+			ArrayList<String> whiteList = Lists.newArrayList("{", "}", "=");
+			if (whiteList.contains(keyword.getValue()))
+				return true;
+		}
+		return super.isKeywordWorthyToPropose(keyword);
+	}
 }

+ 14 - 3
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/SGen.xmi

@@ -18,7 +18,7 @@
         <elements xsi:type="xtext:Keyword" value="GeneratorModel"/>
         <elements xsi:type="xtext:Keyword" value="for"/>
         <elements xsi:type="xtext:Assignment" feature="generatorId" operator="=">
-          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
         </elements>
         <elements xsi:type="xtext:Keyword" value="{"/>
         <elements xsi:type="xtext:Assignment" cardinality="+" feature="entries" operator="+=">
@@ -104,10 +104,21 @@
       </type>
       <alternatives xsi:type="xtext:Alternatives">
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.37"/>
-        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.23"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.26"/>
       </alternatives>
     </rules>
+    <rules xsi:type="xtext:ParserRule" name="XLiteral">
+      <type metamodel="/0/@metamodelDeclarations.2">
+        <classifier xsi:type="ecore:EClass" href="http://www.eclipse.org/xtext/xbase/Xbase#//XExpression"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.41"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.43"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.42"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.44"/>
+      </alternatives>
+    </rules>
     <rules xsi:type="xtext:ParserRule" name="QID">
       <type metamodel="/1/@metamodelDeclarations.2">
         <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
@@ -661,7 +672,7 @@
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.33"/>
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.28"/>
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.37"/>
-        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.23"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.27"/>
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.30"/>
         <elements xsi:type="xtext:RuleCall" rule="/1/@rules.31"/>

File diff suppressed because it is too large
+ 0 - 3676
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g


+ 0 - 109
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.tokens

@@ -1,109 +0,0 @@
-RULE_ID=4
-T__29=29
-T__28=28
-T__27=27
-T__26=26
-T__25=25
-T__24=24
-T__23=23
-T__22=22
-RULE_ANY_OTHER=10
-T__21=21
-T__20=20
-T__61=61
-T__60=60
-T__55=55
-T__56=56
-T__19=19
-T__57=57
-T__58=58
-T__51=51
-T__16=16
-T__52=52
-T__15=15
-T__53=53
-T__18=18
-T__54=54
-T__17=17
-T__12=12
-T__11=11
-T__14=14
-T__13=13
-T__59=59
-RULE_INT=5
-T__50=50
-T__42=42
-T__43=43
-T__40=40
-T__41=41
-T__46=46
-T__47=47
-T__44=44
-T__45=45
-T__48=48
-T__49=49
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__30=30
-T__31=31
-RULE_STRING=6
-T__32=32
-T__33=33
-T__34=34
-T__35=35
-T__36=36
-T__37=37
-T__38=38
-T__39=39
-RULE_WS=9
-'instanceof'=25
-'>='=26
-'=='=23
-'/'=36
-'>'=28
-'||'=21
-'*.'=41
-'&&'=22
-'for'=12
-'?.'=40
-'+'=32
-'.'=19
-'=>'=58
-'true'=54
-'catch'=57
-'extends'=60
-'+='=20
-'{'=13
-'as'=39
-'?'=59
-'feature'=16
-'var'=50
-'('=43
-':'=49
-'**'=35
-'-'=33
-'statechart'=15
-','=42
-']'=47
-'..'=31
-'!'=38
-'|'=46
-'val'=51
-'null'=55
-'typeof'=56
-'='=17
-'GeneratorModel'=11
-'::'=18
-')'=44
-'->'=30
-'%'=37
-'super'=52
-'case'=48
-'}'=14
-'<='=27
-'!='=24
-'false'=53
-'<'=29
-'*'=34
-'['=45
-'&'=61

File diff suppressed because it is too large
+ 0 - 2460
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenLexer.java


File diff suppressed because it is too large
+ 0 - 12595
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenParser.java


File diff suppressed because it is too large
+ 0 - 1249
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSemanticSequencer.java


+ 0 - 117
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSyntacticSequencer.java

@@ -1,117 +0,0 @@
-package org.yakindu.sct.generator.genmodel.serializer;
-
-import com.google.inject.Inject;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.IGrammarAccess;
-import org.eclipse.xtext.RuleCall;
-import org.eclipse.xtext.nodemodel.INode;
-import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
-import org.eclipse.xtext.serializer.analysis.GrammarAlias.GroupAlias;
-import org.eclipse.xtext.serializer.analysis.GrammarAlias.TokenAlias;
-import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
-import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
-import org.yakindu.sct.generator.genmodel.services.SGenGrammarAccess;
-
-@SuppressWarnings("restriction")
-public class AbstractSGenSyntacticSequencer extends AbstractSyntacticSequencer {
-
-	protected SGenGrammarAccess grammarAccess;
-	protected AbstractElementAlias match_XBlockExpression_SemicolonKeyword_2_1_q;
-	protected AbstractElementAlias match_XBooleanLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_FalseKeyword_1_0_RightParenthesisKeyword_2_p;
-	protected AbstractElementAlias match_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_a_NullKeyword_1_RightParenthesisKeyword_2_p;
-	protected AbstractElementAlias match_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_NullKeyword_1_RightParenthesisKeyword_2_p;
-	protected AbstractElementAlias match_XParenthesizedExpression_LeftParenthesisKeyword_0_a;
-	protected AbstractElementAlias match_XParenthesizedExpression_LeftParenthesisKeyword_0_p;
-	
-	@Inject
-	protected void init(IGrammarAccess access) {
-		grammarAccess = (SGenGrammarAccess) access;
-		match_XBlockExpression_SemicolonKeyword_2_1_q = new TokenAlias(true, false, grammarAccess.getXBlockExpressionAccess().getSemicolonKeyword_2_1());
-		match_XBooleanLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_FalseKeyword_1_0_RightParenthesisKeyword_2_p = new GroupAlias(false, false, new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0()), new TokenAlias(false, false, grammarAccess.getXBooleanLiteralAccess().getFalseKeyword_1_0()), new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2()));
-		match_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_a_NullKeyword_1_RightParenthesisKeyword_2_p = new GroupAlias(false, false, new TokenAlias(true, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0()), new TokenAlias(false, false, grammarAccess.getXNullLiteralAccess().getNullKeyword_1()), new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2()));
-		match_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_NullKeyword_1_RightParenthesisKeyword_2_p = new GroupAlias(false, false, new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0()), new TokenAlias(false, false, grammarAccess.getXNullLiteralAccess().getNullKeyword_1()), new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getRightParenthesisKeyword_2()));
-		match_XParenthesizedExpression_LeftParenthesisKeyword_0_a = new TokenAlias(true, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
-		match_XParenthesizedExpression_LeftParenthesisKeyword_0_p = new TokenAlias(false, true, grammarAccess.getXParenthesizedExpressionAccess().getLeftParenthesisKeyword_0());
-	}
-	
-	@Override
-	protected String getUnassignedRuleCallToken(RuleCall ruleCall, INode node) {
-		if(ruleCall.getRule() == grammarAccess.getOpSingleAssignRule())
-			return getOpSingleAssignToken(ruleCall, node);
-		return "";
-	}
-	
-	protected String getOpSingleAssignToken(RuleCall ruleCall, INode node) {
-		if (node != null)
-			return getTokenText(node);
-		return "=";
-	}
-	
-	@Override
-	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		if (!transition.isSyntacticallyAmbiguous())
-			return;
-		if(match_XBlockExpression_SemicolonKeyword_2_1_q.equals(transition.getAmbiguousSyntax()))
-			emit_XBlockExpression_SemicolonKeyword_2_1_q(semanticObject, transition, fromNode, toNode);
-		else if(match_XBooleanLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_FalseKeyword_1_0_RightParenthesisKeyword_2_p.equals(transition.getAmbiguousSyntax()))
-			emit_XBooleanLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_FalseKeyword_1_0_RightParenthesisKeyword_2_p(semanticObject, transition, fromNode, toNode);
-		else if(match_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_a_NullKeyword_1_RightParenthesisKeyword_2_p.equals(transition.getAmbiguousSyntax()))
-			emit_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_a_NullKeyword_1_RightParenthesisKeyword_2_p(semanticObject, transition, fromNode, toNode);
-		else if(match_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_NullKeyword_1_RightParenthesisKeyword_2_p.equals(transition.getAmbiguousSyntax()))
-			emit_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_NullKeyword_1_RightParenthesisKeyword_2_p(semanticObject, transition, fromNode, toNode);
-		else if(match_XParenthesizedExpression_LeftParenthesisKeyword_0_a.equals(transition.getAmbiguousSyntax()))
-			emit_XParenthesizedExpression_LeftParenthesisKeyword_0_a(semanticObject, transition, fromNode, toNode);
-		else if(match_XParenthesizedExpression_LeftParenthesisKeyword_0_p.equals(transition.getAmbiguousSyntax()))
-			emit_XParenthesizedExpression_LeftParenthesisKeyword_0_p(semanticObject, transition, fromNode, toNode);
-		else acceptNodes(transition, fromNode, toNode);
-	}
-
-	/**
-	 * Syntax:
-	 *     ';'?
-	 */
-	protected void emit_XBlockExpression_SemicolonKeyword_2_1_q(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('+ 'false' ')'+
-	 */
-	protected void emit_XBooleanLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_FalseKeyword_1_0_RightParenthesisKeyword_2_p(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('* 'null' ')'+
-	 */
-	protected void emit_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_a_NullKeyword_1_RightParenthesisKeyword_2_p(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('+ 'null' ')'+
-	 */
-	protected void emit_XNullLiteral_XParenthesizedExpression_LeftParenthesisKeyword_0_p_NullKeyword_1_RightParenthesisKeyword_2_p(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('*
-	 */
-	protected void emit_XParenthesizedExpression_LeftParenthesisKeyword_0_a(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
-	}
-	
-	/**
-	 * Syntax:
-	 *     '('+
-	 */
-	protected void emit_XParenthesizedExpression_LeftParenthesisKeyword_0_p(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
-		acceptNodes(transition, fromNode, toNode);
-	}
-	
-}

File diff suppressed because it is too large
+ 0 - 1021
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/services/SGenGrammarAccess.java


+ 0 - 23
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/validation/AbstractSGenJavaValidator.java

@@ -1,23 +0,0 @@
-package org.yakindu.sct.generator.genmodel.validation;
- 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.xtext.xbase.validation.XbaseJavaValidator;
-import org.eclipse.xtext.validation.ComposedChecks;
-
-@ComposedChecks(validators= {org.eclipse.xtext.validation.ImportUriValidator.class, org.eclipse.xtext.validation.NamesAreUniqueValidator.class})
-public class AbstractSGenJavaValidator extends XbaseJavaValidator {
-
-	@Override
-	protected List<EPackage> getEPackages() {
-	    List<EPackage> result = new ArrayList<EPackage>();
-	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.yakindu.org/sct/statechart/SGen"));
-	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.eclipse.org/xtext/xbase/Xbase"));
-	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.eclipse.org/xtext/common/JavaVMTypes"));
-	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.eclipse.org/xtext/xbase/Xtype"));
-		return result;
-	}
-
-}

+ 10 - 3
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/SGen.xtext

@@ -3,7 +3,6 @@ grammar org.yakindu.sct.generator.genmodel.SGen with org.eclipse.xtext.xbase.Xba
 import "platform:/resource/org.yakindu.sct.model.sgen/model/emf/sgen.ecore" as gen
 import "platform:/resource/org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore" as sct
 import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase
- 
 
 /**
  * @author Andreas Muelder
@@ -16,19 +15,27 @@ GeneratorModel returns gen::GeneratorModel:
 GeneratorEntry returns gen::GeneratorEntry:
 	'statechart' statechart=[sct::Statechart] '{'
 	(features+=FeatureConfiguration)*
-	'}';  
+	'}';
 
 FeatureConfiguration returns gen::FeatureConfiguration:
 	{gen::FeatureConfiguration} 'feature' type=[gen::FeatureType] '{'
 	(parameterValues+=FeatureParameterValue)+
 	'}';
 
-FeatureParameterValue returns gen::FeatureParameterValue: 
+FeatureParameterValue returns gen::FeatureParameterValue:
 	{gen::FeatureParameterValue} parameter=[gen::FeatureParameter] '=' expression=XExpression;
 
 XPrimaryExpression returns xbase::XExpression:
 	XFeatureCall |
 	XLiteral |
 	XParenthesizedExpression;
+	
+XLiteral returns xbase::XExpression:
+	XBooleanLiteral |
+	XIntLiteral |
+	XNullLiteral |
+	XStringLiteral
+;
+
 QID:
 	ID (('::' | '.') ID)*; 

+ 63 - 22
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java

@@ -14,48 +14,91 @@ import java.util.NoSuchElementException;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.xtext.validation.Check;
+import org.eclipse.xtext.xbase.interpreter.IExpressionInterpreter;
 import org.yakindu.sct.generator.core.extensions.GeneratorExtensions;
 import org.yakindu.sct.model.sgen.FeatureConfiguration;
 import org.yakindu.sct.model.sgen.FeatureParameterValue;
 import org.yakindu.sct.model.sgen.GeneratorEntry;
 import org.yakindu.sct.model.sgen.GeneratorModel;
+import org.yakindu.sct.model.sgen.ParameterTypes;
 import org.yakindu.sct.model.sgen.SGenPackage;
+import org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
 
 /**
  * 
  * @author andreas muelder - Initial contribution and API
  * 
  */
+@SuppressWarnings("restriction")
 public class SGenJavaValidator extends AbstractSGenJavaValidator {
 
+	@Inject
+	private IExpressionInterpreter interpreter;
+
 	@Check
-	public void checkParameterValue(final FeatureParameterValue value) {
-//		if (value.getValue() == null)
-//			return;
-//		GeneratorModel model = (GeneratorModel) EcoreUtil2
-//				.getRootContainer(value);
-//		IDefaultFeatureValueProvider provider = LibraryExtensions
-//				.getDefaultFeatureValueProvider(model.getGeneratorId(), value
-//						.getParameter().getFeatureType().getLibrary());
-//		IStatus status = provider.validateParameterValue(value);
-//		createMarker(status);
+	public void checkParameterValueType(
+			final FeatureParameterValue parameterValue) {
+		if (parameterValue == null || parameterValue.getExpression() == null)
+			return;
+		// TODO: Dirty
+		((FeatureParameterValueImpl) parameterValue)
+				.setInterpreter(interpreter);
+		Object value = parameterValue.getValue();
+		ParameterTypes parameterType = parameterValue.getParameter()
+				.getParameterType();
+		switch (parameterType) {
+		case BOOLEAN:
+			if (!(value instanceof Boolean))
+				error("Incompatible type, Boolean expteced",
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case INTEGER:
+			if (!(value instanceof Integer))
+				error("Incompatible type, Integer expteced",
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case FLOAT:
+			if (!(value instanceof Float))
+				error("Incompatible type, Float expteced",
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case STRING:
+			if (!(value instanceof String))
+				error("Incompatible type, String expteced",
+						SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		}
 	}
 
+	// @Check
+	// public void checkParameterValue(final FeatureParameterValue value) {
+	// if (value.getValue() == null)
+	// return;
+	// GeneratorModel model = (GeneratorModel) EcoreUtil2
+	// .getRootContainer(value);
+	// IDefaultFeatureValueProvider provider = LibraryExtensions
+	// .getDefaultFeatureValueProvider(model.getGeneratorId(), value
+	// .getParameter().getFeatureType().getLibrary());
+	// IStatus status = provider.validateParameterValue(value);
+	// createMarker(status);
+	// }
+
 	private void createMarker(IStatus status) {
-//		switch (status.getSeverity()) {
-//		case IStatus.ERROR:
-//			super.error(status.getMessage(),
-//					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__VALUE);
-//			break;
-//		case IStatus.WARNING:
-//			super.warning(status.getMessage(),
-//					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__VALUE);
-//		}
+		switch (status.getSeverity()) {
+		case IStatus.ERROR:
+			super.error(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+			break;
+		case IStatus.WARNING:
+			super.warning(status.getMessage(),
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__EXPRESSION);
+		}
 	}
-
+	
 	@Check
 	public void checkGeneratorExists(GeneratorModel model) {
 		try {
@@ -73,7 +116,6 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 		GeneratorEntry entry = (GeneratorEntry) config.eContainer();
 		Iterable<FeatureConfiguration> filter = Iterables.filter(
 				entry.getFeatures(), new Predicate<FeatureConfiguration>() {
-					@Override
 					public boolean apply(FeatureConfiguration input) {
 						return (input.getType().getName().equals(config
 								.getType().getName()));
@@ -92,7 +134,6 @@ public class SGenJavaValidator extends AbstractSGenJavaValidator {
 		Iterable<FeatureParameterValue> filter = Iterables.filter(
 				entry.getParameterValues(),
 				new Predicate<FeatureParameterValue>() {
-					@Override
 					public boolean apply(FeatureParameterValue input) {
 						return (input.getParameter().getName().equals(value
 								.getParameter().getName()));

+ 0 - 22
plugins/org.yakindu.sct.generator.genmodel/xtend-gen/org/yakindu/sct/generator/genmodel/jvmmodel/SGenJvmModelInferrer.java

@@ -1,22 +0,0 @@
-package org.yakindu.sct.generator.genmodel.jvmmodel;
-
-import com.google.inject.Inject;
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.common.types.JvmDeclaredType;
-import org.eclipse.xtext.xbase.jvmmodel.IJvmModelAssociator;
-import org.eclipse.xtext.xbase.jvmmodel.IJvmModelInferrer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
-
-@SuppressWarnings("all")
-public class SGenJvmModelInferrer implements IJvmModelInferrer {
-  
-  @Inject
-  private IJvmModelAssociator jvmModelAssociator;
-  
-  public List<? extends JvmDeclaredType> inferJvmModel(final EObject sourceObject) {
-    ArrayList<JvmDeclaredType> _newArrayList = CollectionLiterals.<JvmDeclaredType>newArrayList();
-    return _newArrayList;
-  }
-}

+ 2 - 2
plugins/org.yakindu.sct.generator.java/library/FeatureTypeLibrary.xmi

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="ASCII"?>
 <sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" xsi:schemaLocation="http://www.yakindu.org/sct/statechart/SGen ../../org.yakindu.sct.model.sgen/model/emf/sgen.ecore" name="Java Generator">
   <types name="Naming">
-    <parameters name="basePackage"/>
-    <parameters name="implementationSuffix"/>
+    <parameters name="basePackage" parameterType="STRING"/>
+    <parameters name="implementationSuffix" parameterType="STRING"/>
   </types>
 </sgen:FeatureTypeLibrary>

+ 11 - 0
plugins/org.yakindu.sct.model.sgen/model/emf/sgen.ecore

@@ -18,10 +18,15 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
         eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
         derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//NamedElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
         eOpposite="#//FeatureType/parameters"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterType" eType="#//ParameterTypes"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
     <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
@@ -59,4 +64,10 @@
         eType="#//FeatureType" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ParameterTypes">
+    <eLiterals name="STRING" value="1"/>
+    <eLiterals name="FLOAT" value="2" literal="FLOAT"/>
+    <eLiterals name="BOOLEAN"/>
+    <eLiterals name="INTEGER" value="3"/>
+  </eClassifiers>
 </ecore:EPackage>

+ 10 - 1
plugins/org.yakindu.sct.model.sgen/model/emf/sgen.genmodel

@@ -3,10 +3,16 @@
     xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
     xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.yakindu.sct.model.sgen/src"
     modelPluginID="org.yakindu.sct.model.sgen" modelName="Sgen" importerID="org.eclipse.emf.importer.ecore"
-    complianceLevel="5.0" copyrightFields="false" usedGenPackages="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.genmodel#//sgraph platform:/resource/org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel#//types platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel#//xbase">
+    complianceLevel="5.0" copyrightFields="false" usedGenPackages="../../../org.yakindu.sct.model.sgraph/model/emf/sgraph.genmodel#//sgraph ../../../org.eclipse.xtext.common.types/model/JavaVMTypes.genmodel#//types ../../../org.eclipse.xtext.xbase/model/Xbase.genmodel#//xbase">
   <foreignModel>sgen.ecore</foreignModel>
   <genPackages prefix="SGen" basePackage="org.yakindu.sct.model" disposableProviderFactory="true"
       loadInitialization="true" ecorePackage="sgen.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="sgen.ecore#//ParameterTypes">
+      <genEnumLiterals ecoreEnumLiteral="sgen.ecore#//ParameterTypes/STRING"/>
+      <genEnumLiterals ecoreEnumLiteral="sgen.ecore#//ParameterTypes/FLOAT"/>
+      <genEnumLiterals ecoreEnumLiteral="sgen.ecore#//ParameterTypes/BOOLEAN"/>
+      <genEnumLiterals ecoreEnumLiteral="sgen.ecore#//ParameterTypes/INTEGER"/>
+    </genEnums>
     <genClasses ecoreClass="sgen.ecore#//GeneratorModel">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sgen.ecore#//GeneratorModel/entries"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sgen.ecore#//GeneratorModel/generatorId"/>
@@ -17,9 +23,12 @@
     <genClasses ecoreClass="sgen.ecore#//FeatureType">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference sgen.ecore#//FeatureType/parameters"/>
       <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference sgen.ecore#//FeatureType/library"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sgen.ecore#//FeatureType/optional"/>
     </genClasses>
     <genClasses ecoreClass="sgen.ecore#//FeatureParameter">
       <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference sgen.ecore#//FeatureParameter/featureType"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sgen.ecore#//FeatureParameter/optional"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute sgen.ecore#//FeatureParameter/parameterType"/>
     </genClasses>
     <genClasses ecoreClass="sgen.ecore#//FeatureConfiguration">
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference sgen.ecore#//FeatureConfiguration/type"/>

+ 58 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/FeatureParameter.java

@@ -17,6 +17,8 @@ import org.yakindu.sct.model.sgraph.NamedElement;
  * The following features are supported:
  * <ul>
  *   <li>{@link org.yakindu.sct.model.sgen.FeatureParameter#getFeatureType <em>Feature Type</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.FeatureParameter#isOptional <em>Optional</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.FeatureParameter#getParameterType <em>Parameter Type</em>}</li>
  * </ul>
  * </p>
  *
@@ -53,4 +55,60 @@ public interface FeatureParameter extends NamedElement {
 	 */
 	void setFeatureType(FeatureType value);
 
+	/**
+	 * Returns the value of the '<em><b>Optional</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Optional</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Optional</em>' attribute.
+	 * @see #setOptional(boolean)
+	 * @see org.yakindu.sct.model.sgen.SGenPackage#getFeatureParameter_Optional()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isOptional();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.FeatureParameter#isOptional <em>Optional</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Optional</em>' attribute.
+	 * @see #isOptional()
+	 * @generated
+	 */
+	void setOptional(boolean value);
+
+	/**
+	 * Returns the value of the '<em><b>Parameter Type</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.yakindu.sct.model.sgen.ParameterTypes}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Parameter Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Parameter Type</em>' attribute.
+	 * @see org.yakindu.sct.model.sgen.ParameterTypes
+	 * @see #setParameterType(ParameterTypes)
+	 * @see org.yakindu.sct.model.sgen.SGenPackage#getFeatureParameter_ParameterType()
+	 * @model
+	 * @generated
+	 */
+	ParameterTypes getParameterType();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.FeatureParameter#getParameterType <em>Parameter Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Parameter Type</em>' attribute.
+	 * @see org.yakindu.sct.model.sgen.ParameterTypes
+	 * @see #getParameterType()
+	 * @generated
+	 */
+	void setParameterType(ParameterTypes value);
+
 } // FeatureParameter

+ 15 - 37
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/FeatureParameterValue.java

@@ -12,20 +12,16 @@ import org.eclipse.xtext.xbase.XExpression;
 /**
  * <!-- begin-user-doc --> A representation of the model object '
  * <em><b>Feature Parameter Value</b></em>'. <!-- end-user-doc -->
- * 
+ *
  * <p>
  * The following features are supported:
  * <ul>
- * <li>{@link org.yakindu.sct.model.sgen.FeatureParameterValue#getParameter <em>
- * Parameter</em>}</li>
- * <li>
- * {@link org.yakindu.sct.model.sgen.FeatureParameterValue#getFeatureConfiguration
- * <em>Feature Configuration</em>}</li>
- * <li>{@link org.yakindu.sct.model.sgen.FeatureParameterValue#getExpression
- * <em>Expression</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.FeatureParameterValue#getParameter <em>Parameter</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.FeatureParameterValue#getFeatureConfiguration <em>Feature Configuration</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.FeatureParameterValue#getExpression <em>Expression</em>}</li>
  * </ul>
  * </p>
- * 
+ *
  * @see org.yakindu.sct.model.sgen.SGenPackage#getFeatureParameterValue()
  * @model
  * @generated
@@ -63,19 +59,16 @@ public interface FeatureParameterValue extends EObject {
 	void setParameter(FeatureParameter value);
 
 	/**
-	 * Returns the value of the '<em><b>Feature Configuration</b></em>'
-	 * container reference. It is bidirectional and its opposite is '
-	 * {@link org.yakindu.sct.model.sgen.FeatureConfiguration#getParameterValues
-	 * <em>Parameter Values</em>}'. <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Feature Configuration</b></em>' container reference.
+	 * It is bidirectional and its opposite is '{@link org.yakindu.sct.model.sgen.FeatureConfiguration#getParameterValues <em>Parameter Values</em>}'.
+	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Feature Configuration</em>' container
 	 * reference isn't clear, there really should be more of a description
 	 * here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * 
-	 * @return the value of the '<em>Feature Configuration</em>' container
-	 *         reference.
+	 * @return the value of the '<em>Feature Configuration</em>' container reference.
 	 * @see org.yakindu.sct.model.sgen.SGenPackage#getFeatureParameterValue_FeatureConfiguration()
 	 * @see org.yakindu.sct.model.sgen.FeatureConfiguration#getParameterValues
 	 * @model opposite="parameterValues" transient="false" changeable="false"
@@ -84,14 +77,13 @@ public interface FeatureParameterValue extends EObject {
 	FeatureConfiguration getFeatureConfiguration();
 
 	/**
-	 * Returns the value of the '<em><b>Expression</b></em>' containment
-	 * reference. <!-- begin-user-doc -->
+	 * Returns the value of the '<em><b>Expression</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
 	 * <p>
 	 * If the meaning of the '<em>Expression</em>' containment reference isn't
 	 * clear, there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
-	 * 
 	 * @return the value of the '<em>Expression</em>' containment reference.
 	 * @see #setExpression(XExpression)
 	 * @see org.yakindu.sct.model.sgen.SGenPackage#getFeatureParameterValue_Expression()
@@ -101,14 +93,10 @@ public interface FeatureParameterValue extends EObject {
 	XExpression getExpression();
 
 	/**
-	 * Sets the value of the '
-	 * {@link org.yakindu.sct.model.sgen.FeatureParameterValue#getExpression
-	 * <em>Expression</em>}' containment reference. <!-- begin-user-doc --> <!--
+	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.FeatureParameterValue#getExpression <em>Expression</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!--
 	 * end-user-doc -->
-	 * 
-	 * @param value
-	 *            the new value of the '<em>Expression</em>' containment
-	 *            reference.
+	 * @param value the new value of the '<em>Expression</em>' containment reference.
 	 * @see #getExpression()
 	 * @generated
 	 */
@@ -116,7 +104,6 @@ public interface FeatureParameterValue extends EObject {
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @model
 	 * @generated
 	 */
@@ -124,7 +111,6 @@ public interface FeatureParameterValue extends EObject {
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @model
 	 * @generated
 	 */
@@ -132,7 +118,6 @@ public interface FeatureParameterValue extends EObject {
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @model kind="operation"
 	 * @generated
 	 */
@@ -140,18 +125,11 @@ public interface FeatureParameterValue extends EObject {
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @model kind="operation"
 	 * @generated
 	 */
 	boolean getBooleanValue();
-
-	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
-	 * @model kind="operation"
-	 * @generated
-	 */
+	
 	Object getValue();
 
 } // FeatureParameterValue

+ 28 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/FeatureType.java

@@ -20,6 +20,7 @@ import org.yakindu.sct.model.sgraph.NamedElement;
  * <ul>
  *   <li>{@link org.yakindu.sct.model.sgen.FeatureType#getParameters <em>Parameters</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sgen.FeatureType#getLibrary <em>Library</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.FeatureType#isOptional <em>Optional</em>}</li>
  * </ul>
  * </p>
  *
@@ -61,4 +62,31 @@ public interface FeatureType extends NamedElement {
 	 */
 	FeatureTypeLibrary getLibrary();
 
+	/**
+	 * Returns the value of the '<em><b>Optional</b></em>' attribute.
+	 * The default value is <code>"false"</code>.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Optional</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Optional</em>' attribute.
+	 * @see #setOptional(boolean)
+	 * @see org.yakindu.sct.model.sgen.SGenPackage#getFeatureType_Optional()
+	 * @model default="false"
+	 * @generated
+	 */
+	boolean isOptional();
+
+	/**
+	 * Sets the value of the '{@link org.yakindu.sct.model.sgen.FeatureType#isOptional <em>Optional</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Optional</em>' attribute.
+	 * @see #isOptional()
+	 * @generated
+	 */
+	void setOptional(boolean value);
+
 } // FeatureType

+ 262 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/ParameterTypes.java

@@ -0,0 +1,262 @@
+/**
+ * <copyright>
+ * </copyright>
+ *
+ * $Id$
+ */
+package org.yakindu.sct.model.sgen;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Parameter Types</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.yakindu.sct.model.sgen.SGenPackage#getParameterTypes()
+ * @model
+ * @generated
+ */
+public enum ParameterTypes implements Enumerator {
+	/**
+	 * The '<em><b>STRING</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #STRING_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	STRING(1, "STRING", "STRING"),
+
+	/**
+	 * The '<em><b>FLOAT</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #FLOAT_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	FLOAT(2, "FLOAT", "FLOAT"), /**
+	 * The '<em><b>BOOLEAN</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #BOOLEAN_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	BOOLEAN(0, "BOOLEAN", "BOOLEAN"), /**
+	 * The '<em><b>INTEGER</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #INTEGER_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	INTEGER(3, "INTEGER", "INTEGER");
+
+	/**
+	 * The '<em><b>STRING</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>STRING</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #STRING
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int STRING_VALUE = 1;
+
+	/**
+	 * The '<em><b>FLOAT</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>FLOAT</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #FLOAT
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int FLOAT_VALUE = 2;
+
+	/**
+	 * The '<em><b>BOOLEAN</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>BOOLEAN</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #BOOLEAN
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int BOOLEAN_VALUE = 0;
+
+	/**
+	 * The '<em><b>INTEGER</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>INTEGER</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #INTEGER
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int INTEGER_VALUE = 3;
+
+	/**
+	 * An array of all the '<em><b>Parameter Types</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final ParameterTypes[] VALUES_ARRAY =
+		new ParameterTypes[] {
+			STRING,
+			FLOAT,
+			BOOLEAN,
+			INTEGER,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>Parameter Types</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<ParameterTypes> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>Parameter Types</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ParameterTypes get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ParameterTypes result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Parameter Types</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ParameterTypes getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			ParameterTypes result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>Parameter Types</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static ParameterTypes get(int value) {
+		switch (value) {
+			case STRING_VALUE: return STRING;
+			case FLOAT_VALUE: return FLOAT;
+			case BOOLEAN_VALUE: return BOOLEAN;
+			case INTEGER_VALUE: return INTEGER;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private ParameterTypes(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+	  return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+	  return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLiteral() {
+	  return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+	
+} //ParameterTypes

+ 118 - 2
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/SGenPackage.java

@@ -8,6 +8,7 @@ package org.yakindu.sct.model.sgen;
 
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 
@@ -163,6 +164,15 @@ public interface SGenPackage extends EPackage {
 	 */
 	int FEATURE_TYPE__LIBRARY = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
 
+	/**
+	 * The feature id for the '<em><b>Optional</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_TYPE__OPTIONAL = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 2;
+
 	/**
 	 * The number of structural features of the '<em>Feature Type</em>' class.
 	 * <!-- begin-user-doc -->
@@ -170,7 +180,7 @@ public interface SGenPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_TYPE_FEATURE_COUNT = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 2;
+	int FEATURE_TYPE_FEATURE_COUNT = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 3;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sgen.impl.FeatureParameterImpl <em>Feature Parameter</em>}' class.
@@ -200,6 +210,24 @@ public interface SGenPackage extends EPackage {
 	 */
 	int FEATURE_PARAMETER__FEATURE_TYPE = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 0;
 
+	/**
+	 * The feature id for the '<em><b>Optional</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_PARAMETER__OPTIONAL = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
+
+	/**
+	 * The feature id for the '<em><b>Parameter Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int FEATURE_PARAMETER__PARAMETER_TYPE = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 2;
+
 	/**
 	 * The number of structural features of the '<em>Feature Parameter</em>' class.
 	 * <!-- begin-user-doc -->
@@ -207,7 +235,7 @@ public interface SGenPackage extends EPackage {
 	 * @generated
 	 * @ordered
 	 */
-	int FEATURE_PARAMETER_FEATURE_COUNT = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 1;
+	int FEATURE_PARAMETER_FEATURE_COUNT = SGraphPackage.NAMED_ELEMENT_FEATURE_COUNT + 3;
 
 	/**
 	 * The meta object id for the '{@link org.yakindu.sct.model.sgen.impl.FeatureConfigurationImpl <em>Feature Configuration</em>}' class.
@@ -367,6 +395,17 @@ public interface SGenPackage extends EPackage {
 	int FEATURE_TYPE_LIBRARY_FEATURE_COUNT = 2;
 
 
+	/**
+	 * The meta object id for the '{@link org.yakindu.sct.model.sgen.ParameterTypes <em>Parameter Types</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.yakindu.sct.model.sgen.ParameterTypes
+	 * @see org.yakindu.sct.model.sgen.impl.SGenPackageImpl#getParameterTypes()
+	 * @generated
+	 */
+	int PARAMETER_TYPES = 8;
+
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sgen.GeneratorModel <em>Generator Model</em>}'.
 	 * <!-- begin-user-doc -->
@@ -452,6 +491,17 @@ public interface SGenPackage extends EPackage {
 	 */
 	EReference getFeatureType_Library();
 
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.sct.model.sgen.FeatureType#isOptional <em>Optional</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Optional</em>'.
+	 * @see org.yakindu.sct.model.sgen.FeatureType#isOptional()
+	 * @see #getFeatureType()
+	 * @generated
+	 */
+	EAttribute getFeatureType_Optional();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sgen.FeatureParameter <em>Feature Parameter</em>}'.
 	 * <!-- begin-user-doc -->
@@ -473,6 +523,28 @@ public interface SGenPackage extends EPackage {
 	 */
 	EReference getFeatureParameter_FeatureType();
 
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.sct.model.sgen.FeatureParameter#isOptional <em>Optional</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Optional</em>'.
+	 * @see org.yakindu.sct.model.sgen.FeatureParameter#isOptional()
+	 * @see #getFeatureParameter()
+	 * @generated
+	 */
+	EAttribute getFeatureParameter_Optional();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.yakindu.sct.model.sgen.FeatureParameter#getParameterType <em>Parameter Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Parameter Type</em>'.
+	 * @see org.yakindu.sct.model.sgen.FeatureParameter#getParameterType()
+	 * @see #getFeatureParameter()
+	 * @generated
+	 */
+	EAttribute getFeatureParameter_ParameterType();
+
 	/**
 	 * Returns the meta object for class '{@link org.yakindu.sct.model.sgen.FeatureConfiguration <em>Feature Configuration</em>}'.
 	 * <!-- begin-user-doc -->
@@ -612,6 +684,16 @@ public interface SGenPackage extends EPackage {
 	 */
 	EAttribute getFeatureTypeLibrary_Name();
 
+	/**
+	 * Returns the meta object for enum '{@link org.yakindu.sct.model.sgen.ParameterTypes <em>Parameter Types</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Parameter Types</em>'.
+	 * @see org.yakindu.sct.model.sgen.ParameterTypes
+	 * @generated
+	 */
+	EEnum getParameterTypes();
+
 	/**
 	 * Returns the factory that creates the instances of the model.
 	 * <!-- begin-user-doc -->
@@ -704,6 +786,14 @@ public interface SGenPackage extends EPackage {
 		 */
 		EReference FEATURE_TYPE__LIBRARY = eINSTANCE.getFeatureType_Library();
 
+		/**
+		 * The meta object literal for the '<em><b>Optional</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_TYPE__OPTIONAL = eINSTANCE.getFeatureType_Optional();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sgen.impl.FeatureParameterImpl <em>Feature Parameter</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -722,6 +812,22 @@ public interface SGenPackage extends EPackage {
 		 */
 		EReference FEATURE_PARAMETER__FEATURE_TYPE = eINSTANCE.getFeatureParameter_FeatureType();
 
+		/**
+		 * The meta object literal for the '<em><b>Optional</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_PARAMETER__OPTIONAL = eINSTANCE.getFeatureParameter_Optional();
+
+		/**
+		 * The meta object literal for the '<em><b>Parameter Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute FEATURE_PARAMETER__PARAMETER_TYPE = eINSTANCE.getFeatureParameter_ParameterType();
+
 		/**
 		 * The meta object literal for the '{@link org.yakindu.sct.model.sgen.impl.FeatureConfigurationImpl <em>Feature Configuration</em>}' class.
 		 * <!-- begin-user-doc -->
@@ -834,6 +940,16 @@ public interface SGenPackage extends EPackage {
 		 */
 		EAttribute FEATURE_TYPE_LIBRARY__NAME = eINSTANCE.getFeatureTypeLibrary_Name();
 
+		/**
+		 * The meta object literal for the '{@link org.yakindu.sct.model.sgen.ParameterTypes <em>Parameter Types</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.yakindu.sct.model.sgen.ParameterTypes
+		 * @see org.yakindu.sct.model.sgen.impl.SGenPackageImpl#getParameterTypes()
+		 * @generated
+		 */
+		EEnum PARAMETER_TYPES = eINSTANCE.getParameterTypes();
+
 	}
 
 } //SGenPackage

+ 120 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/FeatureParameterImpl.java

@@ -14,6 +14,7 @@ import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.yakindu.sct.model.sgen.FeatureParameter;
 import org.yakindu.sct.model.sgen.FeatureType;
+import org.yakindu.sct.model.sgen.ParameterTypes;
 import org.yakindu.sct.model.sgen.SGenPackage;
 import org.yakindu.sct.model.sgraph.impl.NamedElementImpl;
 
@@ -25,12 +26,51 @@ import org.yakindu.sct.model.sgraph.impl.NamedElementImpl;
  * The following features are implemented:
  * <ul>
  *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureParameterImpl#getFeatureType <em>Feature Type</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureParameterImpl#isOptional <em>Optional</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureParameterImpl#getParameterType <em>Parameter Type</em>}</li>
  * </ul>
  * </p>
  *
  * @generated
  */
 public class FeatureParameterImpl extends NamedElementImpl implements FeatureParameter {
+	/**
+	 * The default value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptional()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean OPTIONAL_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptional()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean optional = OPTIONAL_EDEFAULT;
+	/**
+	 * The default value of the '{@link #getParameterType() <em>Parameter Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParameterType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final ParameterTypes PARAMETER_TYPE_EDEFAULT = ParameterTypes.STRING;
+	/**
+	 * The cached value of the '{@link #getParameterType() <em>Parameter Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getParameterType()
+	 * @generated
+	 * @ordered
+	 */
+	protected ParameterTypes parameterType = PARAMETER_TYPE_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -91,6 +131,48 @@ public class FeatureParameterImpl extends NamedElementImpl implements FeaturePar
 			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_PARAMETER__FEATURE_TYPE, newFeatureType, newFeatureType));
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOptional() {
+		return optional;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOptional(boolean newOptional) {
+		boolean oldOptional = optional;
+		optional = newOptional;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_PARAMETER__OPTIONAL, oldOptional, optional));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ParameterTypes getParameterType() {
+		return parameterType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setParameterType(ParameterTypes newParameterType) {
+		ParameterTypes oldParameterType = parameterType;
+		parameterType = newParameterType == null ? PARAMETER_TYPE_EDEFAULT : newParameterType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_PARAMETER__PARAMETER_TYPE, oldParameterType, parameterType));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -145,6 +227,10 @@ public class FeatureParameterImpl extends NamedElementImpl implements FeaturePar
 		switch (featureID) {
 			case SGenPackage.FEATURE_PARAMETER__FEATURE_TYPE:
 				return getFeatureType();
+			case SGenPackage.FEATURE_PARAMETER__OPTIONAL:
+				return isOptional();
+			case SGenPackage.FEATURE_PARAMETER__PARAMETER_TYPE:
+				return getParameterType();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -160,6 +246,12 @@ public class FeatureParameterImpl extends NamedElementImpl implements FeaturePar
 			case SGenPackage.FEATURE_PARAMETER__FEATURE_TYPE:
 				setFeatureType((FeatureType)newValue);
 				return;
+			case SGenPackage.FEATURE_PARAMETER__OPTIONAL:
+				setOptional((Boolean)newValue);
+				return;
+			case SGenPackage.FEATURE_PARAMETER__PARAMETER_TYPE:
+				setParameterType((ParameterTypes)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -175,6 +267,12 @@ public class FeatureParameterImpl extends NamedElementImpl implements FeaturePar
 			case SGenPackage.FEATURE_PARAMETER__FEATURE_TYPE:
 				setFeatureType((FeatureType)null);
 				return;
+			case SGenPackage.FEATURE_PARAMETER__OPTIONAL:
+				setOptional(OPTIONAL_EDEFAULT);
+				return;
+			case SGenPackage.FEATURE_PARAMETER__PARAMETER_TYPE:
+				setParameterType(PARAMETER_TYPE_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -189,8 +287,30 @@ public class FeatureParameterImpl extends NamedElementImpl implements FeaturePar
 		switch (featureID) {
 			case SGenPackage.FEATURE_PARAMETER__FEATURE_TYPE:
 				return getFeatureType() != null;
+			case SGenPackage.FEATURE_PARAMETER__OPTIONAL:
+				return optional != OPTIONAL_EDEFAULT;
+			case SGenPackage.FEATURE_PARAMETER__PARAMETER_TYPE:
+				return parameterType != PARAMETER_TYPE_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (optional: ");
+		result.append(optional);
+		result.append(", parameterType: ");
+		result.append(parameterType);
+		result.append(')');
+		return result.toString();
+	}
+
 } //FeatureParameterImpl

+ 57 - 111
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/FeatureParameterValueImpl.java

@@ -34,27 +34,20 @@ import com.google.inject.Injector;
  * <p>
  * The following features are implemented:
  * <ul>
- * <li>
- * {@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl#getParameter
- * <em>Parameter</em>}</li>
- * <li>
- * {@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl#getFeatureConfiguration
- * <em>Feature Configuration</em>}</li>
- * <li>
- * {@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl#getExpression
- * <em>Expression</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl#getParameter <em>Parameter</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl#getFeatureConfiguration <em>Feature Configuration</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureParameterValueImpl#getExpression <em>Expression</em>}</li>
  * </ul>
  * </p>
- * 
+ *
  * @generated
  */
 @SuppressWarnings("restriction")
 public class FeatureParameterValueImpl extends EObjectImpl implements
 		FeatureParameterValue {
 	/**
-	 * The cached value of the '{@link #getParameter() <em>Parameter</em>}'
-	 * reference. <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * The cached value of the '{@link #getParameter() <em>Parameter</em>}' reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getParameter()
 	 * @generated
 	 * @ordered
@@ -62,9 +55,8 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 	protected FeatureParameter parameter;
 
 	/**
-	 * The cached value of the '{@link #getExpression() <em>Expression</em>}'
-	 * containment reference. <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * The cached value of the '{@link #getExpression() <em>Expression</em>}' containment reference.
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
 	 * @see #getExpression()
 	 * @generated
 	 * @ordered
@@ -73,7 +65,6 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 
@@ -83,7 +74,6 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
@@ -93,18 +83,15 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public FeatureParameter getParameter() {
 		if (parameter != null && parameter.eIsProxy()) {
-			InternalEObject oldParameter = (InternalEObject) parameter;
-			parameter = (FeatureParameter) eResolveProxy(oldParameter);
+			InternalEObject oldParameter = (InternalEObject)parameter;
+			parameter = (FeatureParameter)eResolveProxy(oldParameter);
 			if (parameter != oldParameter) {
 				if (eNotificationRequired())
-					eNotify(new ENotificationImpl(this, Notification.RESOLVE,
-							SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER,
-							oldParameter, parameter));
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE, SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER, oldParameter, parameter));
 			}
 		}
 		return parameter;
@@ -112,7 +99,6 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public FeatureParameter basicGetParameter() {
@@ -121,32 +107,26 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public void setParameter(FeatureParameter newParameter) {
 		FeatureParameter oldParameter = parameter;
 		parameter = newParameter;
 		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET,
-					SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER,
-					oldParameter, parameter));
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER, oldParameter, parameter));
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public FeatureConfiguration getFeatureConfiguration() {
-		if (eContainerFeatureID() != SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION)
-			return null;
-		return (FeatureConfiguration) eContainer();
+		if (eContainerFeatureID() != SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION) return null;
+		return (FeatureConfiguration)eContainer();
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public XExpression getExpression() {
@@ -155,7 +135,6 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public NotificationChain basicSetExpression(XExpression newExpression,
@@ -163,47 +142,28 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 		XExpression oldExpression = expression;
 		expression = newExpression;
 		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this,
-					Notification.SET,
-					SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION,
-					oldExpression, newExpression);
-			if (msgs == null)
-				msgs = notification;
-			else
-				msgs.add(notification);
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION, oldExpression, newExpression);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
 		}
 		return msgs;
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	public void setExpression(XExpression newExpression) {
 		if (newExpression != expression) {
 			NotificationChain msgs = null;
 			if (expression != null)
-				msgs = ((InternalEObject) expression)
-						.eInverseRemove(
-								this,
-								EOPPOSITE_FEATURE_BASE
-										- SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION,
-								null, msgs);
+				msgs = ((InternalEObject)expression).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION, null, msgs);
 			if (newExpression != null)
-				msgs = ((InternalEObject) newExpression)
-						.eInverseAdd(
-								this,
-								EOPPOSITE_FEATURE_BASE
-										- SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION,
-								null, msgs);
+				msgs = ((InternalEObject)newExpression).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION, null, msgs);
 			msgs = basicSetExpression(newExpression, msgs);
-			if (msgs != null)
-				msgs.dispatch();
-		} else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET,
-					SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION,
-					newExpression, newExpression));
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION, newExpression, newExpression));
 	}
 
 	/**
@@ -263,129 +223,115 @@ public class FeatureParameterValueImpl extends EObjectImpl implements
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseAdd(InternalEObject otherEnd,
 			int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
-			if (eInternalContainer() != null)
-				msgs = eBasicRemoveFromContainer(msgs);
-			return eBasicSetContainer(otherEnd,
-					SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION,
-					msgs);
+			case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
+				if (eInternalContainer() != null)
+					msgs = eBasicRemoveFromContainer(msgs);
+				return eBasicSetContainer(otherEnd, SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION, msgs);
 		}
 		return super.eInverseAdd(otherEnd, featureID, msgs);
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eInverseRemove(InternalEObject otherEnd,
 			int featureID, NotificationChain msgs) {
 		switch (featureID) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
-			return eBasicSetContainer(null,
-					SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION,
-					msgs);
-		case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
-			return basicSetExpression(null, msgs);
+			case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
+				return eBasicSetContainer(null, SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION, msgs);
+			case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
+				return basicSetExpression(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public NotificationChain eBasicRemoveFromContainerFeature(
 			NotificationChain msgs) {
 		switch (eContainerFeatureID()) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
-			return eInternalContainer().eInverseRemove(this,
-					SGenPackage.FEATURE_CONFIGURATION__PARAMETER_VALUES,
-					FeatureConfiguration.class, msgs);
+			case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
+				return eInternalContainer().eInverseRemove(this, SGenPackage.FEATURE_CONFIGURATION__PARAMETER_VALUES, FeatureConfiguration.class, msgs);
 		}
 		return super.eBasicRemoveFromContainerFeature(msgs);
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
-			if (resolve)
-				return getParameter();
-			return basicGetParameter();
-		case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
-			return getFeatureConfiguration();
-		case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
-			return getExpression();
+			case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
+				if (resolve) return getParameter();
+				return basicGetParameter();
+			case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
+				return getFeatureConfiguration();
+			case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
+				return getExpression();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eSet(int featureID, Object newValue) {
 		switch (featureID) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
-			setParameter((FeatureParameter) newValue);
-			return;
-		case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
-			setExpression((XExpression) newValue);
-			return;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
+				setParameter((FeatureParameter)newValue);
+				return;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
+				setExpression((XExpression)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public void eUnset(int featureID) {
 		switch (featureID) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
-			setParameter((FeatureParameter) null);
-			return;
-		case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
-			setExpression((XExpression) null);
-			return;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
+				setParameter((FeatureParameter)null);
+				return;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
+				setExpression((XExpression)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
 	 * @generated
 	 */
 	@Override
 	public boolean eIsSet(int featureID) {
 		switch (featureID) {
-		case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
-			return parameter != null;
-		case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
-			return getFeatureConfiguration() != null;
-		case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
-			return expression != null;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__PARAMETER:
+				return parameter != null;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__FEATURE_CONFIGURATION:
+				return getFeatureConfiguration() != null;
+			case SGenPackage.FEATURE_PARAMETER_VALUE__EXPRESSION:
+				return expression != null;
 		}
 		return super.eIsSet(featureID);
 	}

+ 69 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/FeatureTypeImpl.java

@@ -8,10 +8,12 @@ package org.yakindu.sct.model.sgen.impl;
 
 import java.util.Collection;
 
+import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
 import org.eclipse.emf.ecore.util.InternalEList;
 import org.yakindu.sct.model.sgen.FeatureParameter;
@@ -29,6 +31,7 @@ import org.yakindu.sct.model.sgraph.impl.NamedElementImpl;
  * <ul>
  *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureTypeImpl#getParameters <em>Parameters</em>}</li>
  *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureTypeImpl#getLibrary <em>Library</em>}</li>
+ *   <li>{@link org.yakindu.sct.model.sgen.impl.FeatureTypeImpl#isOptional <em>Optional</em>}</li>
  * </ul>
  * </p>
  *
@@ -45,6 +48,25 @@ public class FeatureTypeImpl extends NamedElementImpl implements FeatureType {
 	 */
 	protected EList<FeatureParameter> parameters;
 
+	/**
+	 * The default value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptional()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final boolean OPTIONAL_EDEFAULT = false;
+	/**
+	 * The cached value of the '{@link #isOptional() <em>Optional</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #isOptional()
+	 * @generated
+	 * @ordered
+	 */
+	protected boolean optional = OPTIONAL_EDEFAULT;
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -95,6 +117,27 @@ public class FeatureTypeImpl extends NamedElementImpl implements FeatureType {
 		return (FeatureTypeLibrary) eContainer();
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public boolean isOptional() {
+		return optional;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setOptional(boolean newOptional) {
+		boolean oldOptional = optional;
+		optional = newOptional;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, SGenPackage.FEATURE_TYPE__OPTIONAL, oldOptional, optional));
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -137,6 +180,8 @@ public class FeatureTypeImpl extends NamedElementImpl implements FeatureType {
 			case SGenPackage.FEATURE_TYPE__LIBRARY:
 				if (resolve) return getLibrary();
 				return basicGetLibrary();
+			case SGenPackage.FEATURE_TYPE__OPTIONAL:
+				return isOptional();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -154,6 +199,9 @@ public class FeatureTypeImpl extends NamedElementImpl implements FeatureType {
 				getParameters().clear();
 				getParameters().addAll((Collection<? extends FeatureParameter>)newValue);
 				return;
+			case SGenPackage.FEATURE_TYPE__OPTIONAL:
+				setOptional((Boolean)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -169,6 +217,9 @@ public class FeatureTypeImpl extends NamedElementImpl implements FeatureType {
 			case SGenPackage.FEATURE_TYPE__PARAMETERS:
 				getParameters().clear();
 				return;
+			case SGenPackage.FEATURE_TYPE__OPTIONAL:
+				setOptional(OPTIONAL_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -185,8 +236,26 @@ public class FeatureTypeImpl extends NamedElementImpl implements FeatureType {
 				return parameters != null && !parameters.isEmpty();
 			case SGenPackage.FEATURE_TYPE__LIBRARY:
 				return basicGetLibrary() != null;
+			case SGenPackage.FEATURE_TYPE__OPTIONAL:
+				return optional != OPTIONAL_EDEFAULT;
 		}
 		return super.eIsSet(featureID);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (optional: ");
+		result.append(optional);
+		result.append(')');
+		return result.toString();
+	}
+
 } //FeatureTypeImpl

+ 52 - 1
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenFactoryImpl.java

@@ -7,6 +7,7 @@
 package org.yakindu.sct.model.sgen.impl;
 
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 
@@ -73,6 +74,36 @@ public class SGenFactoryImpl extends EFactoryImpl implements SGenFactory {
 		}
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case SGenPackage.PARAMETER_TYPES:
+				return createParameterTypesFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case SGenPackage.PARAMETER_TYPES:
+				return convertParameterTypesToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -136,7 +167,7 @@ public class SGenFactoryImpl extends EFactoryImpl implements SGenFactory {
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated 
+	 * @generated
 	 */
 	public FeatureParameterValue createFeatureParameterValue() {
 		FeatureParameterValueImpl featureParameterValue = new FeatureParameterValueImpl();
@@ -153,6 +184,26 @@ public class SGenFactoryImpl extends EFactoryImpl implements SGenFactory {
 		return featureTypeLibrary;
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public ParameterTypes createParameterTypesFromString(EDataType eDataType, String initialValue) {
+		ParameterTypes result = ParameterTypes.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertParameterTypesToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 47 - 0
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/SGenPackageImpl.java

@@ -14,6 +14,7 @@ import org.eclipse.emf.common.util.WrappedException;
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.impl.EPackageImpl;
@@ -94,6 +95,13 @@ public class SGenPackageImpl extends EPackageImpl implements SGenPackage {
 	 */
 	private EClass featureTypeLibraryEClass = null;
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum parameterTypesEEnum = null;
+
 	/**
 	 * Creates an instance of the model <b>Package</b>, registered with
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
@@ -238,6 +246,15 @@ public class SGenPackageImpl extends EPackageImpl implements SGenPackage {
         return (EReference)getFeatureType().getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureType_Optional() {
+        return (EAttribute)getFeatureType().getEStructuralFeatures().get(2);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -259,6 +276,24 @@ public class SGenPackageImpl extends EPackageImpl implements SGenPackage {
         return (EReference)getFeatureParameter().getEStructuralFeatures().get(0);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureParameter_Optional() {
+        return (EAttribute)getFeatureParameter().getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getFeatureParameter_ParameterType() {
+        return (EAttribute)getFeatureParameter().getEStructuralFeatures().get(2);
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -388,6 +423,18 @@ public class SGenPackageImpl extends EPackageImpl implements SGenPackage {
         return (EAttribute)getFeatureTypeLibrary().getEStructuralFeatures().get(1);
 	}
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getParameterTypes() {
+		if (parameterTypesEEnum == null) {
+			parameterTypesEEnum = (EEnum)EPackage.Registry.INSTANCE.getEPackage(SGenPackage.eNS_URI).getEClassifiers().get(8);
+		}
+		return parameterTypesEEnum;
+	}
+
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->

+ 11 - 1
plugins/org.yakindu.sct.model.sgen/src/org/yakindu/sct/model/sgen/impl/sgen.ecore

@@ -18,10 +18,15 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="library" lowerBound="1"
         eType="#//FeatureTypeLibrary" changeable="false" volatile="true" transient="true"
         derived="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FeatureParameter" eSuperTypes="http://www.yakindu.org/sct/2.0.0#//NamedElement">
     <eStructuralFeatures xsi:type="ecore:EReference" name="featureType" eType="#//FeatureType"
         eOpposite="#//FeatureType/parameters"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="optional" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"
+        defaultValueLiteral="false"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterType" eType="#//ParameterTypes"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="FeatureConfiguration">
     <eOperations name="getParameterValue" eType="#//FeatureParameterValue">
@@ -48,7 +53,6 @@
     </eOperations>
     <eOperations name="getStringValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
     <eOperations name="getBooleanValue" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eOperations name="getValue" eType="ecore:EClass http://www.eclipse.org/emf/2002/Ecore#//EObject"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="parameter" eType="#//FeatureParameter"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="featureConfiguration" eType="#//FeatureConfiguration"
         changeable="false" eOpposite="#//FeatureConfiguration/parameterValues"/>
@@ -60,4 +64,10 @@
         eType="#//FeatureType" containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="ParameterTypes">
+    <eLiterals name="STRING" value="1"/>
+    <eLiterals name="FLOAT" value="2" literal="FLOAT"/>
+    <eLiterals name="BOOLEAN"/>
+    <eLiterals name="INTEGER" value="3"/>
+  </eClassifiers>
 </ecore:EPackage>