Revision: 7857
Author: sp...@google.com
Date: Fri Apr  2 08:21:53 2010
Log: Merging revision 7850 from trunk, with the following command:

svn merge --ignore-ancestry -r7849:7850 https://google-web-toolkit.googlecode.com/svn/trunk

This fixes JsniRefLookup to not consider private methods from superclasses.

http://code.google.com/p/google-web-toolkit/source/detail?r=7857

Modified:
/branches/snapshot-2010.03.29-r7809/dev/core/src/com/google/gwt/dev/jjs/impl/JsniRefLookup.java /branches/snapshot-2010.03.29-r7809/dev/core/test/com/google/gwt/dev/jjs/impl/JsniRefLookupTest.java

=======================================
--- /branches/snapshot-2010.03.29-r7809/dev/core/src/com/google/gwt/dev/jjs/impl/JsniRefLookup.java Mon Jan 11 09:04:38 2010 +++ /branches/snapshot-2010.03.29-r7809/dev/core/src/com/google/gwt/dev/jjs/impl/JsniRefLookup.java Fri Apr 2 08:21:53 2010
@@ -183,7 +183,8 @@
    */
   private static void findMostDerivedMembers(
LinkedHashMap<String, LinkedHashMap<String, HasEnclosingType>> matchesBySig, - JDeclaredType targetType, String memberName, boolean addConstructors) {
+      JDeclaredType targetType, String memberName,
+      boolean addConstructorsAndPrivates) {
     /*
* Analyze superclasses and interfaces first. More derived members will thus
      * be seen later.
@@ -202,10 +203,16 @@
     // Get the methods on this class/interface.
     for (JMethod method : targetType.getMethods()) {
       if (method.getName().equals(memberName)) {
-        if (addConstructors || !method.getName().equals(JsniRef.NEW)) {
-          addMember(matchesBySig, method, getJsniSignature(method, false));
-          addMember(matchesBySig, method, getJsniSignature(method, true));
-        }
+        if (!addConstructorsAndPrivates) {
+          if (method.getName().equals(JsniRef.NEW)) {
+            continue;
+          }
+          if (method.isPrivate()) {
+            continue;
+          }
+        }
+        addMember(matchesBySig, method, getJsniSignature(method, false));
+        addMember(matchesBySig, method, getJsniSignature(method, true));
       }
     }

=======================================
--- /branches/snapshot-2010.03.29-r7809/dev/core/test/com/google/gwt/dev/jjs/impl/JsniRefLookupTest.java Mon Jan 11 09:04:38 2010 +++ /branches/snapshot-2010.03.29-r7809/dev/core/test/com/google/gwt/dev/jjs/impl/JsniRefLookupTest.java Fri Apr 2 08:21:53 2010
@@ -124,10 +124,39 @@
       }
     });

+    sourceOracle.addOrReplace(new MockJavaResource("test.PrivateSup") {
+      @Override
+      protected CharSequence getContent() {
+        StringBuffer code = new StringBuffer();
+        code.append("package test;\n");
+        code.append("public class PrivateSup {\n");
+        code.append("  private static int field;\n");
+        code.append("  private static int method() { return 0; }\n");
+        code.append("  private static int fieldSup;\n");
+        code.append("  private static int methodSuP() { return 0; }\n");
+        code.append("}\n");
+        return code;
+      }
+    });
+
+    sourceOracle.addOrReplace(new MockJavaResource("test.PrivateSub") {
+      @Override
+      protected CharSequence getContent() {
+        StringBuffer code = new StringBuffer();
+        code.append("package test;\n");
+        code.append("public class PrivateSub extends PrivateSup {\n");
+        code.append("  private static float field;\n");
+        code.append("  private static float method() { return 0; }\n");
+        code.append("  private static float methodSub() { return 0; }\n");
+        code.append("}\n");
+        return code;
+      }
+    });
+
     try {
       // The snippet must reference the classes so they will be compiled in
       program = compileSnippet("void",
-          "new test.Foo(); new test.Bar(); new ClassWithBridge();");
+ "new test.Foo(); new test.Bar(); new ClassWithBridge(); new PrivateSub();");
     } catch (UnableToCompleteException e) {
       throw new RuntimeException(e);
     }
@@ -400,6 +429,36 @@
       errors.assertHasError();
     }
   }
+
+  public void testPrivate() {
+    // test private entries in the requested class
+    {
+      MockErrorReporter errors = new MockErrorReporter();
+      JMethod res = (JMethod) lookup("test.PrivateSub::method()", errors);
+      errors.assertNoError();
+      assertEquals("test.PrivateSub", res.getEnclosingType().getName());
+      assertEquals("method", res.getName());
+    }
+    {
+      MockErrorReporter errors = new MockErrorReporter();
+      JField res = (JField) lookup("test.PrivateSub::field", errors);
+      errors.assertNoError();
+      assertEquals("test.PrivateSub", res.getEnclosingType().getName());
+      assertEquals("field", res.getName());
+    }
+
+    // test private entries in the superclass
+    {
+      MockErrorReporter errors = new MockErrorReporter();
+ JMethod res = (JMethod) lookup("test.PrivateSub::methodSup()", errors);
+      errors.assertHasError();
+    }
+    {
+      MockErrorReporter errors = new MockErrorReporter();
+      JField res = (JField) lookup("test.PrivateSub::fieldSup", errors);
+      errors.assertHasError();
+    }
+  }

   public void testWildcardLookups() {
     {

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

To unsubscribe, reply using "remove me" as the subject.

Reply via email to