comparison core/src/luan/LuanJavaFunction.java @ 197:4c96cb73dd93

fix metatable cloning git-svn-id: https://luan-java.googlecode.com/svn/trunk@198 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 03 Jul 2014 18:36:46 +0000
parents 3dcb0f9bee82
children 239c8d650028
comparison
equal deleted inserted replaced
196:be0275bda373 197:4c96cb73dd93
9 import java.util.HashMap; 9 import java.util.HashMap;
10 import java.util.Set; 10 import java.util.Set;
11 import java.util.Arrays; 11 import java.util.Arrays;
12 12
13 13
14 public final class LuanJavaFunction extends LuanFunction { 14 public final class LuanJavaFunction extends LuanFunction implements DeepCloneable<LuanJavaFunction> {
15 private final JavaMethod method; 15 private final JavaMethod method;
16 private final Object obj; 16 private Object obj;
17 private final RtnConverter rtnConverter; 17 private final RtnConverter rtnConverter;
18 private final boolean takesLuaState; 18 private final boolean takesLuaState;
19 private final ArgConverter[] argConverters; 19 private final ArgConverter[] argConverters;
20 private final Class<?> varArgCls; 20 private final Class<?> varArgCls;
21 21
37 Class<?>[] paramTypes = method.getParameterTypes(); 37 Class<?>[] paramTypes = method.getParameterTypes();
38 this.varArgCls = paramTypes[paramTypes.length-1].getComponentType(); 38 this.varArgCls = paramTypes[paramTypes.length-1].getComponentType();
39 } else { 39 } else {
40 this.varArgCls = null; 40 this.varArgCls = null;
41 } 41 }
42 }
43
44 private LuanJavaFunction(LuanJavaFunction f) {
45 this.method = f.method;
46 this.rtnConverter = f.rtnConverter;
47 this.takesLuaState = f.takesLuaState;
48 this.argConverters = f.argConverters;
49 this.varArgCls = f.varArgCls;
50 }
51
52 @Override public LuanJavaFunction shallowClone() {
53 return obj==null ? this : new LuanJavaFunction(this);
54 }
55
56 @Override public void deepenClone(LuanJavaFunction clone,DeepCloner cloner) {
57 clone.obj = cloner.get(obj);
42 } 58 }
43 59
44 @Override public String toString() { 60 @Override public String toString() {
45 return "java-function: " + method; 61 return "java-function: " + method;
46 } 62 }