diff --git a/src/main/java/plugins/adufour/vars/lang/Var.java b/src/main/java/plugins/adufour/vars/lang/Var.java index 4f5d32c05a6c08d1856bc18b925b57f722292f5b..9cb6cdc25fa72ada8d6a70a26199f6716a6d9064 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 c1181624bfe617ed9efdcb134f2b391ac695f390..1493cb26af47fdc5a431462f973549a467cafbcc 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 d5d2074a1bbb38be9f7c6cd0a2bc25d820af2079..bbfd1a421e0f5a89d7469c70e0dda2d0fc709624 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 067eb3011f8a354a8e749fe8d0ce07439258f8f1..7d63ed02dd5b43c6dd08554efec571b956b75a81 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; + } }