Author: [EMAIL PROTECTED]
Date: Wed Sep  3 15:35:57 2008
New Revision: 3612

Modified:
    releases/1.5/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java

Log:
Fixes issue #2841; in hosted mode, JSNI refs to static methods could  
incorrectly resolve to the same-signature method in a super class.

Also in this patch, do not create entries for synthetic methods since they  
can potential conflict with real methods.

Review by: bobv

Modified:  
releases/1.5/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java
==============================================================================
---  
releases/1.5/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java       
 
(original)
+++  
releases/1.5/dev/core/src/com/google/gwt/dev/shell/DispatchClassInfo.java       
 
Wed Sep  3 15:35:57 2008
@@ -63,11 +63,12 @@
    }

    private void addMember(Member member, String sig) {
-    if (!memberIdByName.containsKey(sig)) {
-      memberById.add(member);
-      int index = memberById.size() - 1;
-      memberIdByName.put(sig, new Integer(index));
+    if (member.isSynthetic()) {
+      return;
      }
+    int index = memberById.size();
+    memberById.add(member);
+    memberIdByName.put(sig, index);
    }

    private String getJsniSignature(Member member) {
@@ -148,7 +149,8 @@

    private void lazyInitTargetMembersUsingReflectionHelper(Class<?>  
targetClass,
        boolean addConstructors) {
-    // Start by analyzing the superclass recursively.
+    // Start by analyzing the superclass recursively; the concrete class  
will
+    // clobber on overrides.
      Class<?> superclass = targetClass.getSuperclass();
      if (superclass != null) {
        lazyInitTargetMembersUsingReflectionHelper(superclass, false);
@@ -158,11 +160,10 @@
      }

      if (addConstructors) {
-      Constructor<?>[] constructors =  
targetClass.getDeclaredConstructors();
-      for (Constructor<?> c : constructors) {
-        c.setAccessible(true);
-        String sig = getJsniSignature(c);
-        addMember(c, sig);
+      for (Constructor<?> ctor : targetClass.getDeclaredConstructors()) {
+        ctor.setAccessible(true);
+        String sig = getJsniSignature(ctor);
+        addMember(ctor, sig);
        }
      }

@@ -180,19 +181,17 @@
       */

      // Get the methods on this class/interface.
-    //
-    Method[] methods = targetClass.getDeclaredMethods();
-    for (int i = 0; i < methods.length; i++) {
-      methods[i].setAccessible(true);
-      String sig = getJsniSignature(methods[i]);
-      addMember(methods[i], sig);
+    for (Method method : targetClass.getDeclaredMethods()) {
+      method.setAccessible(true);
+      String sig = getJsniSignature(method);
+      addMember(method, sig);
      }

      // Get the fields on this class/interface.
      Field[] fields = targetClass.getDeclaredFields();
-    for (int i = 0; i < fields.length; i++) {
-      fields[i].setAccessible(true);
-      addMember(fields[i], fields[i].getName());
+    for (Field field : fields) {
+      field.setAccessible(true);
+      addMember(field, field.getName());
      }
    }
  }

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to