From 2825ffcafc6085e2da26d562314a4b6d98831cdc Mon Sep 17 00:00:00 2001 From: partic Date: Fri, 25 Mar 2022 20:57:45 +0800 Subject: [PATCH] enhance java builtin function --- java/src/pursuer/pxprpc/BuiltInFuncList.java | 14 ++++++++++++-- java/src/pursuer/pxprpc/ServerContext.java | 6 +++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/java/src/pursuer/pxprpc/BuiltInFuncList.java b/java/src/pursuer/pxprpc/BuiltInFuncList.java index 7463c35..773b85b 100644 --- a/java/src/pursuer/pxprpc/BuiltInFuncList.java +++ b/java/src/pursuer/pxprpc/BuiltInFuncList.java @@ -12,7 +12,7 @@ public class BuiltInFuncList { return null; } } - public Method getMethod(Object obj,String methodName){ + public AbstractCallable getMethod(Object obj,String methodName){ Method found=null; for(Method method:obj.getClass().getMethods()) { if(method.getName().equals(methodName)) { @@ -20,7 +20,17 @@ public class BuiltInFuncList { break; } } - return found; + return new MethodCallable(found); + } + public AbstractCallable getBoundMethod(Object obj,String methodName){ + Method found=null; + for(Method method:obj.getClass().getMethods()) { + if(method.getName().equals(methodName)) { + found=method; + break; + } + } + return new BoundMethodCallable(found,obj); } public boolean isException(Object obj) { return obj.getClass().isInstance(Exception.class); diff --git a/java/src/pursuer/pxprpc/ServerContext.java b/java/src/pursuer/pxprpc/ServerContext.java index cdc2684..cef3c45 100644 --- a/java/src/pursuer/pxprpc/ServerContext.java +++ b/java/src/pursuer/pxprpc/ServerContext.java @@ -162,16 +162,16 @@ public class ServerContext implements Closeable{ String namespace=name.substring(0,namespaceDelim); String func=name.substring(namespaceDelim+1); Object obj=funcMap.get(namespace); - Method found=null; + AbstractCallable found=null; if(obj!=null){ - found=builtIn.getMethod(obj, func); + found=builtIn.getBoundMethod(obj, func); } writeLock().lock(); if(found==null) { this.out.write(r.session); writeInt32(0); }else { - putRefSlots(r.destAddr, new Ref(new BoundMethodCallable(found, obj))); + putRefSlots(r.destAddr, new Ref(found)); this.out.write(r.session); writeInt32(r.destAddr); } -- 2.11.4.GIT