From ca16e23dfdb462021b06c087e5f2cf2c13e765b7 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 11 Jun 2026 16:47:08 +0200 Subject: [PATCH 1/3] Fix ISE when disabling all features --- core/src/main/java/dev/faststats/SimpleContext.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/dev/faststats/SimpleContext.java b/core/src/main/java/dev/faststats/SimpleContext.java index bf04a161..3907c9ab 100644 --- a/core/src/main/java/dev/faststats/SimpleContext.java +++ b/core/src/main/java/dev/faststats/SimpleContext.java @@ -52,13 +52,13 @@ protected SimpleContext(final Factory factory, final Config config, final @MustBeInvokedByOverriders protected final void initializeServices(final Factory factory) throws IllegalStateException { + if (factory.metrics == null && factory.errorTracker == null && factory.featureFlagService == null) + throw new IllegalStateException("Context created without any service attached, was this intentional?"); + this.metrics = config.submitMetrics() && factory.metrics != null ? factory.metrics.apply(metricsFactory()) : null; this.errorTrackerService = config.errorTracking() && factory.errorTracker != null ? new SimpleErrorTrackerService(this, factory.errorTracker) : null; this.featureFlagService = factory.featureFlagService != null ? factory.featureFlagService.apply(new SimpleFeatureFlagService.Factory(this)) : null; - if (metrics == null && errorTrackerService == null && featureFlagService == null) - throw new IllegalStateException("Context created without any service attached, was this intentional?"); - final var features = new HashSet(3); features.add("metrics=" + (metrics != null ? "yes" : "no")); features.add("error-tracking=" + (errorTrackerService != null ? "yes" : "no")); From eebfd85bd6c0b0935304aafd3992feae9efe8166 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 11 Jun 2026 16:53:00 +0200 Subject: [PATCH 2/3] Add tests --- .../test/java/dev/faststats/MockContext.java | 32 +++++++++++++++---- .../java/dev/faststats/SimpleContextTest.java | 12 +++++++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/core/src/test/java/dev/faststats/MockContext.java b/core/src/test/java/dev/faststats/MockContext.java index eef80ebc..0c06b050 100644 --- a/core/src/test/java/dev/faststats/MockContext.java +++ b/core/src/test/java/dev/faststats/MockContext.java @@ -17,7 +17,7 @@ public final class MockContext extends SimpleContext { private final Set> tasks = new CopyOnWriteArraySet<>(); private MockContext(final Factory factory) throws IllegalArgumentException { - super(factory, new MockConfig(UUID.randomUUID()), "test", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + super(factory, factory.config(), "test", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); initializeServices(factory); } @@ -54,37 +54,55 @@ public void shutdown() { executor.shutdown(); } - private record MockConfig(UUID serverId) implements Config { + private record MockConfig( + UUID serverId, + boolean enabled, + boolean submitMetrics, + boolean errorTracking, + boolean additionalMetrics, + boolean debug + ) implements Config { @Override public boolean enabled() { - return true; + return enabled; } @Override public boolean submitMetrics() { - return true; + return submitMetrics; } @Override public boolean errorTracking() { - return true; + return errorTracking; } @Override public boolean additionalMetrics() { - return true; + return additionalMetrics; } @Override public boolean debug() { - return true; + return debug; } } public static final class Factory extends SimpleContext.Factory { + private Config config = new MockConfig(UUID.randomUUID(), true, true, true, true, true); + + public Factory allFeaturesDisabled() { + config = new MockConfig(config.serverId(), false, false, false, false, false); + return this; + } + @Override public MockContext create() { return new MockContext(this); } + + private Config config() { + return config; + } } } diff --git a/core/src/test/java/dev/faststats/SimpleContextTest.java b/core/src/test/java/dev/faststats/SimpleContextTest.java index 153408f0..2d9072c7 100644 --- a/core/src/test/java/dev/faststats/SimpleContextTest.java +++ b/core/src/test/java/dev/faststats/SimpleContextTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -11,4 +12,15 @@ public void contextWithoutAttachedServicesThrows() { final var error = assertThrows(IllegalStateException.class, () -> new MockContext.Factory().create()); assertEquals("Context created without any service attached, was this intentional?", error.getMessage()); } + + @Test + public void contextWithAttachedServicesAndDisabledFeaturesDoesNotThrow() { + assertDoesNotThrow(() -> new MockContext.Factory() + .allFeaturesDisabled() + .metrics(Metrics.Factory::create) + .errorTrackerService(ErrorTracker.contextUnaware()) + .featureFlagService(FeatureFlagService.Factory::create) + .create() + ); + } } From d20c464abf8caf63fd5bdb27cc7a4ffa20af1b22 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 11 Jun 2026 16:53:34 +0200 Subject: [PATCH 3/3] Bump version to 0.25.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index ea21cd30..245ecb53 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=0.25.1 +version=0.25.2 org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m