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

Enabled xtext default unique element name validation.
Added validation to check that only one default interface exists.

markus.muehlbrandt@itemis.de 13 лет назад
Родитель
Сommit
1ced186fa0

+ 5 - 8
plugins/org.yakindu.sct.model.stext.ui/src-gen/org/yakindu/sct/model/stext/ui/internal/STextActivator.java

@@ -3,19 +3,20 @@
  */
 package org.yakindu.sct.model.stext.ui.internal;
 
-import static com.google.inject.Guice.createInjector;
 import static com.google.inject.util.Modules.override;
-
-import java.util.HashMap;
-import java.util.Map;
+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. 
@@ -28,10 +29,6 @@ public class STextActivator extends AbstractUIPlugin {
 	public Injector getInjector(String languageName) {
 		return injectors.get(languageName);
 	}
-
-	public Injector getInjector() {
-		return injectors.get("org.yakindu.sct.model.stext.SText");
-	}
 	
 	@Override
 	public void start(BundleContext context) throws Exception {

+ 1 - 1
plugins/org.yakindu.sct.model.stext/src-gen/org/yakindu/sct/model/stext/validation/AbstractSTextJavaValidator.java

@@ -7,7 +7,7 @@ import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
 import org.eclipse.xtext.validation.ComposedChecks;
 
-@ComposedChecks(validators= {org.eclipse.xtext.validation.ImportUriValidator.class})
+@ComposedChecks(validators= {org.eclipse.xtext.validation.ImportUriValidator.class, org.eclipse.xtext.validation.NamesAreUniqueValidator.class})
 public class AbstractSTextJavaValidator extends AbstractDeclarativeValidator {
 
 	@Override

+ 1 - 1
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/GenerateExpressions.mwe2

@@ -59,7 +59,7 @@ Workflow {
 			// java-based API for validation 
 			fragment = validation.JavaValidatorFragment {
 				composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
-				// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+				 composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
 				// registerForImportedPackages = true
 			}
 

+ 29 - 2
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java

@@ -19,6 +19,8 @@ import org.eclipse.xtext.validation.Check;
 import org.eclipse.xtext.validation.CheckType;
 import org.eclipse.xtext.validation.ValidationMessageAcceptor;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.model.sgraph.Scope;
+import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.model.stext.stext.AlwaysEvent;
 import org.yakindu.sct.model.stext.stext.Direction;
 import org.yakindu.sct.model.stext.stext.EntryEvent;
@@ -96,7 +98,7 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 					StextPackage.Literals.EVENT_DEFINITION__DIRECTION);
 		}
 	}
-	
+
 	@Check(CheckType.FAST)
 	public void checkOperation(Operation operation) {
 		if (operation.eContainer() instanceof SimpleScope) {
@@ -105,7 +107,7 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 					ValidationMessageAcceptor.INSIGNIFICANT_INDEX);
 		}
 	}
-	
+
 	@Check(CheckType.FAST)
 	public void checkLocalReaction(LocalReaction localReaction) {
 		if (localReaction.eContainer() instanceof InterfaceScope) {
@@ -116,6 +118,16 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 		}
 	}
 
+	@Check(CheckType.FAST)
+	public void checkInterfaceScope(InterfaceScope interfaceScope) {
+		if (getInterfaceCount(interfaceScope) > 1) {
+			error("It can only exist one default/unamed interface",
+					interfaceScope,
+					StextPackage.Literals.INTERFACE_SCOPE__NAME,
+					ValidationMessageAcceptor.INSIGNIFICANT_INDEX);
+		}
+	}
+
 	private boolean isStatechartDefinitionChild(EObject element) {
 		while (element.eContainer() != null) {
 			if (element.eContainer() instanceof StatechartDefinition) {
@@ -126,6 +138,21 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 		return false;
 	}
 
+	private int getInterfaceCount(InterfaceScope interfaceScope) {
+		int count = 1;
+		if (interfaceScope.eContainer() instanceof Statechart) {
+			Statechart statechart = (Statechart) interfaceScope.eContainer();
+
+			for (Scope scope : statechart.getScopes()) {
+				if (scope != interfaceScope && scope instanceof InterfaceScope
+						&& ((InterfaceScope) scope).getName() == null) {
+					count++;
+				}
+			}
+		}
+		return count;
+	}
+
 	@Override
 	protected String getCurrentLanguage(Map<Object, Object> context,
 			EObject eObject) {