From 933a6916288bb2c24c5cf0bf439bdb561752e347 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 22 Nov 2025 17:46:57 -0500 Subject: [PATCH 1/7] Avoid Class forName when on module-path --- .../http/HttpValidatorProvider.java | 25 +++++++++++-------- .../inject/spi/DefaultValidatorProvider.java | 3 +++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index 018af172..47c6927d 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -1,38 +1,43 @@ package io.avaje.validation.http; -import io.avaje.inject.BeanScopeBuilder; - import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; +import io.avaje.http.api.Validator; +import io.avaje.inject.BeanScopeBuilder; + /** * Plugin for avaje inject that provides a default Http Validator instance. */ public final class HttpValidatorProvider implements io.avaje.inject.spi.InjectPlugin { - private static final Class VALIDATOR_HTTP_CLASS = avajeHttpOnClasspath(); + private static final boolean VALIDATOR_HTTP_CLASS = avajeHttpOnClasspath(); - private static Class avajeHttpOnClasspath() { + private static boolean avajeHttpOnClasspath() { try { - return Class.forName("io.avaje.http.api.Validator"); + if (ModuleLayer.boot().findModule("io.avaje.http.api").isPresent()) { + return true; + } + Class.forName("io.avaje.http.api.Validator"); + return true; } catch (ClassNotFoundException e) { - return null; + return false; } - } + } @Override public Class[] provides() { - return VALIDATOR_HTTP_CLASS == null ? new Class[]{} : new Class[]{VALIDATOR_HTTP_CLASS}; + return !VALIDATOR_HTTP_CLASS ? new Class[]{} : new Class[]{Validator.class}; } @Override public void apply(BeanScopeBuilder builder) { - if (VALIDATOR_HTTP_CLASS == null) { + if (!VALIDATOR_HTTP_CLASS) { return; } - builder.provideDefault(null, VALIDATOR_HTTP_CLASS, () -> { + builder.provideDefault(null, Validator.class, () -> { final var props = builder.configPlugin(); final var locales = new ArrayList(); diff --git a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java index 388759e6..322f5e15 100644 --- a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java +++ b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java @@ -23,6 +23,9 @@ public final class DefaultValidatorProvider implements InjectPlugin { private static boolean aspectsOnClasspath() { try { + if (ModuleLayer.boot().findModule("io.avaje.inject.aop").isPresent()) { + return true; + } Class.forName("io.avaje.inject.aop.Aspect"); return true; } catch (ClassNotFoundException e) { From fdad37587ad613171437a27fd5a13f986719c1ea Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 22 Nov 2025 18:04:21 -0500 Subject: [PATCH 2/7] pivot to NoClassDef --- .../http/HttpValidatorProvider.java | 24 +++++++------------ .../inject/spi/DefaultValidatorProvider.java | 8 +++---- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index 47c6927d..d6338f9a 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -7,33 +7,27 @@ import io.avaje.http.api.Validator; import io.avaje.inject.BeanScopeBuilder; -/** - * Plugin for avaje inject that provides a default Http Validator instance. - */ +/** Plugin for avaje inject that provides a default Http Validator instance. */ public final class HttpValidatorProvider implements io.avaje.inject.spi.InjectPlugin { - private static final boolean VALIDATOR_HTTP_CLASS = avajeHttpOnClasspath(); + private static final Class VALIDATOR_HTTP_CLASS = avajeHttpOnClasspath(); - private static boolean avajeHttpOnClasspath() { + private static Class avajeHttpOnClasspath() { try { - if (ModuleLayer.boot().findModule("io.avaje.http.api").isPresent()) { - return true; - } - Class.forName("io.avaje.http.api.Validator"); - return true; - } catch (ClassNotFoundException e) { - return false; + return Validator.class; + } catch (NoClassDefFoundError e) { + return null; } - } + } @Override public Class[] provides() { - return !VALIDATOR_HTTP_CLASS ? new Class[]{} : new Class[]{Validator.class}; + return VALIDATOR_HTTP_CLASS == null ? new Class[] {} : new Class[] {VALIDATOR_HTTP_CLASS}; } @Override public void apply(BeanScopeBuilder builder) { - if (!VALIDATOR_HTTP_CLASS) { + if (VALIDATOR_HTTP_CLASS == null) { return; } diff --git a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java index 322f5e15..a3264bd0 100644 --- a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java +++ b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java @@ -8,6 +8,7 @@ import java.util.Locale; import io.avaje.inject.BeanScopeBuilder; +import io.avaje.inject.aop.Aspect; import io.avaje.inject.aop.AspectProvider; import io.avaje.inject.spi.GenericType; import io.avaje.inject.spi.InjectPlugin; @@ -23,12 +24,9 @@ public final class DefaultValidatorProvider implements InjectPlugin { private static boolean aspectsOnClasspath() { try { - if (ModuleLayer.boot().findModule("io.avaje.inject.aop").isPresent()) { - return true; - } - Class.forName("io.avaje.inject.aop.Aspect"); + var __ = Aspect.class; return true; - } catch (ClassNotFoundException e) { + } catch (NoClassDefFoundError e) { return false; } } From 60c1c26ad37e8389b34f1ceb3741df42953d2d31 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 22 Nov 2025 18:57:35 -0500 Subject: [PATCH 3/7] Re-add module-check --- .../http/HttpValidatorProvider.java | 20 ++++++++++++------- .../inject/spi/DefaultValidatorProvider.java | 3 +++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index d6338f9a..6576e3d0 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -7,27 +7,33 @@ import io.avaje.http.api.Validator; import io.avaje.inject.BeanScopeBuilder; -/** Plugin for avaje inject that provides a default Http Validator instance. */ +/** + * Plugin for avaje inject that provides a default Http Validator instance. + */ public final class HttpValidatorProvider implements io.avaje.inject.spi.InjectPlugin { - private static final Class VALIDATOR_HTTP_CLASS = avajeHttpOnClasspath(); + private static final boolean VALIDATOR_HTTP_AVAILABLE = avajeHttpOnClasspath(); - private static Class avajeHttpOnClasspath() { + private static boolean avajeHttpOnClasspath() { try { - return Validator.class; + if (ModuleLayer.boot().findModule("io.avaje.http.api").isPresent()) { + return true; + } + var __ = Validator.class; + return true; } catch (NoClassDefFoundError e) { - return null; + return false; } } @Override public Class[] provides() { - return VALIDATOR_HTTP_CLASS == null ? new Class[] {} : new Class[] {VALIDATOR_HTTP_CLASS}; + return !VALIDATOR_HTTP_AVAILABLE ? new Class[]{} : new Class[]{Validator.class}; } @Override public void apply(BeanScopeBuilder builder) { - if (VALIDATOR_HTTP_CLASS == null) { + if (!VALIDATOR_HTTP_AVAILABLE) { return; } diff --git a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java index a3264bd0..d2e61195 100644 --- a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java +++ b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java @@ -24,6 +24,9 @@ public final class DefaultValidatorProvider implements InjectPlugin { private static boolean aspectsOnClasspath() { try { + if (ModuleLayer.boot().findModule("io.avaje.inject.aop").isPresent()) { + return true; + } var __ = Aspect.class; return true; } catch (NoClassDefFoundError e) { From 61947b19cda5fb80108c48cef274e72398fc7e5f Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 22 Nov 2025 19:31:07 -0500 Subject: [PATCH 4/7] cleanup --- .../java/io/avaje/validation/http/HttpValidatorProvider.java | 3 +-- .../avaje/validation/inject/spi/DefaultValidatorProvider.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index 6576e3d0..7beffdaf 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -19,8 +19,7 @@ private static boolean avajeHttpOnClasspath() { if (ModuleLayer.boot().findModule("io.avaje.http.api").isPresent()) { return true; } - var __ = Validator.class; - return true; + return Validator.class != null; } catch (NoClassDefFoundError e) { return false; } diff --git a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java index d2e61195..4d139daa 100644 --- a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java +++ b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java @@ -27,8 +27,7 @@ private static boolean aspectsOnClasspath() { if (ModuleLayer.boot().findModule("io.avaje.inject.aop").isPresent()) { return true; } - var __ = Aspect.class; - return true; + return Aspect.class != null; } catch (NoClassDefFoundError e) { return false; } From 2cda22a97eb123b3cde41647f5977ae95405f1df Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 22 Nov 2025 20:58:29 -0500 Subject: [PATCH 5/7] optimize even more --- .../http/HttpValidatorProvider.java | 21 ++++++++++++------- .../inject/spi/DefaultValidatorProvider.java | 21 ++++++++++++------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index 7beffdaf..d1876f75 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -15,14 +15,19 @@ public final class HttpValidatorProvider implements io.avaje.inject.spi.InjectPl private static final boolean VALIDATOR_HTTP_AVAILABLE = avajeHttpOnClasspath(); private static boolean avajeHttpOnClasspath() { - try { - if (ModuleLayer.boot().findModule("io.avaje.http.api").isPresent()) { - return true; - } - return Validator.class != null; - } catch (NoClassDefFoundError e) { - return false; - } + + var modules = ModuleLayer.boot(); + return modules + .findModule("io.avaje.validation.http") + .map(m -> modules.findModule("io.avaje.http.api").isPresent()) + .orElseGet( + () -> { + try { + return Validator.class != null; + } catch (NoClassDefFoundError e) { + return false; + } + }); } @Override diff --git a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java index 4d139daa..72c69f08 100644 --- a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java +++ b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java @@ -23,14 +23,19 @@ public final class DefaultValidatorProvider implements InjectPlugin { private static final boolean WIRE_ASPECTS = aspectsOnClasspath(); private static boolean aspectsOnClasspath() { - try { - if (ModuleLayer.boot().findModule("io.avaje.inject.aop").isPresent()) { - return true; - } - return Aspect.class != null; - } catch (NoClassDefFoundError e) { - return false; - } + + var modules = ModuleLayer.boot(); + return modules + .findModule("io.avaje.validation.plugin") + .map(m -> modules.findModule("io.avaje.inject.aop").isPresent()) + .orElseGet( + () -> { + try { + return Aspect.class != null; + } catch (NoClassDefFoundError e) { + return false; + } + }); } @Override From ae06f68d1b188d8e0ab0985e09391b54c9c1d9c1 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Sat, 22 Nov 2025 22:58:48 -0500 Subject: [PATCH 6/7] Update HttpValidatorProvider.java --- .../io/avaje/validation/http/HttpValidatorProvider.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index d1876f75..7ada2061 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -12,7 +12,7 @@ */ public final class HttpValidatorProvider implements io.avaje.inject.spi.InjectPlugin { - private static final boolean VALIDATOR_HTTP_AVAILABLE = avajeHttpOnClasspath(); + private static final boolean WIRE_VALIDATOR = avajeHttpOnClasspath(); private static boolean avajeHttpOnClasspath() { @@ -32,12 +32,12 @@ private static boolean avajeHttpOnClasspath() { @Override public Class[] provides() { - return !VALIDATOR_HTTP_AVAILABLE ? new Class[]{} : new Class[]{Validator.class}; + return WIRE_VALIDATOR ? new Class[] {Validator.class} : new Class[] {}; } @Override public void apply(BeanScopeBuilder builder) { - if (!VALIDATOR_HTTP_AVAILABLE) { + if (!WIRE_VALIDATOR) { return; } From 3da002d09e270cb4e2dea06b5442685aa0b7f94b Mon Sep 17 00:00:00 2001 From: "robin.bygrave" Date: Tue, 25 Nov 2025 12:58:07 +1300 Subject: [PATCH 7/7] Format only --- .../http/HttpValidatorProvider.java | 20 +++++++++---------- .../inject/spi/DefaultValidatorProvider.java | 20 +++++++++---------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java index 7ada2061..88c54a8e 100644 --- a/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java +++ b/validator-http-plugin/src/main/java/io/avaje/validation/http/HttpValidatorProvider.java @@ -15,19 +15,17 @@ public final class HttpValidatorProvider implements io.avaje.inject.spi.InjectPl private static final boolean WIRE_VALIDATOR = avajeHttpOnClasspath(); private static boolean avajeHttpOnClasspath() { - var modules = ModuleLayer.boot(); return modules - .findModule("io.avaje.validation.http") - .map(m -> modules.findModule("io.avaje.http.api").isPresent()) - .orElseGet( - () -> { - try { - return Validator.class != null; - } catch (NoClassDefFoundError e) { - return false; - } - }); + .findModule("io.avaje.validation.http") + .map(m -> modules.findModule("io.avaje.http.api").isPresent()) + .orElseGet(() -> { + try { + return Validator.class != null; + } catch (NoClassDefFoundError e) { + return false; + } + }); } @Override diff --git a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java index 72c69f08..a113fd05 100644 --- a/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java +++ b/validator-inject-plugin/src/main/java/io/avaje/validation/inject/spi/DefaultValidatorProvider.java @@ -23,19 +23,17 @@ public final class DefaultValidatorProvider implements InjectPlugin { private static final boolean WIRE_ASPECTS = aspectsOnClasspath(); private static boolean aspectsOnClasspath() { - var modules = ModuleLayer.boot(); return modules - .findModule("io.avaje.validation.plugin") - .map(m -> modules.findModule("io.avaje.inject.aop").isPresent()) - .orElseGet( - () -> { - try { - return Aspect.class != null; - } catch (NoClassDefFoundError e) { - return false; - } - }); + .findModule("io.avaje.validation.plugin") + .map(m -> modules.findModule("io.avaje.inject.aop").isPresent()) + .orElseGet(() -> { + try { + return Aspect.class != null; + } catch (NoClassDefFoundError e) { + return false; + } + }); } @Override