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("[");