You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2015/08/30 12:29:07 UTC

incubator-groovy git commit: GROOVY-7518: hashCode() throws NPE when using @CompileStatic with @EqualsAndHashCode (closes #70)

Repository: incubator-groovy
Updated Branches:
  refs/heads/master 6eb4466c2 -> bedd8b4f9


GROOVY-7518: hashCode() throws NPE when using @CompileStatic with @EqualsAndHashCode (closes #70)


Project: http://git-wip-us.apache.org/repos/asf/incubator-groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-groovy/commit/bedd8b4f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-groovy/tree/bedd8b4f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-groovy/diff/bedd8b4f

Branch: refs/heads/master
Commit: bedd8b4f9f94e01d146f9126788f2e87fded164a
Parents: 6eb4466
Author: paulk <pa...@asert.com.au>
Authored: Thu Jul 23 18:41:15 2015 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Sun Aug 30 20:27:54 2015 +1000

----------------------------------------------------------------------
 .../codehaus/groovy/util/HashCodeHelper.java    | 20 ++++++++++++++++++++
 .../CanonicalComponentsTransformTest.groovy     | 18 ++++++++++++++++++
 2 files changed, 38 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/bedd8b4f/src/main/org/codehaus/groovy/util/HashCodeHelper.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/util/HashCodeHelper.java b/src/main/org/codehaus/groovy/util/HashCodeHelper.java
index 2c92665..9e7afc9 100644
--- a/src/main/org/codehaus/groovy/util/HashCodeHelper.java
+++ b/src/main/org/codehaus/groovy/util/HashCodeHelper.java
@@ -41,22 +41,42 @@ public class HashCodeHelper {
         return shift(current) + (int) var;
     }
 
+    public static int updateHash(int current, Character var) {
+        return updateHash(current, var == null ? 0 : var.charValue());
+    }
+
     public static int updateHash(int current, int var) {
         return shift(current) + var;
     }
 
+    public static int updateHash(int current, Integer var) {
+        return updateHash(current, var == null ? 0 : var.intValue());
+    }
+
     public static int updateHash(int current, long var) {
         return shift(current) + (int) (var ^ (var >>> 32));
     }
 
+    public static int updateHash(int current, Long var) {
+        return updateHash(current, var == null ? 0L : var.longValue());
+    }
+
     public static int updateHash(int current, float var) {
         return updateHash(current, Float.floatToIntBits(var));
     }
 
+    public static int updateHash(int current, Float var) {
+        return updateHash(current, var == null ? 0f : var.floatValue());
+    }
+
     public static int updateHash(int current, double var) {
         return updateHash(current, Double.doubleToLongBits(var));
     }
 
+    public static int updateHash(int current, Double var) {
+        return updateHash(current, var == null ? 0d : var.doubleValue());
+    }
+
     public static int updateHash(int current, Object var) {
         if (var == null) return updateHash(current, 0);
         if (var.getClass().isArray())

http://git-wip-us.apache.org/repos/asf/incubator-groovy/blob/bedd8b4f/src/test/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy b/src/test/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
index 2e644d9..5794379 100644
--- a/src/test/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/CanonicalComponentsTransformTest.groovy
@@ -42,6 +42,24 @@ class CanonicalComponentsTransformTest extends GroovyShellTestCase {
         """
     }
 
+    void testHashCodeNullWrapperTypeCompileStatic_GROOVY7518() {
+        assertScript """
+            import groovy.transform.*
+
+            @EqualsAndHashCode
+            @CompileStatic
+            class Person {
+                Character someCharacter
+                Integer someInteger
+                Long someLong
+                Float someFloat
+                Double someDouble
+            }
+
+            assert new Person().hashCode()
+        """
+    }
+
     void testBooleanPropertyGROOVY6407() {
         assertScript """
             @groovy.transform.EqualsAndHashCode