-/*******************************************************************************\r
- * Copyright (c) 2010 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
+/*******************************************************************************
+ * Copyright (c) 2010 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
package org.simantics.databoard.method;
-import static org.objectweb.asm.Opcodes.AALOAD;\r
-import static org.objectweb.asm.Opcodes.AASTORE;\r
-import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;\r
-import static org.objectweb.asm.Opcodes.ACC_FINAL;\r
-import static org.objectweb.asm.Opcodes.ACC_INTERFACE;\r
-import static org.objectweb.asm.Opcodes.ACC_PUBLIC;\r
-import static org.objectweb.asm.Opcodes.ACC_STATIC;\r
-import static org.objectweb.asm.Opcodes.ACC_SUPER;\r
-import static org.objectweb.asm.Opcodes.ALOAD;\r
-import static org.objectweb.asm.Opcodes.ANEWARRAY;\r
-import static org.objectweb.asm.Opcodes.ARETURN;\r
-import static org.objectweb.asm.Opcodes.ARRAYLENGTH;\r
-import static org.objectweb.asm.Opcodes.ASTORE;\r
-import static org.objectweb.asm.Opcodes.ATHROW;\r
-import static org.objectweb.asm.Opcodes.CHECKCAST;\r
-import static org.objectweb.asm.Opcodes.DLOAD;\r
-import static org.objectweb.asm.Opcodes.DRETURN;\r
-import static org.objectweb.asm.Opcodes.DUP;\r
-import static org.objectweb.asm.Opcodes.FLOAD;\r
-import static org.objectweb.asm.Opcodes.FRETURN;\r
-import static org.objectweb.asm.Opcodes.GETFIELD;\r
-import static org.objectweb.asm.Opcodes.GETSTATIC;\r
-import static org.objectweb.asm.Opcodes.GOTO;\r
-import static org.objectweb.asm.Opcodes.ICONST_0;\r
-import static org.objectweb.asm.Opcodes.IFEQ;\r
-import static org.objectweb.asm.Opcodes.IF_ICMPLT;\r
-import static org.objectweb.asm.Opcodes.ILOAD;\r
-import static org.objectweb.asm.Opcodes.INSTANCEOF;\r
-import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;\r
-import static org.objectweb.asm.Opcodes.INVOKESPECIAL;\r
-import static org.objectweb.asm.Opcodes.INVOKESTATIC;\r
-import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;\r
-import static org.objectweb.asm.Opcodes.IRETURN;\r
-import static org.objectweb.asm.Opcodes.ISTORE;\r
-import static org.objectweb.asm.Opcodes.LLOAD;\r
-import static org.objectweb.asm.Opcodes.LRETURN;\r
-import static org.objectweb.asm.Opcodes.NEW;\r
-import static org.objectweb.asm.Opcodes.POP;\r
-import static org.objectweb.asm.Opcodes.PUTFIELD;\r
-import static org.objectweb.asm.Opcodes.PUTSTATIC;\r
-import static org.objectweb.asm.Opcodes.RETURN;\r
-import static org.objectweb.asm.Opcodes.V1_6;\r
-\r
-import java.lang.reflect.Constructor;\r
-import java.lang.reflect.InvocationTargetException;\r
-import java.lang.reflect.Method;\r
-import java.util.Arrays;\r
-import java.util.Comparator;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-\r
-import org.objectweb.asm.ClassWriter;\r
-import org.objectweb.asm.FieldVisitor;\r
-import org.objectweb.asm.Label;\r
-import org.objectweb.asm.MethodVisitor;\r
-import org.objectweb.asm.Opcodes;\r
-import org.objectweb.asm.Type;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.Methods;\r
-import org.simantics.databoard.adapter.AdaptException;\r
-import org.simantics.databoard.adapter.Adapter;\r
-import org.simantics.databoard.adapter.AdapterConstructionException;\r
-import org.simantics.databoard.binding.error.BindingConstructionException;\r
-import org.simantics.databoard.method.MethodInterface.AsyncResult;\r
-import org.simantics.databoard.method.MethodInterface.ExecutionError;\r
+import static org.objectweb.asm.Opcodes.AALOAD;
+import static org.objectweb.asm.Opcodes.AASTORE;
+import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
+import static org.objectweb.asm.Opcodes.ACC_INTERFACE;
+import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
+import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.objectweb.asm.Opcodes.ACC_SUPER;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ANEWARRAY;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.ARRAYLENGTH;
+import static org.objectweb.asm.Opcodes.ASTORE;
+import static org.objectweb.asm.Opcodes.ATHROW;
+import static org.objectweb.asm.Opcodes.CHECKCAST;
+import static org.objectweb.asm.Opcodes.DLOAD;
+import static org.objectweb.asm.Opcodes.DRETURN;
+import static org.objectweb.asm.Opcodes.DUP;
+import static org.objectweb.asm.Opcodes.FLOAD;
+import static org.objectweb.asm.Opcodes.FRETURN;
+import static org.objectweb.asm.Opcodes.GETFIELD;
+import static org.objectweb.asm.Opcodes.GETSTATIC;
+import static org.objectweb.asm.Opcodes.GOTO;
+import static org.objectweb.asm.Opcodes.ICONST_0;
+import static org.objectweb.asm.Opcodes.IFEQ;
+import static org.objectweb.asm.Opcodes.IF_ICMPLT;
+import static org.objectweb.asm.Opcodes.ILOAD;
+import static org.objectweb.asm.Opcodes.INSTANCEOF;
+import static org.objectweb.asm.Opcodes.INVOKEINTERFACE;
+import static org.objectweb.asm.Opcodes.INVOKESPECIAL;
+import static org.objectweb.asm.Opcodes.INVOKESTATIC;
+import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
+import static org.objectweb.asm.Opcodes.IRETURN;
+import static org.objectweb.asm.Opcodes.ISTORE;
+import static org.objectweb.asm.Opcodes.LLOAD;
+import static org.objectweb.asm.Opcodes.LRETURN;
+import static org.objectweb.asm.Opcodes.NEW;
+import static org.objectweb.asm.Opcodes.POP;
+import static org.objectweb.asm.Opcodes.PUTFIELD;
+import static org.objectweb.asm.Opcodes.PUTSTATIC;
+import static org.objectweb.asm.Opcodes.RETURN;
+import static org.objectweb.asm.Opcodes.V1_6;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.Methods;
+import org.simantics.databoard.adapter.AdaptException;
+import org.simantics.databoard.adapter.Adapter;
+import org.simantics.databoard.adapter.AdapterConstructionException;
+import org.simantics.databoard.binding.error.BindingConstructionException;
+import org.simantics.databoard.method.MethodInterface.AsyncResult;
+import org.simantics.databoard.method.MethodInterface.ExecutionError;
public class MethodInterfaceUtil {
public static <T> MethodInterface bindInterface(Class<T> interfaze, final T obj) throws BindingConstructionException
{
final Interface interfaceType = Methods.getInterfaceType(interfaze);
- MethodInterface mi = bindInterface(interfaceType, obj);\r
- /*\r
- System.out.println("Created methodinterface for "+interfaze.getName());\r
- for (MethodTypeDefinition k : mi.getInterface().methodDefinitions) {\r
- System.out.print(k);\r
- if (k.getType().requestType.getComponentCount()>0) {\r
- System.out.print(System.identityHashCode( k.getType().requestType.getComponentType(0) ) );\r
- }\r
- System.out.println(); \r
- }\r
- */\r
+ MethodInterface mi = bindInterface(interfaceType, obj);
+ /*
+ System.out.println("Created methodinterface for "+interfaze.getName());
+ for (MethodTypeDefinition k : mi.getInterface().methodDefinitions) {
+ System.out.print(k);
+ if (k.getType().requestType.getComponentCount()>0) {
+ System.out.print(System.identityHashCode( k.getType().requestType.getComponentType(0) ) );
+ }
+ System.out.println();
+ }
+ */
return mi;
}
AsyncResultImpl result = new AsyncResultImpl();
try {
Object response = method.invoke(obj, (Object[]) request);
- if (response != null) result.setResponse(response);\r
+ if (response != null) result.setResponse(response);
else result.setInvokeException(new org.simantics.databoard.method.InvokeException(new NullPointerException()));
- } catch(InvocationTargetException t) {\r
- Throwable e = t.getTargetException();\r
- if (e instanceof RuntimeException) {\r
- result.setInvokeException(new org.simantics.databoard.method.InvokeException( (Exception) e));\r
+ } catch(InvocationTargetException t) {
+ Throwable e = t.getTargetException();
+ if (e instanceof RuntimeException) {
+ result.setInvokeException(new org.simantics.databoard.method.InvokeException( (Exception) e));
} else {
- result.setExecutionError(e);\r
+ result.setExecutionError(e);
}
} catch(IllegalArgumentException e) {
result.setInvokeException(new org.simantics.databoard.method.InvokeException(e));
} catch (IllegalAccessException e) {
throw new BindingConstructionException(e);
} catch (InvocationTargetException e) {
- throw new BindingConstructionException(e);
+ throw new BindingConstructionException(e.getCause());
}
}
Class<?> interfaze = loadClass(name.substring(0, name.length()-5));
ClassWriter cw = new ClassWriter(0);
createImpl(name, interfaze, cw);
- byte[] b = cw.toByteArray();\r
- /*\r
- new ClassReader(b).accept(\r
- new ASMifierClassVisitor(new PrintWriter(System.out)),\r
- 0\r
- );\r
+ byte[] b = cw.toByteArray();
+ /*
+ new ClassReader(b).accept(
+ new ASMifierClassVisitor(new PrintWriter(System.out)),
+ 0
+ );
*/
Class<?> clazz = defineClass(name, b, 0, b.length);
return clazz;
Class<?> returnType = m.getReturnType();
if (returnType==void.class) {
- mv.visitInsn(POP);\r
+ mv.visitInsn(POP);
mv.visitLabel(l1);
mv.visitInsn(RETURN);
} else if (returnType==int.class) {