]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.commands/src/org/simantics/scl/commands/internal/checker/FunctionCheckItem.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.commands / src / org / simantics / scl / commands / internal / checker / FunctionCheckItem.java
diff --git a/bundles/org.simantics.scl.commands/src/org/simantics/scl/commands/internal/checker/FunctionCheckItem.java b/bundles/org.simantics.scl.commands/src/org/simantics/scl/commands/internal/checker/FunctionCheckItem.java
new file mode 100644 (file)
index 0000000..756f639
--- /dev/null
@@ -0,0 +1,33 @@
+package org.simantics.scl.commands.internal.checker;\r
+\r
+import java.util.List;\r
+\r
+import org.simantics.scl.compiler.types.Type;\r
+import org.simantics.scl.runtime.function.Function;\r
+\r
+public class FunctionCheckItem implements CheckItem {\r
+\r
+    Type parameterType;\r
+    CheckItem next;\r
+    \r
+    public FunctionCheckItem(Type parameterType, CheckItem next) {\r
+        this.parameterType = parameterType;\r
+        this.next = next;\r
+    }\r
+\r
+    @SuppressWarnings({ "unchecked", "rawtypes" })\r
+    @Override\r
+    public boolean check(Object check, Object[] parameters, int pos) {\r
+        if(pos == parameters.length)\r
+            return true;\r
+        Object nextCheck = ((Function)check).apply(parameters[pos]);\r
+        return next.check(nextCheck, parameters, pos+1);\r
+    }\r
+\r
+    @Override\r
+    public void collectParameterTypes(List<Type> types) {\r
+        types.add(parameterType);\r
+        next.collectParameterTypes(types);\r
+    }\r
+\r
+}\r