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;