Fix a bug in Long.highestOneBit on GWT.

Change-Id: I50ddd063b7cd363e8f3ed41fef7ed3cea447ab7f
diff --git a/user/super/com/google/gwt/emul/java/lang/Long.java b/user/super/com/google/gwt/emul/java/lang/Long.java
index e6313d5..7115944 100644
--- a/user/super/com/google/gwt/emul/java/lang/Long.java
+++ b/user/super/com/google/gwt/emul/java/lang/Long.java
@@ -66,7 +66,7 @@
     if (high != 0) {
       return ((long) Integer.highestOneBit(high)) << 32;
     } else {
-      return Integer.highestOneBit((int) i);
+      return Integer.highestOneBit((int) i) & 0xFFFFFFFFL;
     }
   }
 
diff --git a/user/test/com/google/gwt/emultest/java/lang/LongTest.java b/user/test/com/google/gwt/emultest/java/lang/LongTest.java
index df38a56..0f0ab36 100644
--- a/user/test/com/google/gwt/emultest/java/lang/LongTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/LongTest.java
@@ -55,6 +55,7 @@
     assertEquals(Long.MIN_VALUE, Long.highestOneBit(-256));
     assertEquals(1, Long.highestOneBit(1));
     assertEquals(0x80, Long.highestOneBit(0x88));
+    assertEquals(1L << 31, Long.highestOneBit(1L << 31));
     assertEquals(0x4000000000000000L, Long.highestOneBit(Long.MAX_VALUE));
   }