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.