1 package org.simantics.scl.compiler.internal.codegen.utils;
\r
3 import java.lang.reflect.Method;
\r
5 import org.simantics.scl.runtime.function.FunctionImpl1;
\r
6 import org.simantics.scl.runtime.function.FunctionImpl2;
\r
7 import org.simantics.scl.runtime.function.FunctionImpl3;
\r
8 import org.simantics.scl.runtime.function.FunctionImpl4;
\r
9 import org.simantics.scl.runtime.function.FunctionImplN;
\r
10 import org.simantics.scl.runtime.tuple.Tuple0;
\r
12 public class ValueFromMethod {
\r
14 public static Object getValueFromStaticMethod(final Method method) throws ReflectiveOperationException {
\r
15 int arity = method.getParameterTypes().length;
\r
16 final boolean returnsVoid = method.getReturnType().equals(void.class);
\r
19 Object ret = method.invoke(null);
\r
20 return returnsVoid ? Tuple0.INSTANCE : ret;
\r
23 return new FunctionImpl1<Object,Object>() {
\r
25 public Object apply(Object p0) {
\r
27 Object ret = method.invoke(null, p0);
\r
28 return returnsVoid ? Tuple0.INSTANCE : ret;
\r
29 } catch (ReflectiveOperationException e) {
\r
30 throw new RuntimeException(e);
\r
35 return new FunctionImpl2<Object,Object,Object>() {
\r
37 public Object apply(Object p0, Object p1) {
\r
39 Object ret = method.invoke(null, p0, p1);
\r
40 return returnsVoid ? Tuple0.INSTANCE : ret;
\r
41 } catch (ReflectiveOperationException e) {
\r
42 throw new RuntimeException(e);
\r
47 return new FunctionImpl3<Object,Object,Object,Object>() {
\r
49 public Object apply(Object p0, Object p1, Object p2) {
\r
51 Object ret = method.invoke(null, p0, p1, p2);
\r
52 return returnsVoid ? Tuple0.INSTANCE : ret;
\r
53 } catch (ReflectiveOperationException e) {
\r
54 throw new RuntimeException(e);
\r
59 return new FunctionImpl4<Object,Object,Object,Object,Object>() {
\r
61 public Object apply(Object p0, Object p1, Object p2, Object p3) {
\r
63 Object ret = method.invoke(null, p0, p1, p2, p3);
\r
64 return returnsVoid ? Tuple0.INSTANCE : ret;
\r
65 } catch (ReflectiveOperationException e) {
\r
66 throw new RuntimeException(e);
\r
71 return new FunctionImplN(arity) {
\r
73 public Object doApply(Object... ps) {
\r
75 Object ret = method.invoke(null, ps);
\r
76 return returnsVoid ? Tuple0.INSTANCE : ret;
\r
77 } catch (ReflectiveOperationException e) {
\r
78 throw new RuntimeException(e);
\r