From 8d55c98f024fdf53a93b73afa5ba2d5fb74cc451 Mon Sep 17 00:00:00 2001 From: "hannes%helma.at" Date: Thu, 16 Sep 2010 20:12:20 +0000 Subject: [PATCH] Avoid overwiting methods with same signature in JavaMembers method lookup. One class that triggers this bug is com.google.javascript.jscomp.JSSourceFile from Google's closure-compiler project, which overrides static methods of the parent class with a different return type. git-svn-id: svn://10.0.0.236/trunk@261227 18797224-902f-48f8-a5cc-f745e15eee43 --- .../src/org/mozilla/javascript/JavaMembers.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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;