diff core/src/luan/LuanJavaFunction.java @ 297:899253043270

remove PackageLuan.load_lib() git-svn-id: https://luan-java.googlecode.com/svn/trunk@298 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 16 Dec 2014 03:26:43 +0000
parents 9737ebb9aaa0
children ba8b0aae6453
line wrap: on
line diff
--- a/core/src/luan/LuanJavaFunction.java	Mon Dec 15 08:03:32 2014 +0000
+++ b/core/src/luan/LuanJavaFunction.java	Tue Dec 16 03:26:43 2014 +0000
@@ -21,21 +21,17 @@
 	private final Class<?> varArgCls;
 
 	public LuanJavaFunction(Method method,Object obj) {
-		this(method,obj,false);
-	}
-
-	public LuanJavaFunction(Method method,Object obj,boolean convertArray) {
-		this( JavaMethod.of(method), obj, convertArray );
+		this( JavaMethod.of(method), obj );
 	}
 
 	public LuanJavaFunction(Constructor constr,Object obj) {
-		this( JavaMethod.of(constr), obj, false );
+		this( JavaMethod.of(constr), obj );
 	}
 
-	private LuanJavaFunction(JavaMethod method,Object obj,boolean convertArray) {
+	private LuanJavaFunction(JavaMethod method,Object obj) {
 		this.method = method;
 		this.obj = obj;
-		this.rtnConverter = getRtnConverter(method,convertArray);
+		this.rtnConverter = getRtnConverter(method);
 		this.takesLuaState = takesLuaState(method);
 		this.argConverters = getArgConverters(takesLuaState,method);
 		if( method.isVarArgs() ) {
@@ -208,12 +204,14 @@
 		}
 	};
 
-	private static RtnConverter getRtnConverter(JavaMethod m,boolean convertArray) {
+	private static RtnConverter getRtnConverter(JavaMethod m) {
 		Class<?> rtnType = m.getReturnType();
 		if( rtnType == Void.TYPE )
 			return RTN_NOTHING;
-		if( convertArray && rtnType.isArray() && !rtnType.getComponentType().isPrimitive() )
+		if( !m.isLuan() && rtnType.isArray() && !rtnType.getComponentType().isPrimitive() ) {
+//System.out.println("qqqqqq "+m);
 			return RTN_ARRAY;
+		}
 		return RTN_SAME;
 	}
 
@@ -544,6 +542,7 @@
 		abstract Object invoke(Object obj,Object... args)
 			throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException;
 		abstract Class<?> getReturnType();
+		abstract boolean isLuan();
 	
 		static JavaMethod of(final Method m) {
 			return new JavaMethod() {
@@ -561,6 +560,9 @@
 				@Override Class<?> getReturnType() {
 					return m.getReturnType();
 				}
+				@Override boolean isLuan() {
+					return m.getAnnotation(LuanMethod.class) != null;
+				}
 				@Override public String toString() {
 					return m.toString();
 				}
@@ -583,6 +585,9 @@
 				@Override Class<?> getReturnType() {
 					return c.getDeclaringClass();
 				}
+				@Override boolean isLuan() {
+					return false;
+				}
 				@Override public String toString() {
 					return c.toString();
 				}