Переглянути джерело

Added filter for java keywords in package name, implementation suffix and statemachine name.

markus.muehlbrandt@itemis.de 13 роки тому
батько
коміт
650d08cb23

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

@@ -2,6 +2,6 @@
 <sgen:FeatureTypeLibrary xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:sgen="http://www.yakindu.org/sct/statechart/SGen" name="Java Generator">
   <types name="Naming" optional="true">
     <parameters name="basePackage"/>
-    <parameters name="implementationSuffix"/>
+    <parameters name="implementationSuffix" optional="true"/>
   </types>
 </sgen:FeatureTypeLibrary>

+ 10 - 0
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/IJavaFeatureConstants.java

@@ -24,4 +24,14 @@ public interface IJavaFeatureConstants {
 	public static final String BASE_PACKAGE = "basePackage";
 
 	public static final String IMPLEMENTATION_SUFFIX = "implementationSuffix";
+	
+	public static final String[] JAVA_KEYWORDS = { "abstract", "assert",
+		"boolean", "break", "byte", "case", "catch", "char", "class",
+		"const", "continue", "default", "do", "double", "else", "enum",
+		"extens", "final", "finally", "float", "for", "goto", "if",
+		"implements", "import", "instanceof", "int", "interface", "long",
+		"native", "new", "package", "private", "protected", "public",
+		"return", "short", "static", "strictfp", "super", "switch",
+		"synchronized", "this", "throw", "throws", "transient", "try",
+		"void", "volatile", "while" };
 }

+ 17 - 0
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureConstants.java

@@ -12,6 +12,10 @@ package org.yakindu.sct.generator.java.features;
 
 import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.LICENSE_HEADER;
 import static org.yakindu.sct.generator.core.features.ICoreFeatureConstants.LICENSE_TEXT;
+
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 /**
  * 
  * @author muehlbrandt
@@ -37,4 +41,17 @@ public final class JavaFeatureConstants implements IJavaFeatureConstants {
 	public static final String getLicenseText() {
 		return LICENSE_TEXT;
 	}
+	
+	public static final String getStatemachineName(String name) {
+		//remove whitespaces;
+		String newName = name.replace(" ", "").toLowerCase();
+		for (String keyword : Arrays.asList(JAVA_KEYWORDS)) {				
+			Pattern pattern= Pattern.compile("^" +keyword+"$");
+			Matcher matcher = pattern.matcher(name);
+			if  (matcher.find()) {
+				newName += "Statemachine";
+			}
+		}
+		return newName;
+	}
 }

+ 31 - 7
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/features/JavaFeatureValueProvider.java

@@ -13,6 +13,11 @@ package org.yakindu.sct.generator.java.features;
 import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.BASE_PACKAGE;
 import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.IMPLEMENTATION_SUFFIX;
 import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.LIBRARY_NAME;
+import static org.yakindu.sct.generator.java.features.IJavaFeatureConstants.JAVA_KEYWORDS;
+
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -49,15 +54,34 @@ public class JavaFeatureValueProvider extends
 
 	public IStatus validateParameterValue(FeatureParameterValue value) {
 		String name = value.getParameter().getName();
-		if (BASE_PACKAGE.equals(name)
-				&& !value.getStringValue().matches(PACKAGE_NAME_REGEX)) {
+		if (BASE_PACKAGE.equals(name)) {
+			if (!value.getStringValue().matches(PACKAGE_NAME_REGEX)) {
 				return error("Invalid package name");
+			}
+			//Filter out java keywords
+			for (String keyword : Arrays.asList(JAVA_KEYWORDS)) {				
+				Pattern pattern= Pattern.compile("(?:^|\\.)" +keyword+"(?:$|\\.)");
+				Matcher matcher = pattern.matcher(value.getStringValue());
+				while (matcher.find()) {
+					return error("Java keyword '" + matcher.group()
+							+ "' is not allowed in package names.");
+				}
+			}
 		}
-		if (IMPLEMENTATION_SUFFIX.equals(name)
-				&& !value.getStringValue().matches(SUFFIX_REGEX)) {
-			return error("Invalid value");
-		}
+		if (IMPLEMENTATION_SUFFIX.equals(name)) {
+			if (!value.getStringValue().matches(SUFFIX_REGEX)) {
+				return error("Invalid value");
+			}
+			for (String keyword : Arrays.asList(JAVA_KEYWORDS)) {				
+				Pattern pattern= Pattern.compile("^" +keyword+"$");
+				Matcher matcher = pattern.matcher(value.getStringValue());
+				while (matcher.find()) {
+					return error("Java keyword '" + matcher.group()
+							+ "' is not allowed as suffix.");
+				}
+			}
+			
+		}		
 		return Status.OK_STATUS;
 	}
-
 }

+ 5 - 2
plugins/org.yakindu.sct.generator.java/src/org/yakindu/sct/generator/java/templates/Naming.ext

@@ -19,7 +19,10 @@ import sgen;
 extension org::yakindu::sct::generator::java::templates::Expression;
 extension org::yakindu::sct::generator::java::templates::ExecutionModelExtensions;
 
-String getStatemachineName(ExecutionFlow this) : (name.toLowerCase() == "default")? name.toFirstUpper()+"SM" : name.toFirstUpper();
+String getStatemachineName(String name) :
+	JAVA org.yakindu.sct.generator.java.features.JavaFeatureConstants.getStatemachineName(java.lang.String);
+String getStatemachineName(ExecutionFlow this) : 
+	 name.getStatemachineName();
 String getBaseStatemachineName(ExecutionFlow this) : name.toFirstUpper() + "AbstractBaseStatemachine";
 String getBaseStatemachineName(InterfaceScope this) : ((ExecutionFlow)eContainer).getBaseStatemachineName();
 String getEventBasedStatemachineName(ExecutionFlow this) : name.toFirstUpper() + "EventBasedStatemachine";
@@ -162,7 +165,7 @@ String getBasePackagePath(GeneratorEntry entry):
 String getImplementationSuffix(GeneratorEntry entry, ExecutionFlow flow):
 	if entry.getFeatureConfiguration(getNamingFeature())!=null
 		&& entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()) != null then
-		entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()).getStringValue()
+		flow.getStatemachineName()+entry.getFeatureConfiguration(getNamingFeature()).getParameterValue(getImplementationSuffix()).getStringValue()
 	else 
 		flow.getStatemachineName();