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

Added validation rule for variables of type void

Andreas Mülder 13 лет назад
Родитель
Сommit
e3847d41e7

+ 10 - 1
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java

@@ -89,6 +89,7 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 	public static final String LOCAL_DECLARATIONS = "Local declarations are not allowed in interface scope.";
 	public static final String GUARD_EXPRESSION = "The evaluation result of a guard expression must be of type boolean";
 	public static final String ASSIGNMENT_EXPRESSION = "No nested assignment of the same variable allowed (different behavior in various programming languages)";
+	public static final String VARIABLE_VOID_TYPE = "'void' is an invalid type for variables";
 
 	@Inject
 	private ITypeInferrer inferrer;
@@ -100,6 +101,13 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 	@Named(Constants.LANGUAGE_NAME)
 	private String languageName;
 
+	@Check(CheckType.FAST)
+	public void checkVariableType(final VariableDefinition definition) {
+		if (tsAccess.isVoid(definition.getType())) {
+			error(VARIABLE_VOID_TYPE, null);
+		}
+	}
+
 	@Check(CheckType.FAST)
 	public void checkOperationArguments_FeatureCall(final FeatureCall call) {
 		if (call.getFeature() instanceof Operation) {
@@ -154,7 +162,8 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 					.getReference();
 			return reference.getName();
 		} else if (varRef instanceof FeatureCall) {
-			VariableDefinition reference = (VariableDefinition) ((FeatureCall) varRef).getFeature();
+			VariableDefinition reference = (VariableDefinition) ((FeatureCall) varRef)
+					.getFeature();
 			return reference.getName();
 		}
 		return null;

+ 12 - 0
test-plugins/org.yakindu.sct.model.stext.test/src/org/yakindu/sct/model/stext/test/STextJavaValidatorTest.java

@@ -75,6 +75,18 @@ public class STextJavaValidatorTest extends AbstractSTextTest {
 	public void teardown() {
 		tester = null;
 	}
+	
+	/**
+	 * @see STextJavaValidator#checkVariableType(org.yakindu.sct.model.stext.stext.VariableDefinition)
+	 */
+	@Test
+	public void checkVariableType() {
+		Scope context = (Scope) parseExpression("interface if : var i : void",
+				null, InterfaceScope.class.getSimpleName());
+		AssertableDiagnostics validationResult = tester.validate(context);
+		validationResult
+				.assertErrorContains(STextJavaValidator.VARIABLE_VOID_TYPE);
+	}
 
 	/**
 	 * @see STextJavaValidator#checkAssignmentExpression(org.yakindu.sct.model.stext.stext.AssignmentExpression)