diff --git a/src/org/mozilla/javascript/Context.java b/src/org/mozilla/javascript/Context.java index 8836e045f0..f57f1a499a 100644 --- a/src/org/mozilla/javascript/Context.java +++ b/src/org/mozilla/javascript/Context.java @@ -340,6 +340,24 @@ public class Context implements Closeable { */ public static final int FEATURE_ENABLE_JAVA_MAP_ACCESS = 21; + /** + * Configure whether JavaMembers lazy init off. + * + *

default is lazy init. + * + * @since 1.7 Release 15 + */ + public static final int FEATURE_JAVAMEMBERS_LAZY_INIT_OFF = 22; + + /** + * Configure whether JavaMembers reflect cache off. + * + *

default is cache on. + * + * @since 1.7 Release 15 + */ + public static final int FEATURE_JAVAMEMBERS_REFLECT_CACHE_OFF = 23; + public static final String languageVersionProperty = "language version"; public static final String errorReporterProperty = "error reporter"; diff --git a/src/org/mozilla/javascript/JavaMembers.java b/src/org/mozilla/javascript/JavaMembers.java index 1cc6028cd4..7541570210 100644 --- a/src/org/mozilla/javascript/JavaMembers.java +++ b/src/org/mozilla/javascript/JavaMembers.java @@ -16,7 +16,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.security.AccessControlContext; -import java.security.AccessControlException; import java.security.AllPermission; import java.security.Permission; import java.util.ArrayList; @@ -43,18 +42,12 @@ class JavaMembers { private static final Permission allPermission = new AllPermission(); - // rhino_JavaMembers_lazyInit=true for enable - private static final boolean LAZY_INIT = - "true".equals(getProperty("rhino_JavaMembers_lazyInit", "true")); - - // rhino_JavaMembers_reflect_cache_on=false for disable - private static final boolean CACHE_ON = - !"false".equals(getProperty("rhino_JavaMembers_reflect_cache_on", "true")); - // private final boolean includeProtected; private final boolean includePrivate; private final ClassReflectBean cfCache; private final Scriptable javaMemberScope; + private final boolean lazyInit; + private final boolean reflectCacheOn; JavaMembers(Scriptable scope, Class cl) { this(scope, cl, false); @@ -72,6 +65,8 @@ class JavaMembers { this.staticMembers = new HashMap(); this.cl = cl; includePrivate = cx.hasFeature(Context.FEATURE_ENHANCED_JAVA_ACCESS); + lazyInit = !cx.hasFeature(Context.FEATURE_JAVAMEMBERS_LAZY_INIT_OFF); + reflectCacheOn = !cx.hasFeature(Context.FEATURE_JAVAMEMBERS_REFLECT_CACHE_OFF); cfCache = reflect(scope, includeProtected, includePrivate); } finally { Context.exit(); @@ -135,7 +130,7 @@ private final Object getMember( final Scriptable scope, final String name, final boolean isStatic) { final Map ht = isStatic ? staticMembers : members; Object member = ht.get(name); - if (LAZY_INIT && member == null) { + if (lazyInit && member == null) { final Object m1 = initFieldAndMethod(name, ht, isStatic); Map props = isStatic ? cfCache.staticBeanProperties : cfCache.instBeanProperties; @@ -530,7 +525,7 @@ private static Map getCache( private ClassReflectBean createClassReflectBean( Class clazz, boolean includeProtected, boolean includePrivate) { final Map cache = - CACHE_ON ? getCache(clazz, includeProtected, includePrivate) : null; + reflectCacheOn ? getCache(clazz, includeProtected, includePrivate) : null; ClassReflectBean ret = null; if (cache != null) { ret = cache.get(clazz); @@ -680,7 +675,7 @@ private ClassReflectBean reflect( // gets in the way. final ClassReflectBean cfCache = createClassReflectBean(cl, includeProtected, includePrivate); - if (!LAZY_INIT) { + if (!lazyInit) { // replace Method instances by wrapped NativeJavaMethod objects // first in staticMembers and then in members for (int tableCursor = 0; tableCursor != 2; ++tableCursor) { @@ -800,7 +795,7 @@ private BeanProperty initBeanProperty( String setterName = "set".concat(nameComponent); // Is this value a method? Object member = ht.get(setterName); - if (member == null && LAZY_INIT) { + if (member == null && lazyInit) { member = initFieldAndMethod(setterName, ht, isStatic); } if (member instanceof NativeJavaMethod) { @@ -968,7 +963,7 @@ private MemberBox findGetter( String getterName = prefix.concat(propertyName); // Check that the getter is a method. Object member = ht.get(getterName); - if (member == null && LAZY_INIT) { + if (member == null && lazyInit) { member = initFieldAndMethod(getterName, ht, isStatic); } if (member instanceof NativeJavaMethod) { @@ -1040,14 +1035,6 @@ private static MemberBox extractSetMethod(MemberBox[] methods, boolean isStatic) return null; } - protected static final String getProperty(final String key, final String defaultValue) { - try { - return System.getProperty(key, defaultValue); - } catch (AccessControlException ex) { - return defaultValue; - } - } - Map getFieldAndMethodsObjects( Scriptable scope, Object javaObject, boolean isStatic) { Set names = isStatic ? cfCache.staticFieldAndMethods : cfCache.instFieldAndMethods;