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 0654fa4..b4e8c9b 100644
--- a/user/super/com/google/gwt/emul/java/lang/Long.java
+++ b/user/super/com/google/gwt/emul/java/lang/Long.java
@@ -15,14 +15,10 @@
  */
 package java.lang;
 
-/**
- * Wraps a primitive <code>long</code> as an object.
- */
+/** Wraps a primitive <code>long</code> as an object. */
 public final class Long extends Number implements Comparable<Long> {
 
-  /**
-   * Use nested class to avoid clinit on outer.
-   */
+  /** Use nested class to avoid clinit on outer. */
   static class BoxedValues {
     // Box values according to JLS - between -128 and 127
     static Long[] boxedValues = new Long[256];
@@ -56,7 +52,9 @@
   }
 
   public static int hashCode(long l) {
-    return (int) l;
+    int high = (int) (l >>> 32);
+    int low = (int) l;
+    return high ^ low;
   }
 
   public static long highestOneBit(long i) {
@@ -109,15 +107,13 @@
   public static long reverse(long i) {
     int high = (int) (i >>> 32);
     int low = (int) i;
-    return ((long) Integer.reverse(low) << 32)
-        | (Integer.reverse(high) & 0xffffffffL);
+    return ((long) Integer.reverse(low) << 32) | (Integer.reverse(high) & 0xffffffffL);
   }
 
   public static long reverseBytes(long i) {
     int high = (int) (i >>> 32);
     int low = (int) i;
-    return ((long) Integer.reverseBytes(low) << 32)
-        | (Integer.reverseBytes(high) & 0xffffffffL);
+    return ((long) Integer.reverseBytes(low) << 32) | (Integer.reverseBytes(high) & 0xffffffffL);
   }
 
   public static long rotateLeft(long i, int distance) {
diff --git a/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java b/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java
index aa1be65..f6a344b 100644
--- a/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java
+++ b/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java
@@ -16,15 +16,13 @@
 package com.google.gwt.emultest.java.sql;
 
 import com.google.gwt.junit.client.GWTTestCase;
-
 import java.sql.Date;
 
 /**
- * Tests {@link java.sql.Date}. We assume that the underlying
- * {@link java.util.Date} implementation is correct and concentrate only on the
- * differences between the two.
+ * Tests {@link java.sql.Date}. We assume that the underlying {@link java.util.Date} implementation
+ * is correct and concentrate only on the differences between the two.
  */
-@SuppressWarnings("deprecation")
+@SuppressWarnings({"deprecation", "DoNotCall"})
 public class SqlDateTest extends GWTTestCase {
 
   /**
