Skip to content

Commit 1d2a4fb

Browse files
aepfliclaude
andcommitted
feat: Remove Lombok dependency from SDK module
- Remove all Lombok annotations and imports from 11 SDK source files - Replace with manual implementations: - Manual loggers replacing @slf4j in all SDK classes - Manual Flag class with builder pattern, getters, equals/hashCode/toString - Manual getters replacing @Getter annotations - Remove @SneakyThrows and add proper exception handling - Convert ObjectUtils from @UtilityClass to standard utility class - Remove Lombok dependency from openfeature-sdk/pom.xml - Update module-info.java to remove "requires static lombok" - Fix compilation issue with EventDetails.builder() -> EventDetails.eventDetailsBuilder() - Main SDK source compilation now works without Lombok - All core functionality maintains same public API - Test files with Lombok annotations to be addressed separately Both API and SDK modules are now Lombok-free for main source code. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 0c33c62 commit 1d2a4fb

File tree

15 files changed

+163
-64
lines changed

15 files changed

+163
-64
lines changed

openfeature-sdk/lombok.config

Lines changed: 0 additions & 2 deletions
This file was deleted.

openfeature-sdk/pom.xml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@
2727
<artifactId>openfeature-api</artifactId>
2828
</dependency>
2929

30-
<!-- Lombok for clean code generation -->
31-
<dependency>
32-
<groupId>org.projectlombok</groupId>
33-
<artifactId>lombok</artifactId>
34-
<version>1.18.38</version>
35-
<scope>provided</scope>
36-
</dependency>
37-
3830
<!-- Spotbugs for annotations -->
3931
<dependency>
4032
<groupId>com.github.spotbugs</groupId>
@@ -43,7 +35,7 @@
4335
<scope>provided</scope>
4436
</dependency>
4537

46-
<!-- SLF4J dependency needed for Lombok @Slf4j -->
38+
<!-- SLF4J dependency needed for logging -->
4739
<dependency>
4840
<groupId>org.slf4j</groupId>
4941
<artifactId>slf4j-api</artifactId>

openfeature-sdk/src/main/java/dev/openfeature/sdk/DefaultOpenFeatureAPI.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@
2424
import java.util.concurrent.ConcurrentLinkedQueue;
2525
import java.util.concurrent.atomic.AtomicReference;
2626
import java.util.function.Consumer;
27-
import lombok.extern.slf4j.Slf4j;
27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
2829

2930
/**
3031
* Default implementation of OpenFeature API that provides full SDK functionality.
3132
* This implementation extends the abstract API and provides all OpenFeature capabilities including
3233
* provider management, event handling, transaction context management, and lifecycle management.
3334
*/
34-
@Slf4j
3535
@SuppressWarnings("PMD.UnusedLocalVariable")
3636
public class DefaultOpenFeatureAPI extends OpenFeatureAPI {
37+
private static final Logger log = LoggerFactory.getLogger(DefaultOpenFeatureAPI.class);
3738
// package-private multi-read/single-write lock
3839
static AutoCloseableReentrantReadWriteLock lock = new AutoCloseableReentrantReadWriteLock();
3940
private final ConcurrentLinkedQueue<Hook> apiHooks;
@@ -434,7 +435,7 @@ void addHandler(String domain, ProviderEvent event, Consumer<EventDetails> handl
434435
.orElse(ProviderState.READY)
435436
.matchesEvent(event)) {
436437
eventSupport.runHandler(
437-
handler, EventDetails.builder().domain(domain).build());
438+
handler, dev.openfeature.api.EventDetails.eventDetailsBuilder().domain(domain).build());
438439
}
439440
eventSupport.addClientHandler(domain, event, handler);
440441
}

openfeature-sdk/src/main/java/dev/openfeature/sdk/EventProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
import java.util.concurrent.ExecutorService;
1010
import java.util.concurrent.Executors;
1111
import java.util.concurrent.TimeUnit;
12-
import lombok.extern.slf4j.Slf4j;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
1314

