diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java b/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java index 372e97f04ee..5379902dc4f 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java @@ -354,9 +354,12 @@ class JavaMembers Modifier.isProtected(mods) || includePrivate) { - if (includePrivate) - method.setAccessible(true); - map.put(new MethodSignature(method), method); + MethodSignature sig = new MethodSignature(method); + if (!map.containsKey(sig)) { + if (includePrivate && !method.isAccessible()) + method.setAccessible(true); + map.put(sig, method); + } } } clazz = clazz.getSuperclass(); @@ -369,7 +372,7 @@ class JavaMembers Method method = methods[i]; MethodSignature sig = new MethodSignature(method); - if (map.get(sig) == null) + if (!map.containsKey(sig)) map.put(sig, method); } break; // getMethods gets superclass methods, no @@ -381,7 +384,9 @@ class JavaMembers for (int i = 0; i < methods.length; i++) { Method method = methods[i]; MethodSignature sig = new MethodSignature(method); - map.put(sig, method); + // Array may contain methods with same signature but different return value! + if (!map.containsKey(sig)) + map.put(sig, method); } } return;