From 623b82dd2a0a58f43bca09e21e18e77f5cc401d4 Mon Sep 17 00:00:00 2001
From: Daniel Gonzalez <dgonzale@pasteur.fr>
Date: Wed, 19 Aug 2020 11:47:36 +0200
Subject: [PATCH] Fixed number comparisons throwing warning

- Happened on type referencing with different number type
---
 .../java/plugins/adufour/vars/lang/Var.java   |  7 +-
 .../plugins/adufour/vars/lang/VarFloat.java   | 68 +++++++++----------
 .../plugins/adufour/vars/lang/VarLong.java    | 10 +++
 .../plugins/adufour/vars/lang/VarNumber.java  | 10 +++
 4 files changed, 59 insertions(+), 36 deletions(-)

diff --git a/src/main/java/plugins/adufour/vars/lang/Var.java b/src/main/java/plugins/adufour/vars/lang/Var.java
index 4f5d32c..9cb6cdc 100644
--- a/src/main/java/plugins/adufour/vars/lang/Var.java
+++ b/src/main/java/plugins/adufour/vars/lang/Var.java
@@ -808,7 +808,7 @@ public class Var<T> implements XMLPersistent, VarListener<T>
                 if (newValue == null)
                     changed = false;
             }
-            else if (referenceValue.equals(newValue))
+            else if (areValuesEqual(referenceValue, newValue))
                 changed = false;
 
             // value changed beside we are liked to a reference ?? --> shouldn't arrive
@@ -828,6 +828,11 @@ public class Var<T> implements XMLPersistent, VarListener<T>
         fireVariableChanged(oldValue, newValue);
     }
 
+    protected boolean areValuesEqual(final T a, final Object b)
+    {
+        return a.equals(b);
+    }
+
     @Override
     public String toString()
     {
diff --git a/src/main/java/plugins/adufour/vars/lang/VarFloat.java b/src/main/java/plugins/adufour/vars/lang/VarFloat.java
index c118162..1493cb2 100644
--- a/src/main/java/plugins/adufour/vars/lang/VarFloat.java
+++ b/src/main/java/plugins/adufour/vars/lang/VarFloat.java
@@ -14,9 +14,8 @@ public class VarFloat extends VarNumber<Float>
     {
         this(name, defaultValue == null ? 0f : defaultValue.floatValue());
     }
-    
+
     /**
-     * 
      * @param name
      * @param defaultValue
      */
@@ -24,46 +23,45 @@ public class VarFloat extends VarNumber<Float>
     {
         this(name, defaultValue, null);
     }
-    
+
     /**
-     * 
      * @param name
      * @param defaultValue
      * @param defaultListener
-     *            A listener to add to this variable immediately after creation
+     *        A listener to add to this variable immediately after creation
      */
     public VarFloat(String name, float defaultValue, VarListener<Float> defaultListener)
     {
         super(name, Float.TYPE, defaultValue, defaultListener);
     }
-    
-	@Override
-	public Float parse(String s)
-	{
-		return Float.parseFloat(s);
-	}
-	
-	@Override
-	public int compareTo(Float f)
-	{
-		return getValue().compareTo(f);
-	}
-	
-	@Override
-	public Float getValue()
-	{
-	    return getValue(false);
-	}
-	
-	/**
-	 * Returns a Float representing the variable value.<br>
-	 * NOTE: if the current variable references a variable of different (wider) type, truncation
-	 * will occur
-	 */
-	public Float getValue(boolean forbidNull)
-	{
-		Number number = super.getValue(forbidNull);
-    	
-    	return number == null ? null : number.floatValue();
-	}
+
+    @Override
+    public Float parse(String s)
+    {
+        return Float.parseFloat(s);
+    }
+
+    @Override
+    public int compareTo(Float f)
+    {
+        return getValue().compareTo(f);
+    }
+
+    @Override
+    public Float getValue()
+    {
+        return getValue(false);
+    }
+
+    /**
+     * Returns a Float representing the variable value.<br>
+     * NOTE: if the current variable references a variable of different (wider) type, truncation
+     * will occur
+     */
+    public Float getValue(boolean forbidNull)
+    {
+        Number number = super.getValue(forbidNull);
+
+        return number == null ? null : number.floatValue();
+    }
 }
diff --git a/src/main/java/plugins/adufour/vars/lang/VarLong.java b/src/main/java/plugins/adufour/vars/lang/VarLong.java
index d5d2074..bbfd1a4 100644
--- a/src/main/java/plugins/adufour/vars/lang/VarLong.java
+++ b/src/main/java/plugins/adufour/vars/lang/VarLong.java
@@ -54,4 +54,14 @@ public class VarLong extends VarNumber<Long>
 
         return result == null ? null : result;
     }
+
+    @Override
+    protected boolean areValuesEqual(Long a, Object b)
+    {
+        if (b instanceof Number)
+        {
+            return super.areValuesEqual(a, ((Number) b).longValue());
+        }
+        return false;
+    }
 }
diff --git a/src/main/java/plugins/adufour/vars/lang/VarNumber.java b/src/main/java/plugins/adufour/vars/lang/VarNumber.java
index 067eb30..7d63ed0 100644
--- a/src/main/java/plugins/adufour/vars/lang/VarNumber.java
+++ b/src/main/java/plugins/adufour/vars/lang/VarNumber.java
@@ -74,4 +74,14 @@ public abstract class VarNumber<N extends Number> extends Var<N> implements Comp
         
         return super.createVarEditor();
     }
+
+    
+    @Override
+    protected boolean areValuesEqual(Number a, Object b)
+    {
+        if (b instanceof Number) {
+            return Double.compare(a.doubleValue(), ((Number)b).doubleValue()) == 0;
+        }
+        return false;
+    }
 }
-- 
GitLab