-package org.simantics.scl.compiler.internal.codegen.utils;\r
-\r
-import java.lang.reflect.Method;\r
-\r
-import org.simantics.scl.runtime.function.FunctionImpl1;\r
-import org.simantics.scl.runtime.function.FunctionImpl2;\r
-import org.simantics.scl.runtime.function.FunctionImpl3;\r
-import org.simantics.scl.runtime.function.FunctionImpl4;\r
-import org.simantics.scl.runtime.function.FunctionImplN;\r
-import org.simantics.scl.runtime.tuple.Tuple0;\r
-\r
-public class ValueFromMethod {\r
-\r
- public static Object getValueFromStaticMethod(final Method method) throws ReflectiveOperationException {\r
- int arity = method.getParameterTypes().length;\r
- final boolean returnsVoid = method.getReturnType().equals(void.class);\r
- switch(arity) {\r
- case 0: {\r
- Object ret = method.invoke(null);\r
- return returnsVoid ? Tuple0.INSTANCE : ret;\r
- }\r
- case 1:\r
- return new FunctionImpl1<Object,Object>() {\r
- @Override\r
- public Object apply(Object p0) {\r
- try {\r
- Object ret = method.invoke(null, p0);\r
- return returnsVoid ? Tuple0.INSTANCE : ret;\r
- } catch (ReflectiveOperationException e) {\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- };\r
- case 2:\r
- return new FunctionImpl2<Object,Object,Object>() {\r
- @Override\r
- public Object apply(Object p0, Object p1) {\r
- try {\r
- Object ret = method.invoke(null, p0, p1);\r
- return returnsVoid ? Tuple0.INSTANCE : ret;\r
- } catch (ReflectiveOperationException e) {\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- };\r
- case 3:\r
- return new FunctionImpl3<Object,Object,Object,Object>() {\r
- @Override\r
- public Object apply(Object p0, Object p1, Object p2) {\r
- try {\r
- Object ret = method.invoke(null, p0, p1, p2);\r
- return returnsVoid ? Tuple0.INSTANCE : ret;\r
- } catch (ReflectiveOperationException e) {\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- };\r
- case 4:\r
- return new FunctionImpl4<Object,Object,Object,Object,Object>() {\r
- @Override\r
- public Object apply(Object p0, Object p1, Object p2, Object p3) {\r
- try {\r
- Object ret = method.invoke(null, p0, p1, p2, p3);\r
- return returnsVoid ? Tuple0.INSTANCE : ret;\r
- } catch (ReflectiveOperationException e) {\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- };\r
- default:\r
- return new FunctionImplN(arity) {\r
- @Override\r
- public Object doApply(Object... ps) {\r
- try {\r
- Object ret = method.invoke(null, ps);\r
- return returnsVoid ? Tuple0.INSTANCE : ret;\r
- } catch (ReflectiveOperationException e) {\r
- throw new RuntimeException(e);\r
- }\r
- }\r
- };\r
- }\r
- }\r
- \r
-}\r
+package org.simantics.scl.compiler.internal.codegen.utils;
+
+import java.lang.reflect.Method;
+
+import org.simantics.scl.runtime.function.FunctionImpl1;
+import org.simantics.scl.runtime.function.FunctionImpl2;
+import org.simantics.scl.runtime.function.FunctionImpl3;
+import org.simantics.scl.runtime.function.FunctionImpl4;
+import org.simantics.scl.runtime.function.FunctionImplN;
+import org.simantics.scl.runtime.tuple.Tuple0;
+
+public class ValueFromMethod {
+
+ public static Object getValueFromStaticMethod(final Method method) throws ReflectiveOperationException {
+ int arity = method.getParameterTypes().length;
+ final boolean returnsVoid = method.getReturnType().equals(void.class);
+ switch(arity) {
+ case 0: {
+ Object ret = method.invoke(null);
+ return returnsVoid ? Tuple0.INSTANCE : ret;
+ }
+ case 1:
+ return new FunctionImpl1<Object,Object>() {
+ @Override
+ public Object apply(Object p0) {
+ try {
+ Object ret = method.invoke(null, p0);
+ return returnsVoid ? Tuple0.INSTANCE : ret;
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ case 2:
+ return new FunctionImpl2<Object,Object,Object>() {
+ @Override
+ public Object apply(Object p0, Object p1) {
+ try {
+ Object ret = method.invoke(null, p0, p1);
+ return returnsVoid ? Tuple0.INSTANCE : ret;
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ case 3:
+ return new FunctionImpl3<Object,Object,Object,Object>() {
+ @Override
+ public Object apply(Object p0, Object p1, Object p2) {
+ try {
+ Object ret = method.invoke(null, p0, p1, p2);
+ return returnsVoid ? Tuple0.INSTANCE : ret;
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ case 4:
+ return new FunctionImpl4<Object,Object,Object,Object,Object>() {
+ @Override
+ public Object apply(Object p0, Object p1, Object p2, Object p3) {
+ try {
+ Object ret = method.invoke(null, p0, p1, p2, p3);
+ return returnsVoid ? Tuple0.INSTANCE : ret;
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ default:
+ return new FunctionImplN(arity) {
+ @Override
+ public Object doApply(Object... ps) {
+ try {
+ Object ret = method.invoke(null, ps);
+ return returnsVoid ? Tuple0.INSTANCE : ret;
+ } catch (ReflectiveOperationException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ };
+ }
+ }
+
+}