From 35d4cc23c85a24f2d55992cb40b357e450f8e9b7 Mon Sep 17 00:00:00 2001 From: Todd Baert Date: Mon, 26 Aug 2024 09:16:10 -0400 Subject: [PATCH] chore: various non-functional refactors (#1066) Signed-off-by: Todd Baert --- .../java/dev/openfeature/sdk/BooleanHook.java | 5 +++- .../java/dev/openfeature/sdk/DoubleHook.java | 5 +++- .../dev/openfeature/sdk/ImmutableContext.java | 22 ++++++++++++---- .../java/dev/openfeature/sdk/IntegerHook.java | 5 +++- .../dev/openfeature/sdk/MutableContext.java | 26 ++++++++++++++----- .../openfeature/sdk/OpenFeatureClient.java | 8 +++++- .../java/dev/openfeature/sdk/StringHook.java | 5 +++- .../ExcludeFromGeneratedCoverageReport.java | 14 ++++++++++ 8 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 src/main/java/dev/openfeature/sdk/internal/ExcludeFromGeneratedCoverageReport.java diff --git a/src/main/java/dev/openfeature/sdk/BooleanHook.java b/src/main/java/dev/openfeature/sdk/BooleanHook.java index bc07d898..e9277766 100644 --- a/src/main/java/dev/openfeature/sdk/BooleanHook.java +++ b/src/main/java/dev/openfeature/sdk/BooleanHook.java @@ -1,7 +1,10 @@ package dev.openfeature.sdk; /** - * {@inheritDoc} + * An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic + * to the lifecycle of flag evaluation. + * + * @see Hook */ public interface BooleanHook extends Hook { diff --git a/src/main/java/dev/openfeature/sdk/DoubleHook.java b/src/main/java/dev/openfeature/sdk/DoubleHook.java index 1da0602d..3ccf88b1 100644 --- a/src/main/java/dev/openfeature/sdk/DoubleHook.java +++ b/src/main/java/dev/openfeature/sdk/DoubleHook.java @@ -1,7 +1,10 @@ package dev.openfeature.sdk; /** - * {@inheritDoc} + * An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic + * to the lifecycle of flag evaluation. + * + * @see Hook */ public interface DoubleHook extends Hook { diff --git a/src/main/java/dev/openfeature/sdk/ImmutableContext.java b/src/main/java/dev/openfeature/sdk/ImmutableContext.java index 57009987..fd2ff2a6 100644 --- a/src/main/java/dev/openfeature/sdk/ImmutableContext.java +++ b/src/main/java/dev/openfeature/sdk/ImmutableContext.java @@ -1,10 +1,11 @@ package dev.openfeature.sdk; -import lombok.ToString; -import lombok.experimental.Delegate; - import java.util.HashMap; import java.util.Map; +import java.util.function.Function; +import dev.openfeature.sdk.internal.ExcludeFromGeneratedCoverageReport; +import lombok.ToString; +import lombok.experimental.Delegate; /** * The EvaluationContext is a container for arbitrary contextual data @@ -16,8 +17,8 @@ @SuppressWarnings("PMD.BeanMembersShouldSerialize") public final class ImmutableContext implements EvaluationContext { - @Delegate - private final Structure structure; + @Delegate(excludes = DelegateExclusions.class) + private final ImmutableStructure structure; /** * Create an immutable context with an empty targeting_key and attributes provided. @@ -84,4 +85,15 @@ public EvaluationContext merge(EvaluationContext overridingContext) { return new ImmutableContext( this.merge(ImmutableStructure::new, this.asMap(), overridingContext.asMap())); } + + @SuppressWarnings("all") + private static class DelegateExclusions { + @ExcludeFromGeneratedCoverageReport + public Map merge(Function, Structure> newStructure, + Map base, + Map overriding) { + + return null; + } + } } diff --git a/src/main/java/dev/openfeature/sdk/IntegerHook.java b/src/main/java/dev/openfeature/sdk/IntegerHook.java index 1386152e..ada05c78 100644 --- a/src/main/java/dev/openfeature/sdk/IntegerHook.java +++ b/src/main/java/dev/openfeature/sdk/IntegerHook.java @@ -1,7 +1,10 @@ package dev.openfeature.sdk; /** - * {@inheritDoc} + * An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic + * to the lifecycle of flag evaluation. + * + * @see Hook */ public interface IntegerHook extends Hook { diff --git a/src/main/java/dev/openfeature/sdk/MutableContext.java b/src/main/java/dev/openfeature/sdk/MutableContext.java index 7de394f0..653441d3 100644 --- a/src/main/java/dev/openfeature/sdk/MutableContext.java +++ b/src/main/java/dev/openfeature/sdk/MutableContext.java @@ -1,13 +1,14 @@ package dev.openfeature.sdk; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import lombok.experimental.Delegate; - import java.time.Instant; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; +import dev.openfeature.sdk.internal.ExcludeFromGeneratedCoverageReport; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import lombok.experimental.Delegate; /** * The EvaluationContext is a container for arbitrary contextual data @@ -20,7 +21,8 @@ @SuppressWarnings("PMD.BeanMembersShouldSerialize") public class MutableContext implements EvaluationContext { - @Delegate(excludes = HideDelegateAddMethods.class) private final MutableStructure structure; + @Delegate(excludes = DelegateExclusions.class) + private final MutableStructure structure; public MutableContext() { this(new HashMap<>()); @@ -124,11 +126,21 @@ public EvaluationContext merge(EvaluationContext overridingContext) { /** * Hidden class to tell Lombok not to copy these methods over via delegation. */ - private static class HideDelegateAddMethods { + @SuppressWarnings("all") + private static class DelegateExclusions { + + @ExcludeFromGeneratedCoverageReport + public Map merge(Function, Structure> newStructure, + Map base, + Map overriding) { + + return null; + } + public MutableStructure add(String ignoredKey, Boolean ignoredValue) { return null; } - + public MutableStructure add(String ignoredKey, Double ignoredValue) { return null; } diff --git a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java index 962f7d95..05f7fea3 100644 --- a/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java +++ b/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java @@ -17,11 +17,17 @@ import lombok.extern.slf4j.Slf4j; /** - * {@inheritDoc} + * OpenFeature Client implementation. + * You should not instantiate this or reference this class. + * Use the dev.openfeature.sdk.Client interface instead. + * @see Client + * + * @deprecated // TODO: eventually we will make this non-public. See issue #872 */ @Slf4j @SuppressWarnings({ "PMD.DataflowAnomalyAnalysis", "PMD.BeanMembersShouldSerialize", "PMD.UnusedLocalVariable", "unchecked", "rawtypes" }) +@Deprecated() // TODO: eventually we will make this non-public. See issue #872 public class OpenFeatureClient implements Client { private final OpenFeatureAPI openfeatureApi; diff --git a/src/main/java/dev/openfeature/sdk/StringHook.java b/src/main/java/dev/openfeature/sdk/StringHook.java index aac732d5..898174f6 100644 --- a/src/main/java/dev/openfeature/sdk/StringHook.java +++ b/src/main/java/dev/openfeature/sdk/StringHook.java @@ -1,7 +1,10 @@ package dev.openfeature.sdk; /** - * {@inheritDoc} + * An extension point which can run around flag resolution. They are intended to be used as a way to add custom logic + * to the lifecycle of flag evaluation. + * + * @see Hook */ public interface StringHook extends Hook { diff --git a/src/main/java/dev/openfeature/sdk/internal/ExcludeFromGeneratedCoverageReport.java b/src/main/java/dev/openfeature/sdk/internal/ExcludeFromGeneratedCoverageReport.java new file mode 100644 index 00000000..e25f1260 --- /dev/null +++ b/src/main/java/dev/openfeature/sdk/internal/ExcludeFromGeneratedCoverageReport.java @@ -0,0 +1,14 @@ +package dev.openfeature.sdk.internal; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.ElementType; + +/** + * JaCoCo ignores coverage of methods annotated with any annotation with "generated" in the name. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface ExcludeFromGeneratedCoverageReport { +} \ No newline at end of file