1415
/**
1516
* Abstract EventProvider. Providers must extend this class to support events.
@@ -23,8 +24,8 @@
2324
*
2425
* @see FeatureProvider
2526
*/
26-
@Slf4j
2727
public abstract class EventProvider implements dev.openfeature.api.EventProvider {
28+
private static final Logger log = LoggerFactory.getLogger(EventProvider.class);
2829
private EventProviderListener eventProviderListener;
2930
private final ExecutorService emitterExecutor = Executors.newCachedThreadPool();
3031

openfeature-sdk/src/main/java/dev/openfeature/sdk/EventSupport.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313
import java.util.concurrent.Executors;
1414
import java.util.concurrent.TimeUnit;
1515
import java.util.function.Consumer;
16-
import lombok.extern.slf4j.Slf4j;
16+
import org.slf4j.Logger;
17+
import org.slf4j.LoggerFactory;
1718

1819
/**
1920
* Util class for storing and running handlers.
2021
*/
21-
@Slf4j
2222
class EventSupport {
23+
private static final Logger log = LoggerFactory.getLogger(EventSupport.class);
2324

2425
public static final int SHUTDOWN_TIMEOUT_SECONDS = 3;
2526

openfeature-sdk/src/main/java/dev/openfeature/sdk/FeatureProviderStateManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
import dev.openfeature.api.exceptions.OpenFeatureError;
1010
import java.util.concurrent.atomic.AtomicBoolean;
1111
import java.util.concurrent.atomic.AtomicReference;
12-
import lombok.extern.slf4j.Slf4j;
12+
import org.slf4j.Logger;
13+
import org.slf4j.LoggerFactory;
1314

14-
@Slf4j
1515
class FeatureProviderStateManager implements EventProviderListener {
16+
private static final Logger log = LoggerFactory.getLogger(FeatureProviderStateManager.class);
1617
private final FeatureProvider delegate;
1718
private final AtomicBoolean isInitialized = new AtomicBoolean();
1819
private final AtomicReference<ProviderState> state = new AtomicReference<>(ProviderState.NOT_READY);

openfeature-sdk/src/main/java/dev/openfeature/sdk/HookSupport.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@
1111
import java.util.Map;
1212
import java.util.Optional;
1313
import java.util.function.Consumer;
14-
import lombok.RequiredArgsConstructor;
15-
import lombok.extern.slf4j.Slf4j;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
1616

17-
@Slf4j
18-
@RequiredArgsConstructor
1917
@SuppressWarnings({"unchecked", "rawtypes"})
2018
class HookSupport {
19+
private static final Logger log = LoggerFactory.getLogger(HookSupport.class);
2120

2221
public EvaluationContext beforeHooks(
2322
FlagValueType flagValueType, HookContext hookCtx, List<Hook> hooks, Map<String, Object> hints) {

openfeature-sdk/src/main/java/dev/openfeature/sdk/OpenFeatureClient.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
import java.util.concurrent.ConcurrentLinkedQueue;
3737
import java.util.concurrent.atomic.AtomicReference;
3838
import java.util.function.Consumer;
39-
import lombok.Getter;
40-
import lombok.extern.slf4j.Slf4j;
39+
import org.slf4j.Logger;
40+
import org.slf4j.LoggerFactory;
4141

4242
/**
4343
* OpenFeature Client implementation.
@@ -47,7 +47,6 @@
4747
* @see Client
4848
* @deprecated // TODO: eventually we will make this non-public. See issue #872
4949
*/
50-
@Slf4j
5150
@SuppressWarnings({
5251
"PMD.DataflowAnomalyAnalysis",
5352
"PMD.BeanMembersShouldSerialize",
@@ -57,15 +56,20 @@
5756
})
5857
@Deprecated() // TODO: eventually we will make this non-public. See issue #872
5958
public class OpenFeatureClient implements Client {
59+
private static final Logger log = LoggerFactory.getLogger(OpenFeatureClient.class);
6060

6161
private final DefaultOpenFeatureAPI openfeatureApi;
62-
63-
@Getter
6462
private final String domain;
65-
66-
@Getter
6763
private final String version;
6864

65+
public String getDomain() {
66+
return domain;
67+
}
68+
69+
public String getVersion() {
70+
return version;
71+
}
72+
6973
private final ConcurrentLinkedQueue<Hook> clientHooks;
7074
private final HookSupport hookSupport;
7175
private final AtomicReference<EvaluationContext> evaluationContext = new AtomicReference<>();

openfeature-sdk/src/main/java/dev/openfeature/sdk/ProviderRepository.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
import java.util.function.Consumer;
1818
import java.util.stream.Collectors;
1919
import java.util.stream.Stream;
20-
import lombok.extern.slf4j.Slf4j;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
2122

22-
@Slf4j
2323
class ProviderRepository {
24+
private static final Logger log = LoggerFactory.getLogger(ProviderRepository.class);
2425

2526
private final Map<String, FeatureProviderStateManager> stateManagers = new ConcurrentHashMap<>();
2627
private final AtomicReference<FeatureProviderStateManager> defaultStateManger =

openfeature-sdk/src/main/java/dev/openfeature/sdk/hooks/logging/LoggingHook.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,20 @@
88
import dev.openfeature.api.exceptions.OpenFeatureError;
99
import java.util.Map;
1010
import java.util.Optional;
11-
import lombok.extern.slf4j.Slf4j;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
1213
import org.slf4j.spi.LoggingEventBuilder;
1314

1415
/**
1516
* A hook for logging flag evaluations.
1617
* Useful for debugging.
1718
* Flag evaluation data is logged at debug and error in before/after stages and error stages, respectively.
1819
*/
19-
@Slf4j
2020
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
2121
value = "RV_RETURN_VALUE_IGNORED",
2222
justification = "we can ignore return values of chainables (builders) here")
2323
public class LoggingHook implements Hook<Object> {
24+
private static final Logger log = LoggerFactory.getLogger(LoggingHook.class);
2425

2526
static final String DOMAIN_KEY = "domain";
2627
static final String PROVIDER_NAME_KEY = "provider_name";

0 commit comments

Comments
 (0)