From c71a01452ddac597d7a1a9d1ab74a1b046f56228 Mon Sep 17 00:00:00 2001 From: Siphalor Date: Wed, 17 Dec 2025 23:55:57 +0100 Subject: [PATCH] refactor!: Invert middleware application order The previous ordering was pretty confusing and even led to a mess-up in the serde validation. --- .../filter/AttributesReadWriteFilterExtensionImpl.java | 6 +++--- .../impl/CommentLoaderExtensionImpl.java | 4 ++-- .../core/api/middleware/DefaultMiddlewareContainer.java | 3 ++- .../api/validators/SimpleValidatorMiddleware.java | 8 ++++++-- .../impl/ValidationFallbackExtensionImpl.java | 4 ++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/tweed5/attributes-extension/src/main/java/de/siphalor/tweed5/attributesextension/impl/serde/filter/AttributesReadWriteFilterExtensionImpl.java b/tweed5/attributes-extension/src/main/java/de/siphalor/tweed5/attributesextension/impl/serde/filter/AttributesReadWriteFilterExtensionImpl.java index 54b935a..201d469 100644 --- a/tweed5/attributes-extension/src/main/java/de/siphalor/tweed5/attributesextension/impl/serde/filter/AttributesReadWriteFilterExtensionImpl.java +++ b/tweed5/attributes-extension/src/main/java/de/siphalor/tweed5/attributesextension/impl/serde/filter/AttributesReadWriteFilterExtensionImpl.java @@ -31,11 +31,11 @@ import java.util.*; public class AttributesReadWriteFilterExtensionImpl implements AttributesReadWriteFilterExtension, AttributesRelatedExtension, ReadWriteRelatedExtension { - private static final Set MIDDLEWARES_MUST_COME_BEFORE = Collections.emptySet(); - private static final Set MIDDLEWARES_MUST_COME_AFTER = new HashSet<>(Arrays.asList( - Middleware.DEFAULT_END, + private static final Set MIDDLEWARES_MUST_COME_BEFORE = new HashSet<>(Arrays.asList( + Middleware.DEFAULT_START, "validation" )); + private static final Set MIDDLEWARES_MUST_COME_AFTER = Collections.emptySet(); private static final UniqueSymbol TWEED_DATA_NOTHING_VALUE = new UniqueSymbol("nothing (skip value)"); private final ConfigContainer configContainer; diff --git a/tweed5/comment-loader-extension/src/main/java/de/siphalor/tweed5/commentloaderextension/impl/CommentLoaderExtensionImpl.java b/tweed5/comment-loader-extension/src/main/java/de/siphalor/tweed5/commentloaderextension/impl/CommentLoaderExtensionImpl.java index 926d435..ea34be6 100644 --- a/tweed5/comment-loader-extension/src/main/java/de/siphalor/tweed5/commentloaderextension/impl/CommentLoaderExtensionImpl.java +++ b/tweed5/comment-loader-extension/src/main/java/de/siphalor/tweed5/commentloaderextension/impl/CommentLoaderExtensionImpl.java @@ -53,12 +53,12 @@ public class CommentLoaderExtensionImpl implements CommentLoaderExtension, Comme @Override public Set mustComeBefore() { - return Collections.singleton(Middleware.DEFAULT_START); + return Collections.emptySet(); } @Override public Set mustComeAfter() { - return Collections.emptySet(); + return Collections.singleton(Middleware.DEFAULT_END); } @Override diff --git a/tweed5/core/src/main/java/de/siphalor/tweed5/core/api/middleware/DefaultMiddlewareContainer.java b/tweed5/core/src/main/java/de/siphalor/tweed5/core/api/middleware/DefaultMiddlewareContainer.java index b3f9e1a..eec35e6 100644 --- a/tweed5/core/src/main/java/de/siphalor/tweed5/core/api/middleware/DefaultMiddlewareContainer.java +++ b/tweed5/core/src/main/java/de/siphalor/tweed5/core/api/middleware/DefaultMiddlewareContainer.java @@ -112,7 +112,8 @@ public class DefaultMiddlewareContainer implements MiddlewareContainer { throw new IllegalStateException("Middleware container has not been sealed"); } M combined = inner; - for (Middleware middleware : middlewares) { + for (int i = middlewares.size() - 1; i >= 0; i--) { + Middleware middleware = middlewares.get(i); combined = middleware.process(combined); } return combined; diff --git a/tweed5/default-extensions/src/main/java/de/siphalor/tweed5/defaultextensions/validation/api/validators/SimpleValidatorMiddleware.java b/tweed5/default-extensions/src/main/java/de/siphalor/tweed5/defaultextensions/validation/api/validators/SimpleValidatorMiddleware.java index 8ad8cf8..b996416 100644 --- a/tweed5/default-extensions/src/main/java/de/siphalor/tweed5/defaultextensions/validation/api/validators/SimpleValidatorMiddleware.java +++ b/tweed5/default-extensions/src/main/java/de/siphalor/tweed5/defaultextensions/validation/api/validators/SimpleValidatorMiddleware.java @@ -19,7 +19,7 @@ public class SimpleValidatorMiddleware implements Middleware ValidationResult validate(ConfigEntry configEntry, T value) { - return inner.validate(configEntry, value).andThen(v -> validator.validate(configEntry, v)); + return validator.validate(configEntry, value).andThen(v -> inner.validate(configEntry, v)); } @Override @@ -28,7 +28,11 @@ public class SimpleValidatorMiddleware implements Middleware mustComeBefore() { - return Collections.emptySet(); + return Collections.singleton(Middleware.DEFAULT_START); } @Override public Set mustComeAfter() { - return Collections.singleton("$default.end"); + return Collections.emptySet(); } @Override