Fix OOPHM breakage due to JSNI references to class literals, also remove a
warning for JSNI being resolved that could never be executed in hosted mode.
Patch by: jat, jgw
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@4902 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java b/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
index 48a46d5..f2b240f 100644
--- a/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
+++ b/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
@@ -146,21 +146,23 @@
* replacement, instead it would be necessary to significantly alter the
* semantics of the hand-written JS.
*/
- if (singleJsoImplTypes.contains(canonicalizeClassName(parsed.className()))) {
+ if (singleJsoImplTypes.contains(canonicalizeClassName(className))) {
logger.log(TreeLogger.WARN,
"Invalid JSNI reference to SingleJsoImpl interface ("
- + parsed.className() + "); consider using a trampoline. "
- + "Expect subsequent failures.", new NoSuchFieldError(
+ + className + "); consider using a trampoline. "
+ + "Expect subsequent failures.", new NoSuchFieldError(
jsniMemberRef));
return -1;
}
int memberId = dispClassInfo.getMemberId(memberName);
if (memberId < 0) {
- logger.log(TreeLogger.WARN, "Member '" + memberName
- + "' in JSNI reference '" + jsniMemberRef
- + "' could not be found; expect subsequent failures",
- new NoSuchFieldError(memberName));
+ if (!className.startsWith("java.")) {
+ logger.log(TreeLogger.WARN, "Member '" + memberName
+ + "' in JSNI reference '" + jsniMemberRef
+ + "' could not be found; expect subsequent failures",
+ new NoSuchFieldError(memberName));
+ }
}
return synthesizeDispId(dispClassInfo.getClassId(), memberId);
diff --git a/dev/core/src/com/google/gwt/dev/shell/SyntheticClassMember.java b/dev/core/src/com/google/gwt/dev/shell/SyntheticClassMember.java
index 429d11e..a12ae94 100644
--- a/dev/core/src/com/google/gwt/dev/shell/SyntheticClassMember.java
+++ b/dev/core/src/com/google/gwt/dev/shell/SyntheticClassMember.java
@@ -21,7 +21,7 @@
* This class is used to represent a synthetic field called "class" that allows
* JSNI references to class literals.
*/
-class SyntheticClassMember implements Member {
+public class SyntheticClassMember implements Member {
private final Class<?> clazz;
public SyntheticClassMember(Class<?> clazz) {
diff --git a/dev/oophm/overlay/com/google/gwt/dev/util/Jsni.java b/dev/oophm/overlay/com/google/gwt/dev/util/Jsni.java
index ad3e933..2df7d42 100644
--- a/dev/oophm/overlay/com/google/gwt/dev/util/Jsni.java
+++ b/dev/oophm/overlay/com/google/gwt/dev/util/Jsni.java
@@ -28,6 +28,7 @@
import com.google.gwt.dev.js.ast.JsProgram;
import com.google.gwt.dev.shell.DispatchIdOracle;
import com.google.gwt.dev.shell.JavaScriptHost;
+import com.google.gwt.dev.shell.SyntheticClassMember;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
@@ -112,7 +113,8 @@
member = dispatchInfo.getClassInfoByDispId(dispId).getMember(dispId);
}
- if (member == null || member instanceof Field) {
+ if (member == null || member instanceof Field
+ || member instanceof SyntheticClassMember) {
if (q != null) {
accept(q);
out.print("[");