changeset 50:272b6f1d7dac

fix java accessibility git-svn-id: https://luan-java.googlecode.com/svn/trunk@51 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 28 Dec 2012 19:48:43 +0000
parents 8ede219cd111
children 28dfd91a816c
files src/luan/lib/JavaLib.java src/luan/tools/WebShell.java
diffstat 2 files changed, 24 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/lib/JavaLib.java	Fri Dec 28 19:35:04 2012 +0000
+++ b/src/luan/lib/JavaLib.java	Fri Dec 28 19:48:43 2012 +0000
@@ -1,6 +1,7 @@
 package luan.lib;
 
 import java.lang.reflect.Array;
+import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Member;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -79,7 +80,7 @@
 						}
 					}
 				} else {
-					List<Member> members = getStaticMembers(cls,name);
+					List<AccessibleObject> members = getStaticMembers(cls,name);
 					if( !members.isEmpty() ) {
 						return member(null,members);
 					}
@@ -103,7 +104,7 @@
 			if( "instanceof".equals(name) ) {
 				return new LuanJavaFunction(instanceOf,new InstanceOf(obj));
 			} else {
-				List<Member> members = getMembers(cls,name);
+				List<AccessibleObject> members = getMembers(cls,name);
 				if( !members.isEmpty() ) {
 					return member(obj,members);
 				}
@@ -112,10 +113,13 @@
 		throw new LuanException(luan,LuanElement.JAVA,"invalid index for java object: "+key);
 	}
 
-	private static Object member(Object obj,List<Member> members) throws LuanException {
+	private static Object member(Object obj,List<AccessibleObject> members) throws LuanException {
 		try {
+			for( AccessibleObject m : members ) {
+				m.setAccessible(true);
+			}
 			if( members.size()==1 ) {
-				Member member = members.get(0);
+				AccessibleObject member = members.get(0);
 				if( member instanceof Field ) {
 					Field field = (Field)member;
 					return field.get(obj);
@@ -125,7 +129,7 @@
 				}
 			} else {
 				List<LuanJavaFunction> fns = new ArrayList<LuanJavaFunction>();
-				for( Member member : members ) {
+				for( AccessibleObject member : members ) {
 					Method method = (Method)member;
 					fns.add(new LuanJavaFunction(method,obj));
 				}
@@ -136,26 +140,26 @@
 		}
 	}
 
-	private static Map<Class,Map<String,List<Member>>> memberMap = new HashMap<Class,Map<String,List<Member>>>();
+	private static Map<Class,Map<String,List<AccessibleObject>>> memberMap = new HashMap<Class,Map<String,List<AccessibleObject>>>();
 
-	private static synchronized List<Member> getMembers(Class cls,String name) {
-		Map<String,List<Member>> clsMap = memberMap.get(cls);
+	private static synchronized List<AccessibleObject> getMembers(Class cls,String name) {
+		Map<String,List<AccessibleObject>> clsMap = memberMap.get(cls);
 		if( clsMap == null ) {
-			clsMap = new HashMap<String,List<Member>>();
+			clsMap = new HashMap<String,List<AccessibleObject>>();
 			for( Field field : cls.getFields() ) {
 				String s = field.getName();
-				List<Member> list = clsMap.get(s);
+				List<AccessibleObject> list = clsMap.get(s);
 				if( list == null ) {
-					list = new ArrayList<Member>();
+					list = new ArrayList<AccessibleObject>();
 					clsMap.put(s,list);
 				}
 				list.add(field);
 			}
 			for( Method method : cls.getMethods() ) {
 				String s = method.getName();
-				List<Member> list = clsMap.get(s);
+				List<AccessibleObject> list = clsMap.get(s);
 				if( list == null ) {
-					list = new ArrayList<Member>();
+					list = new ArrayList<AccessibleObject>();
 					clsMap.put(s,list);
 				}
 				list.add(method);
@@ -165,10 +169,10 @@
 		return clsMap.get(name);
 	}
 
-	private static synchronized List<Member> getStaticMembers(Class cls,String name) {
-		List<Member> staticMembers = new ArrayList<Member>();
-		for( Member m : getMembers(cls,name) ) {
-			if( Modifier.isStatic(m.getModifiers()) )
+	private static synchronized List<AccessibleObject> getStaticMembers(Class cls,String name) {
+		List<AccessibleObject> staticMembers = new ArrayList<AccessibleObject>();
+		for( AccessibleObject m : getMembers(cls,name) ) {
+			if( Modifier.isStatic(((Member)m).getModifiers()) )
 				staticMembers.add(m);
 		}
 		return staticMembers;
--- a/src/luan/tools/WebShell.java	Fri Dec 28 19:35:04 2012 +0000
+++ b/src/luan/tools/WebShell.java	Fri Dec 28 19:48:43 2012 +0000
@@ -48,10 +48,10 @@
 		PrintWriter out = response.getWriter();
 		HttpSession session = request.getSession();
 
-		ByteArrayOutputStream history = (ByteArrayOutputStream)session.getValue("history");
+		ByteArrayOutputStream history = (ByteArrayOutputStream)session.getValue("luan_history");
 		if( history==null ) {
 			history = new ByteArrayOutputStream();
-			session.putValue("history",history);
+			session.putValue("luan_history",history);
 		}
 
 		if( request.getParameter("clear") != null ) {
@@ -82,6 +82,7 @@
 				} catch(LuanException e) {
 					logger.info("",e);
 					writer.write( HtmlLib.encode(e.toString()) );
+					writer.write("\r\n");
 				}
 				writer.flush();
 			}