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

Fixed PolymorphicComparator for methods with different numbers of parameters.

tomqc86@googlemail.com 11 лет назад
Родитель
Сommit
ea192a74bc

+ 7 - 11
plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/interpreter/CoreFunction.java

@@ -450,14 +450,12 @@ public class CoreFunction extends Function {
 	public Boolean equals(Boolean b1, Boolean b2) {
 		return b1.equals(b2);
 	}
-
-	@FunctionMethod(EQUALS)
-	public Boolean equals(EObject e1, EObject e2) {
-		return EcoreUtil.equals(e1, e2);
-	}
 	
 	@FunctionMethod(EQUALS)
 	public Boolean equals(Object e1, Object e2) {
+		if (e1 instanceof EObject && e2 instanceof EObject) {
+			return EcoreUtil.equals((EObject)e1, (EObject)e2);
+		}
 		return Objects.equal(e1, e2);
 	}
 
@@ -531,16 +529,14 @@ public class CoreFunction extends Function {
 		return l1.longValue() == i1.intValue();
 	}
 
-	@FunctionMethod(NOT_EQUALS)
-	public Boolean notEquals(EObject e1, EObject e2) {
-		return !EcoreUtil.equals(e1, e2);
-	}
-	
 	@FunctionMethod(NOT_EQUALS)
 	public Boolean notEquals(Object e1, Object e2) {
+		if (e1 instanceof EObject && e2 instanceof EObject) {
+			return !EcoreUtil.equals((EObject)e1, (EObject)e2);
+		}
 		return ! Objects.equal(e1, e2);
 	}
-
+	
 	@FunctionMethod(NOT_EQUALS)
 	public Boolean notEquals(Boolean b1, Boolean b2) {
 		return b1.booleanValue() != b2.booleanValue();

+ 3 - 4
plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/interpreter/Function.java

@@ -66,7 +66,7 @@ public class Function {
 			Class<?>[] parameterTypes2 = method2.getParameterTypes();
 
 			if (parameterTypes1.length != parameterTypes2.length)
-				return -1;
+				return 0;
 
 			for (int i = 0; i < parameterTypes1.length; i++) {
 				final Class<?> class1 = parameterTypes1[i];
@@ -87,15 +87,14 @@ public class Function {
 	protected Method functionMethod;
 
 	/**
-	 * Looks up the appropriate function for the given parameter types. This
-	 * lookup currently does not perform a polymophic lookup.
+	 * Looks up the appropriate function for the given parameter types.
 	 * 
 	 * @param name
 	 * @param paramTypes
 	 * @return
 	 */
 	public Function lookup(Class<?> functionClass, String name, Class<?>... paramTypes) {
-		System.out.println("Lookup");
+
 		List<Method> functionMethods = new ArrayList<Method>();
 		addFunctionMethods(functionClass, functionMethods);
 		Collections.sort(functionMethods, new PolymorphicComparator());