From b8f06abafc47065f980a94c4ddf7be70cee83411 Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Thu, 1 Oct 2020 17:10:17 +0200 Subject: Don't save duplicate messages in validation context --- .../enigma/utils/validation/ParameterizedMessage.java | 15 +++++++++------ .../cuchaz/enigma/utils/validation/ValidationContext.java | 10 ++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'enigma/src/main/java/cuchaz') diff --git a/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java b/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java index 56b0ecc..48a5a10 100644 --- a/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java +++ b/enigma/src/main/java/cuchaz/enigma/utils/validation/ParameterizedMessage.java @@ -3,14 +3,16 @@ package cuchaz.enigma.utils.validation; import java.util.Arrays; import java.util.Objects; -public class ParameterizedMessage { +public final class ParameterizedMessage { public final Message message; private final Object[] params; + private final Validatable target; - public ParameterizedMessage(Message message, Object[] params) { + public ParameterizedMessage(Message message, Object[] params, Validatable target) { this.message = message; this.params = params; + this.target = target; } public String getText() { @@ -24,22 +26,23 @@ public class ParameterizedMessage { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (!(o instanceof ParameterizedMessage)) return false; ParameterizedMessage that = (ParameterizedMessage) o; return Objects.equals(message, that.message) && - Arrays.equals(params, that.params); + Arrays.equals(params, that.params) && + Objects.equals(target, that.target); } @Override public int hashCode() { - int result = Objects.hash(message); + int result = Objects.hash(message, target); result = 31 * result + Arrays.hashCode(params); return result; } @Override public String toString() { - return String.format("ParameterizedMessage { message: %s, params: %s }", message, Arrays.toString(params)); + return String.format("ParameterizedMessage { message: %s, params: %s, target: %s }", message, Arrays.toString(params), target); } } diff --git a/enigma/src/main/java/cuchaz/enigma/utils/validation/ValidationContext.java b/enigma/src/main/java/cuchaz/enigma/utils/validation/ValidationContext.java index d38fc21..ee2b595 100644 --- a/enigma/src/main/java/cuchaz/enigma/utils/validation/ValidationContext.java +++ b/enigma/src/main/java/cuchaz/enigma/utils/validation/ValidationContext.java @@ -41,11 +41,13 @@ public class ValidationContext { * @param args the arguments used when formatting the message text */ public void raise(Message message, Object... args) { - ParameterizedMessage pm = new ParameterizedMessage(message, args); - if (activeElement != null) { - activeElement.addMessage(pm); + ParameterizedMessage pm = new ParameterizedMessage(message, args, this.activeElement); + if (!this.messages.contains(pm)) { + if (activeElement != null) { + activeElement.addMessage(pm); + } + messages.add(pm); } - messages.add(pm); } /** -- cgit v1.2.3