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