|
1 | 1 | package dev.openfeature.contrib.providers.flagd.resolver.process; |
2 | 2 |
|
| 3 | +import dev.openfeature.contrib.providers.flagd.CompileTargetingMode; |
3 | 4 | import dev.openfeature.contrib.providers.flagd.FlagdOptions; |
4 | 5 | import dev.openfeature.contrib.providers.flagd.resolver.Resolver; |
5 | 6 | import dev.openfeature.contrib.providers.flagd.resolver.process.storage.FlagStore; |
|
20 | 21 | import dev.openfeature.sdk.internal.TriConsumer; |
21 | 22 | import java.util.concurrent.atomic.AtomicBoolean; |
22 | 23 | import java.util.concurrent.atomic.AtomicReference; |
| 24 | +import javax.tools.ToolProvider; |
23 | 25 | import lombok.extern.slf4j.Slf4j; |
24 | 26 |
|
25 | 27 | /** |
@@ -51,7 +53,8 @@ public InProcessResolver( |
51 | 53 | FlagdOptions options, TriConsumer<ProviderEvent, ProviderEventDetails, Structure> onConnectionEvent) { |
52 | 54 | Evaluator evaluator = options.getEvaluator(); |
53 | 55 | if (evaluator == null) { |
54 | | - evaluator = new FlagdCore(); |
| 56 | + boolean compile = resolveCompileTargeting(options.getCompileTargeting()); |
| 57 | + evaluator = new FlagdCore(false, compile); |
55 | 58 | } |
56 | 59 | this.queueSource = getQueueSource(options); |
57 | 60 | this.evaluator = evaluator; |
@@ -190,4 +193,29 @@ static QueueSource getQueueSource(final FlagdOptions options) { |
190 | 193 | ? new FileQueueSource(options.getOfflineFlagSourcePath(), options.getOfflinePollIntervalMs()) |
191 | 194 | : new SyncStreamQueueSource(options); |
192 | 195 | } |
| 196 | + |
| 197 | + /** |
| 198 | + * Resolve the compile targeting mode to a boolean, performing auto-detection if needed. |
| 199 | + */ |
| 200 | + static boolean resolveCompileTargeting(CompileTargetingMode mode) { |
| 201 | + switch (mode) { |
| 202 | + case ENABLED: |
| 203 | + log.info("Targeting rule compilation enabled; requires the jdk.compiler module at runtime."); |
| 204 | + return true; |
| 205 | + case DISABLED: |
| 206 | + log.info("Targeting rule compilation is disabled."); |
| 207 | + return false; |
| 208 | + case AUTO: |
| 209 | + default: |
| 210 | + boolean compilerAvailable = ToolProvider.getSystemJavaCompiler() != null; |
| 211 | + if (compilerAvailable) { |
| 212 | + log.info("jdk.compiler detected; targeting rule compilation enabled automatically." |
| 213 | + + " Set FLAGD_COMPILE_TARGETING=disabled to disable."); |
| 214 | + } else { |
| 215 | + log.info("jdk.compiler not detected; targeting rule compilation disabled." |
| 216 | + + " Set FLAGD_COMPILE_TARGETING=enabled to force (requires a JDK at runtime)."); |
| 217 | + } |
| 218 | + return compilerAvailable; |
| 219 | + } |
| 220 | + } |
193 | 221 | } |
0 commit comments