diff core/src/luan/modules/JavaLuan.java @ 300:9fb523472035

add java() to control java access git-svn-id: https://luan-java.googlecode.com/svn/trunk@301 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 16 Dec 2014 13:13:33 +0000
parents a74559240b4f
children a6bf8ff720f8
line wrap: on
line diff
--- a/core/src/luan/modules/JavaLuan.java	Tue Dec 16 06:24:49 2014 +0000
+++ b/core/src/luan/modules/JavaLuan.java	Tue Dec 16 13:13:33 2014 +0000
@@ -27,12 +27,32 @@
 
 public final class JavaLuan {
 
+	public static void java(LuanState luan) {
+		luan.currentEnvironment().setJava();
+	}
+
+	public static final LuanFunction javaFn;
+	static {
+		try {
+			javaFn = new LuanJavaFunction(JavaLuan.class.getMethod("java",LuanState.class),null);
+		} catch(NoSuchMethodException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	private static void checkJava(LuanState luan) throws LuanException {
+		if( !luan.currentEnvironment().hasJava() )
+			throw luan.exception("Java isn't allowed");
+	}
+
 	private static boolean isLoaded(LuanState luan) {
 //		return PackageLuan.loaded(luan).get("luan:Java") != null;
 		return true;
 	}
 
 	public static Object __index(LuanState luan,Object obj,Object key) throws LuanException {
+		if( !luan.currentEnvironment().hasJava() )
+			return null;
 		if( obj instanceof Static ) {
 			if( key instanceof String ) {
 				String name = (String)key;
@@ -82,8 +102,6 @@
 			} else {
 				List<Member> members = getMembers(cls,name);
 				if( !members.isEmpty() ) {
-					if( name.equals("getClass") && !isLoaded(luan) )
-						return null;  // security
 					return member(obj,members);
 				}
 			}
@@ -121,6 +139,7 @@
 	}
 
 	public static void __newindex(LuanState luan,Object obj,Object key,Object value) throws LuanException {
+		checkJava(luan);
 		if( obj instanceof Static ) {
 			if( key instanceof String ) {
 				String name = (String)key;
@@ -291,6 +310,7 @@
 	}
 
 	public static Static load(LuanState luan,String name) throws LuanException {
+		checkJava(luan);
 		@SuppressWarnings("unchecked")
 		Map<String,Static> loaded = (Map<String,Static>)luan.registry().get("Java.loaded");
 		if( loaded == null ) {
@@ -318,12 +338,8 @@
 		}
 		return new Static(cls);
 	}
-/*
-	public static void importClass(LuanState luan,String name) throws LuanException {
-		luan.currentEnvironment().put( name.substring(name.lastIndexOf('.')+1), getClass(luan,name) );
-	}
-*/
-	static class AmbiguousJavaFunction extends LuanFunction {
+
+	private static class AmbiguousJavaFunction extends LuanFunction {
 		private final Map<Integer,List<LuanJavaFunction>> fnMap = new HashMap<Integer,List<LuanJavaFunction>>();
 
 		AmbiguousJavaFunction(List<LuanJavaFunction> fns) {