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

Refactored Type analyer interface to allow testing

Andreas Mülder 14 лет назад
Родитель
Сommit
154d962688

+ 1 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/ErrorAcceptor.java

@@ -12,6 +12,7 @@
 package org.yakindu.sct.model.stext.validation;
 
 public class ErrorAcceptor {
+
 	public void acceptError(String msg) {
 		throw new TypeCheckException(msg);
 	}

+ 3 - 0
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/ITypeAnalyzer.java

@@ -18,6 +18,9 @@ import com.google.inject.ImplementedBy;
 
 @ImplementedBy(StaticTypeAnalyzer.class)
 public interface ITypeAnalyzer {
+
+	public void setErrorAcceptor(final ErrorAcceptor acceptor);
+
 	boolean isBoolean(Type type);
 
 	boolean isInteger(Type type);

+ 16 - 26
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/STextJavaValidator.java

@@ -67,14 +67,6 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 	@Inject
 	private StaticTypeAnalyzer analyzer;
 
-	// @Check
-	// public void checkOperationCall(final FeatureCall call) {
-	// if (! (call.getFeature() instanceof Operation) /*&&
-	// !call.isOperationCall()*/) {
-	// error(call.getFeature().getName()
-	// + " is not an operation ", null);
-	// }
-	// }
 	@Check
 	public void checkOperationArguments(final FeatureCall call) {
 		if (call.getFeature() instanceof Operation) {
@@ -87,20 +79,6 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 		}
 	}
 
-	@Check
-	public void checkExpression(final Statement statement) {
-		try {
-			analyzer.setErrorAcceptor(new ErrorAcceptor());
-			analyzer.check(statement);
-		} catch (TypeCheckException e) {
-			error(e.getMessage(), null);
-		} catch (IllegalArgumentException e) {
-			// This happens, when the expression is not completed for Unhandled
-			// parameter types: [null]
-			// We can safely ignore this exception
-		}
-	}
-
 	@Check(CheckType.FAST)
 	public void checkReactionTrigger(ReactionTrigger reactionTrigger) {
 		for (EventSpec eventSpec : reactionTrigger.getTriggers()) {
@@ -208,14 +186,13 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 	}
 
 	@Check(CheckType.FAST)
-	public void checkVariable(VariableDefinition variable) {
+	public void checkVariableDefinition(VariableDefinition variable) {
 		if (variable.eContainer() instanceof SimpleScope) {
 			error("Variables can not be defined in states.", variable,
 					BasePackage.Literals.NAMED_ELEMENT__NAME,
 					ValidationMessageAcceptor.INSIGNIFICANT_INDEX);
 		}
 	}
-
 	@Check(CheckType.FAST)
 	public void checkEventDefinition(EventDefinition event) {
 		if (event.eContainer() instanceof InterfaceScope
@@ -229,9 +206,8 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 					StextPackage.Literals.EVENT_DEFINITION__DIRECTION);
 		}
 	}
-
 	@Check(CheckType.FAST)
-	public void checkOperation(OperationDefinition operation) {
+	public void checkOperationDefinition(OperationDefinition operation) {
 		if (operation.eContainer() instanceof SimpleScope) {
 			error("Operations can not be defined in states.", operation,
 					StextPackage.Literals.OPERATION_DEFINITION__PARAMS,
@@ -267,6 +243,20 @@ public class STextJavaValidator extends AbstractSTextJavaValidator {
 			}
 		}
 	}
+	
+	@Check
+	public void checkExpression(final Statement statement) {
+		try {
+			analyzer.setErrorAcceptor(new ErrorAcceptor());
+			analyzer.check(statement);
+		} catch (TypeCheckException e) {
+			error(e.getMessage(), null);
+		} catch (IllegalArgumentException e) {
+			// This happens, when the expression is not completed for Unhandled
+			// parameter types: [null]
+			// We can safely ignore this exception
+		}
+	}
 
 	private boolean isStatechartDefinitionChild(EObject element) {
 		while (element.eContainer() != null) {

+ 2 - 15
plugins/org.yakindu.sct.model.stext/src/org/yakindu/sct/model/stext/validation/StaticTypeAnalyzer.xtend

@@ -66,7 +66,7 @@ class StaticTypeAnalyzer implements ITypeAnalyzer {
 	@Inject TypeLibraryLocation$Registry libraries
 	ErrorAcceptor acceptor
 	
-	def void setErrorAcceptor(ErrorAcceptor acceptor2) {
+	override void setErrorAcceptor(ErrorAcceptor acceptor2) {
 		acceptor = acceptor2
 	}
 	
@@ -258,19 +258,6 @@ class StaticTypeAnalyzer implements ITypeAnalyzer {
 		return type
 	}
 	
-//	def toJavaType(Type type){
-//		if(isBoolean(type)){
-//			return typeof(Boolean)
-//		}
-//		else if(isInteger(type)){
-//			return typeof(Number)
-//		}
-//		else if(isReal(type)){
-//			return typeof(Number)
-//		} 
-//		return typeof(Void)
-//	}
-	
 	def Type assertIsNumber(Type object, String operator){
 		if(!object.real && !object.integer) {
 			error("operator '" +operator+"' can only be applied to numbers!")
@@ -284,7 +271,7 @@ class StaticTypeAnalyzer implements ITypeAnalyzer {
 		}
 		return object
 	}
-	
+	 
 	def error(String msg){
 		if (acceptor != null) {
 			acceptor.acceptError(msg)