CliArgs.java

1
package org.egothor.methodatlas;
2
3
import java.io.IOException;
4
import java.nio.file.Path;
5
import java.nio.file.Paths;
6
import java.time.Duration;
7
import java.util.ArrayList;
8
import java.util.LinkedHashMap;
9
import java.util.LinkedHashSet;
10
import java.util.List;
11
import java.util.Locale;
12
import java.util.Map;
13
import java.util.Set;
14
15
import org.egothor.methodatlas.ai.AiOptions;
16
import org.egothor.methodatlas.emit.OutputMode;
17
import org.egothor.methodatlas.ai.AiProvider;
18
19
/**
20
 * Parses command-line arguments into a {@link CliConfig}.
21
 *
22
 * <p>
23
 * This class centralises all argument-parsing logic for the MethodAtlas
24
 * application. It is intentionally separated from {@link MethodAtlasApp} to
25
 * keep each class focused and below the project's cyclomatic-complexity
26
 * threshold.
27
 * </p>
28
 *
29
 * <p>
30
 * When a {@code -config <file>} argument is present it is processed first
31
 * (via a pre-scan) so that the YAML file provides default values before
32
 * individual command-line flags are evaluated. Command-line flags always take
33
 * precedence over values from the YAML configuration file.
34
 * </p>
35
 *
36
 * <p>
37
 * This class is a non-instantiable utility holder.
38
 * </p>
39
 *
40
 * @see CliConfig
41
 * @see MethodAtlasApp
42
 */
43
@SuppressWarnings("PMD.CyclomaticComplexity")
44
final class CliArgs {
45
46
    private static final String DEFAULT_FILE_SUFFIX = "java:Test.java";
47
    private static final String FLAG_CONFIG = "-config";
48
    private static final String FLAG_AI_CACHE = "-ai-cache";
49
    private static final String FLAG_DRIFT_DETECT = "-drift-detect";
50
    private static final String FLAG_EMIT_SOURCE_ROOT = "-emit-source-root";
51
    private static final String FLAG_INCLUDE_NON_SECURITY = "-include-non-security";
52
    private static final String FLAG_SARIF_OMIT_SCORES = "-sarif-omit-scores";
53
    private static final String FLAG_APPLY_TAGS_FROM_CSV = "-apply-tags-from-csv";
54
    private static final String FLAG_MISMATCH_LIMIT = "-mismatch-limit";
55
    private static final String FLAG_MIN_CONFIDENCE = "-min-confidence";
56
57
    /**
58
     * Prevents instantiation of this utility class.
59
     */
60
    private CliArgs() {
61
    }
62
63
    /**
64
     * Parses command-line arguments into a structured configuration object.
65
     *
66
     * <p>
67
     * If a {@code -config <file>} argument is present it is loaded first and
68
     * its values seed the initial configuration. Subsequent command-line flags
69
     * override those defaults.
70
     * </p>
71
     *
72
     * <p>
73
     * <b>SARIF mode and security filtering:</b> when {@code -sarif} is selected
74
     * (or {@code outputMode: sarif} is set in YAML), the security-only filter is
75
     * applied automatically — only security-relevant methods are emitted. This
76
     * default exists because SARIF is consumed by GitHub Code Scanning and
77
     * equivalent security tooling that expects actionable security findings, not
78
     * an exhaustive inventory of all test methods. Use {@code -include-non-security}
79
     * to override this behaviour and include all methods in the SARIF document.
80
     * </p>
81
     *
82
     * <p>
83
     * The {@code -security-only} flag continues to work independently and applies
84
     * the same filter to CSV and plain-text output modes.
85
     * </p>
86
     *
87
     * @param args raw command-line arguments
88
     * @return parsed command-line configuration
89
     * @throws IllegalArgumentException if an option value is missing, malformed,
90
     *                                  or unsupported, or if the config file
91
     *                                  cannot be read
92
     */
93
    @SuppressWarnings({"PMD.AvoidReassigningLoopVariables", "PMD.CyclomaticComplexity", "PMD.NPathComplexity", "PMD.NcssCount"})
94
    /* default */ static CliConfig parse(String... args) {
95
        // Pre-scan for -config to load YAML defaults before processing other flags.
96
        YamlConfig.YamlConfigFile yamlConfig = loadYamlConfigFromArgs(args);
97
98
        // Seed initial values from YAML (command-line flags will override these).
99
        OutputMode outputMode = resolveOutputModeFromYaml(yamlConfig);
100 4 1. parse : removed conditional - replaced equality check with false → SURVIVED
2. parse : removed conditional - replaced equality check with false → SURVIVED
3. parse : removed conditional - replaced equality check with true → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        boolean emitMetadata = yamlConfig != null && yamlConfig.emitMetadata;
101 4 1. parse : removed conditional - replaced equality check with true → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
3. parse : removed conditional - replaced equality check with false → KILLED
4. parse : removed conditional - replaced equality check with false → KILLED
        List<String> fileSuffixes = yamlConfig != null && yamlConfig.fileSuffixes != null
102
                ? new ArrayList<>(yamlConfig.fileSuffixes) : new ArrayList<>();
103 4 1. parse : removed conditional - replaced equality check with false → SURVIVED
2. parse : removed conditional - replaced equality check with false → SURVIVED
3. parse : removed conditional - replaced equality check with true → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        Set<String> testMarkers = yamlConfig != null && yamlConfig.testMarkers != null
104
                ? new LinkedHashSet<>(yamlConfig.testMarkers) : new LinkedHashSet<>();
105
        Map<String, List<String>> properties = new LinkedHashMap<>();
106 4 1. parse : removed conditional - replaced equality check with false → SURVIVED
2. parse : removed conditional - replaced equality check with false → SURVIVED
3. parse : removed conditional - replaced equality check with true → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        if (yamlConfig != null && yamlConfig.properties != null) {
107 1 1. parse : removed call to java/util/Map::forEach → NO_COVERAGE
            yamlConfig.properties.forEach((k, v) -> properties.put(k, new ArrayList<>(v)));
108
        }
109
        AiOptions.Builder aiBuilder = AiOptions.builder();
110 4 1. parse : removed conditional - replaced equality check with true → KILLED
2. parse : removed conditional - replaced equality check with false → KILLED
3. parse : removed conditional - replaced equality check with false → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        if (yamlConfig != null && yamlConfig.ai != null) {
111 1 1. parse : removed call to org/egothor/methodatlas/CliArgs::applyYamlAiConfig → KILLED
            applyYamlAiConfig(aiBuilder, yamlConfig.ai);
112
        }
113
114
        List<Path> paths = new ArrayList<>();
115
        String manualWorkDir = null;
116
        String manualResponseDir = null;
117
        boolean manualIsConsume = false;
118
        boolean applyTags = false;
119 4 1. parse : removed conditional - replaced equality check with true → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
3. parse : removed conditional - replaced equality check with false → KILLED
4. parse : removed conditional - replaced equality check with false → KILLED
        boolean contentHash = yamlConfig != null && yamlConfig.contentHash;
120 4 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
3. parse : removed conditional - replaced equality check with false → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        Path overrideFilePath = yamlConfig != null && yamlConfig.overrideFile != null
121
                ? Paths.get(yamlConfig.overrideFile) : null;
122 4 1. parse : removed conditional - replaced equality check with true → KILLED
2. parse : removed conditional - replaced equality check with false → KILLED
3. parse : removed conditional - replaced equality check with true → KILLED
4. parse : removed conditional - replaced equality check with false → KILLED
        boolean securityOnly = yamlConfig != null && yamlConfig.securityOnly;
123 4 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with false → KILLED
3. parse : removed conditional - replaced equality check with true → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        boolean includeNonSecurity = yamlConfig != null && yamlConfig.includeNonSecurity;
124 4 1. parse : removed conditional - replaced equality check with true → SURVIVED
2. parse : removed conditional - replaced equality check with false → SURVIVED
3. parse : removed conditional - replaced equality check with false → SURVIVED
4. parse : removed conditional - replaced equality check with true → KILLED
        boolean sarifOmitScores = yamlConfig != null && yamlConfig.sarifOmitScores;
125 4 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
3. parse : removed conditional - replaced equality check with false → KILLED
4. parse : removed conditional - replaced equality check with true → KILLED
        double minConfidence = yamlConfig != null && yamlConfig.minConfidence != null
126
                ? yamlConfig.minConfidence : 0.0;
127 4 1. parse : removed conditional - replaced equality check with false → SURVIVED
2. parse : removed conditional - replaced equality check with false → SURVIVED
3. parse : removed conditional - replaced equality check with true → SURVIVED
4. parse : removed conditional - replaced equality check with true → KILLED
        boolean driftDetect = yamlConfig != null && yamlConfig.driftDetect;
128
        boolean emitSourceRoot = false;
129
        Path aiCacheFile = null;
130
        Path applyTagsFromCsvFile = null;
131
        int mismatchLimit = -1;
132
        // Tracks whether the first CLI -file-suffix has been seen; when it is,
133
        // subsequent -file-suffix values are appended rather than replacing defaults.
134
        boolean cliFileSuffixSet = false;
135
136 3 1. parse : removed conditional - replaced comparison check with false → KILLED
2. parse : removed conditional - replaced comparison check with true → KILLED
3. parse : changed conditional boundary → KILLED
        for (int i = 0; i < args.length; i++) {
137
            String arg = args[i];
138 2 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
            if (FLAG_AI_CACHE.equals(arg)) {
139 1 1. parse : Changed increment from 1 to -1 → TIMED_OUT
                aiCacheFile = Paths.get(nextArg(args, ++i, arg));
140
                continue;
141
            }
142 2 1. parse : removed conditional - replaced equality check with true → KILLED
2. parse : removed conditional - replaced equality check with false → KILLED
            if (arg.startsWith("-ai")) {
143
                i = applyAiArg(arg, args, i, aiBuilder);
144
                continue;
145
            }
146 1 1. parse : Changed switch default to be first case → KILLED
            switch (arg) {
147
                case "-plain" -> outputMode = OutputMode.PLAIN;
148
                case "-sarif" -> outputMode = OutputMode.SARIF;
149
                case "-json" -> outputMode = OutputMode.JSON;
150
                case "-github-annotations" -> outputMode = OutputMode.GITHUB_ANNOTATIONS;
151
                case "-apply-tags" -> applyTags = true;
152 1 1. parse : Changed increment from 1 to -1 → KILLED
                case FLAG_APPLY_TAGS_FROM_CSV -> applyTagsFromCsvFile = Paths.get(nextArg(args, ++i, arg));
153 1 1. parse : Changed increment from 1 to -1 → KILLED
                case FLAG_MISMATCH_LIMIT -> mismatchLimit = Integer.parseInt(nextArg(args, ++i, arg));
154
                case "-content-hash" -> contentHash = true;
155 1 1. parse : Changed increment from 1 to -1 → TIMED_OUT
                case FLAG_CONFIG -> i++; // value already consumed in pre-scan; skip here
156
                case "-file-suffix" -> {
157 2 1. parse : removed conditional - replaced equality check with false → SURVIVED
2. parse : removed conditional - replaced equality check with true → KILLED
                    if (!cliFileSuffixSet) {
158
                        // First CLI -file-suffix replaces YAML defaults
159 1 1. parse : removed call to java/util/List::clear → SURVIVED
                        fileSuffixes.clear();
160
                        cliFileSuffixSet = true;
161
                    }
162 1 1. parse : Changed increment from 1 to -1 → KILLED
                    fileSuffixes.add(nextArg(args, ++i, arg));
163
                }
164 1 1. parse : Changed increment from 1 to -1 → KILLED
                case "-test-marker", "-test-annotation" -> testMarkers.add(nextArg(args, ++i, arg));
165
                case "-property" -> {
166 1 1. parse : Changed increment from 1 to -1 → KILLED
                    String kv = nextArg(args, ++i, arg);
167
                    int eq = kv.indexOf('=');
168 3 1. parse : changed conditional boundary → SURVIVED
2. parse : removed conditional - replaced comparison check with false → KILLED
3. parse : removed conditional - replaced comparison check with true → KILLED
                    if (eq < 0) {
169
                        throw new IllegalArgumentException(
170
                                "Invalid -property value: '" + kv + "'; expected key=value format");
171
                    }
172 2 1. parse : Replaced integer addition with subtraction → KILLED
2. lambda$parse$1 : replaced return value with Collections.emptyList for org/egothor/methodatlas/CliArgs::lambda$parse$1 → KILLED
                    properties.computeIfAbsent(kv.substring(0, eq), k -> new ArrayList<>()) // NOPMD - one list per unique key, not per iteration
173
                            .add(kv.substring(eq + 1));
174
                }
175
                case "-emit-metadata" -> emitMetadata = true;
176
                case "-security-only" -> securityOnly = true;
177
                case FLAG_INCLUDE_NON_SECURITY -> includeNonSecurity = true;
178
                case FLAG_SARIF_OMIT_SCORES -> sarifOmitScores = true;
179
                case FLAG_DRIFT_DETECT -> driftDetect = true;
180
                case FLAG_EMIT_SOURCE_ROOT -> emitSourceRoot = true;
181 1 1. parse : Changed increment from 1 to -1 → KILLED
                case FLAG_MIN_CONFIDENCE -> minConfidence = parseConfidenceThreshold(nextArg(args, ++i, arg));
182 1 1. parse : Changed increment from 1 to -1 → KILLED
                case "-override-file" -> overrideFilePath = Paths.get(nextArg(args, ++i, arg));
183
                case "-manual-prepare" -> {
184 1 1. parse : Changed increment from 1 to -1 → KILLED
                    manualWorkDir = nextArg(args, ++i, arg);
185 1 1. parse : Changed increment from 1 to -1 → KILLED
                    manualResponseDir = nextArg(args, ++i, arg);
186
                    manualIsConsume = false;
187
                }
188
                case "-manual-consume" -> {
189 1 1. parse : Changed increment from 1 to -1 → KILLED
                    manualWorkDir = nextArg(args, ++i, arg);
190 1 1. parse : Changed increment from 1 to -1 → KILLED
                    manualResponseDir = nextArg(args, ++i, arg);
191
                    manualIsConsume = true;
192
                }
193
                default -> {
194 2 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
                    if (arg.startsWith("-")) {
195
                        throw new IllegalArgumentException("Unknown argument: " + arg);
196
                    }
197
                    paths.add(Paths.get(arg));
198
                }
199
            }
200
        }
201
202
        ManualMode manualMode = null;
203 2 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
        if (manualWorkDir != null) {
204
            Path workDir = Paths.get(manualWorkDir);
205
            Path responseDir = Paths.get(manualResponseDir);
206 2 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
            manualMode = manualIsConsume
207
                    ? new ManualMode.Consume(workDir, responseDir)
208
                    : new ManualMode.Prepare(workDir, responseDir);
209
        }
210
211
        // SARIF is consumed by security tooling that expects findings, not a full
212
        // test inventory. Apply the security-only filter implicitly unless the
213
        // caller has explicitly opted in to the full-inventory form.
214 4 1. parse : removed conditional - replaced equality check with true → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
3. parse : removed conditional - replaced equality check with false → KILLED
4. parse : removed conditional - replaced equality check with false → KILLED
        if (outputMode == OutputMode.SARIF && !includeNonSecurity) {
215
            securityOnly = true;
216
        }
217
218 2 1. parse : removed conditional - replaced equality check with false → KILLED
2. parse : removed conditional - replaced equality check with true → KILLED
        List<String> resolvedSuffixes = fileSuffixes.isEmpty() ? List.of(DEFAULT_FILE_SUFFIX) : fileSuffixes;
219 2 1. parse : removed conditional - replaced equality check with false → SURVIVED
2. parse : removed conditional - replaced equality check with true → KILLED
        Set<String> resolvedMarkers = testMarkers.isEmpty() ? Set.of() : testMarkers;
220 1 1. parse : replaced return value with null for org/egothor/methodatlas/CliArgs::parse → KILLED
        return new CliConfig(outputMode, aiBuilder.build(), paths, resolvedSuffixes, resolvedMarkers,
221
                Map.copyOf(properties), emitMetadata, manualMode, applyTags, contentHash, overrideFilePath,
222
                securityOnly, aiCacheFile, driftDetect, applyTagsFromCsvFile, mismatchLimit, emitSourceRoot,
223
                sarifOmitScores, minConfidence);
224
    }
225
226
    // -------------------------------------------------------------------------
227
    // YAML config helpers
228
    // -------------------------------------------------------------------------
229
230
    /**
231
     * Pre-scans {@code args} for a {@code -config <file>} argument and loads the
232
     * YAML file if found.
233
     *
234
     * @param args raw command-line arguments
235
     * @return parsed YAML config, or {@code null} when no {@code -config} flag is
236
     *         present
237
     * @throws IllegalArgumentException if the config file cannot be read
238
     */
239
    private static YamlConfig.YamlConfigFile loadYamlConfigFromArgs(String... args) {
240 4 1. loadYamlConfigFromArgs : changed conditional boundary → SURVIVED
2. loadYamlConfigFromArgs : removed conditional - replaced comparison check with true → KILLED
3. loadYamlConfigFromArgs : Replaced integer subtraction with addition → KILLED
4. loadYamlConfigFromArgs : removed conditional - replaced comparison check with false → KILLED
        for (int i = 0; i < args.length - 1; i++) {
241 2 1. loadYamlConfigFromArgs : removed conditional - replaced equality check with true → KILLED
2. loadYamlConfigFromArgs : removed conditional - replaced equality check with false → KILLED
            if (FLAG_CONFIG.equals(args[i])) {
242 1 1. loadYamlConfigFromArgs : Replaced integer addition with subtraction → KILLED
                Path configPath = Paths.get(args[i + 1]);
243
                try {
244 1 1. loadYamlConfigFromArgs : replaced return value with null for org/egothor/methodatlas/CliArgs::loadYamlConfigFromArgs → KILLED
                    return YamlConfig.load(configPath);
245
                } catch (IOException e) {
246
                    throw new IllegalArgumentException("Cannot load config file: " + configPath, e);
247
                }
248
            }
249
        }
250
        return null;
251
    }
252
253
    /**
254
     * Derives the initial {@link OutputMode} from a loaded YAML config.
255
     *
256
     * @param yamlConfig YAML config, or {@code null}
257
     * @return resolved output mode; defaults to {@link OutputMode#CSV}
258
     */
259
    private static OutputMode resolveOutputModeFromYaml(YamlConfig.YamlConfigFile yamlConfig) {
260 4 1. resolveOutputModeFromYaml : removed conditional - replaced equality check with true → KILLED
2. resolveOutputModeFromYaml : removed conditional - replaced equality check with false → KILLED
3. resolveOutputModeFromYaml : removed conditional - replaced equality check with false → KILLED
4. resolveOutputModeFromYaml : removed conditional - replaced equality check with true → KILLED
        if (yamlConfig == null || yamlConfig.outputMode == null) {
261 1 1. resolveOutputModeFromYaml : replaced return value with null for org/egothor/methodatlas/CliArgs::resolveOutputModeFromYaml → KILLED
            return OutputMode.CSV;
262
        }
263 2 1. resolveOutputModeFromYaml : Changed switch default to be first case → KILLED
2. resolveOutputModeFromYaml : replaced return value with null for org/egothor/methodatlas/CliArgs::resolveOutputModeFromYaml → KILLED
        return switch (yamlConfig.outputMode.toLowerCase(Locale.ROOT)) {
264
            case "plain" -> OutputMode.PLAIN;
265
            case "sarif" -> OutputMode.SARIF;
266
            case "json" -> OutputMode.JSON;
267
            default -> OutputMode.CSV;
268
        };
269
    }
270
271
    /**
272
     * Seeds the AI options builder from YAML configuration values.
273
     *
274
     * @param builder   AI options builder to update
275
     * @param aiConfig  AI section of the YAML config; never {@code null}
276
     */
277
    @SuppressWarnings("PMD.NPathComplexity")
278
    private static void applyYamlAiConfig(AiOptions.Builder builder, YamlConfig.YamlAiConfig aiConfig) {
279 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (Boolean.TRUE.equals(aiConfig.enabled)) {
280
            builder.enabled(true);
281
        }
282 2 1. applyYamlAiConfig : removed conditional - replaced equality check with true → SURVIVED
2. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
        if (aiConfig.provider != null) {
283
            builder.provider(AiProvider.valueOf(aiConfig.provider.toUpperCase(Locale.ROOT)));
284
        }
285 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (aiConfig.model != null) {
286
            builder.modelName(aiConfig.model);
287
        }
288 2 1. applyYamlAiConfig : removed conditional - replaced equality check with true → SURVIVED
2. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
        if (aiConfig.baseUrl != null) {
289
            builder.baseUrl(aiConfig.baseUrl);
290
        }
291 2 1. applyYamlAiConfig : removed conditional - replaced equality check with true → SURVIVED
2. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
        if (aiConfig.apiKey != null) {
292
            builder.apiKey(aiConfig.apiKey);
293
        }
294 2 1. applyYamlAiConfig : removed conditional - replaced equality check with true → SURVIVED
2. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
        if (aiConfig.apiKeyEnv != null) {
295
            builder.apiKeyEnv(aiConfig.apiKeyEnv);
296
        }
297 2 1. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
        if (aiConfig.taxonomyFile != null) {
298
            builder.taxonomyFile(Paths.get(aiConfig.taxonomyFile));
299
        }
300 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (aiConfig.taxonomyMode != null) {
301
            builder.taxonomyMode(
302
                    AiOptions.TaxonomyMode.valueOf(aiConfig.taxonomyMode.toUpperCase(Locale.ROOT)));
303
        }
304 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (aiConfig.maxClassChars != null) {
305
            builder.maxClassChars(aiConfig.maxClassChars);
306
        }
307 2 1. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
        if (aiConfig.timeoutSec != null) {
308
            builder.timeout(Duration.ofSeconds(aiConfig.timeoutSec));
309
        }
310 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (aiConfig.maxRetries != null) {
311
            builder.maxRetries(aiConfig.maxRetries);
312
        }
313 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → KILLED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (Boolean.TRUE.equals(aiConfig.confidence)) {
314
            builder.confidence(true);
315
        }
316 2 1. applyYamlAiConfig : removed conditional - replaced equality check with false → SURVIVED
2. applyYamlAiConfig : removed conditional - replaced equality check with true → KILLED
        if (aiConfig.apiVersion != null) {
317
            builder.apiVersion(aiConfig.apiVersion);
318
        }
319
    }
320
321
    // -------------------------------------------------------------------------
322
    // AI argument helper
323
    // -------------------------------------------------------------------------
324
325
    /**
326
     * Applies a single AI-related command-line argument to the builder.
327
     *
328
     * <p>
329
     * Handles all {@code -ai*} flags. Returns the updated argument index so
330
     * the caller's loop counter stays consistent when the flag consumes an
331
     * additional value token.
332
     * </p>
333
     *
334
     * @param arg     the flag token being processed
335
     * @param args    full argument array
336
     * @param i       current position in {@code args}
337
     * @param builder AI options builder to update
338
     * @return updated value of {@code i} after consuming any argument value
339
     * @throws IllegalArgumentException if a required value token is missing or
340
     *                                  the flag is unrecognised
341
     */
342
    private static int applyAiArg(String arg, String[] args, int i, AiOptions.Builder builder) {
343
        int idx = i;
344 1 1. applyAiArg : Changed switch default to be first case → KILLED
        switch (arg) {
345
            case "-ai" -> builder.enabled(true);
346
            case "-ai-confidence" -> builder.confidence(true);
347
            case "-ai-provider" ->
348 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
                builder.provider(AiProvider.valueOf(nextArg(args, ++idx, arg).toUpperCase(Locale.ROOT)));
349 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
            case "-ai-model" -> builder.modelName(nextArg(args, ++idx, arg));
350 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
            case "-ai-base-url" -> builder.baseUrl(nextArg(args, ++idx, arg));
351 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
            case "-ai-api-key" -> builder.apiKey(nextArg(args, ++idx, arg));
352 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
            case "-ai-api-key-env" -> builder.apiKeyEnv(nextArg(args, ++idx, arg));
353 1 1. applyAiArg : Changed increment from 1 to -1 → TIMED_OUT
            case "-ai-taxonomy" -> builder.taxonomyFile(Paths.get(nextArg(args, ++idx, arg)));
354
            case "-ai-taxonomy-mode" ->
355 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
                builder.taxonomyMode(
356
                        AiOptions.TaxonomyMode.valueOf(nextArg(args, ++idx, arg).toUpperCase(Locale.ROOT)));
357 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
            case "-ai-max-class-chars" -> builder.maxClassChars(Integer.parseInt(nextArg(args, ++idx, arg)));
358
            case "-ai-timeout-sec" ->
359 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
                builder.timeout(Duration.ofSeconds(Long.parseLong(nextArg(args, ++idx, arg))));
360 1 1. applyAiArg : Changed increment from 1 to -1 → KILLED
            case "-ai-max-retries" -> builder.maxRetries(Integer.parseInt(nextArg(args, ++idx, arg)));
361 1 1. applyAiArg : Changed increment from 1 to -1 → NO_COVERAGE
            case "-ai-api-version" -> builder.apiVersion(nextArg(args, ++idx, arg));
362
            default -> throw new IllegalArgumentException("Unknown AI argument: " + arg);
363
        }
364 1 1. applyAiArg : replaced int return with 0 for org/egothor/methodatlas/CliArgs::applyAiArg → TIMED_OUT
        return idx;
365
    }
366
367
    /**
368
     * Validates and parses the {@code -min-confidence} argument value.
369
     *
370
     * @param value raw string value from the command line
371
     * @return parsed confidence threshold in the range {@code [0.0, 1.0]}
372
     * @throws IllegalArgumentException if the value is outside {@code [0.0, 1.0]}
373
     */
374
    private static double parseConfidenceThreshold(String value) {
375
        double parsed = Double.parseDouble(value);
376 6 1. parseConfidenceThreshold : removed conditional - replaced comparison check with false → KILLED
2. parseConfidenceThreshold : changed conditional boundary → KILLED
3. parseConfidenceThreshold : removed conditional - replaced comparison check with true → KILLED
4. parseConfidenceThreshold : removed conditional - replaced comparison check with false → KILLED
5. parseConfidenceThreshold : changed conditional boundary → KILLED
6. parseConfidenceThreshold : removed conditional - replaced comparison check with true → KILLED
        if (parsed < 0.0 || parsed > 1.0) {
377
            throw new IllegalArgumentException(
378
                    "-min-confidence value must be between 0.0 and 1.0, got: " + parsed);
379
        }
380 1 1. parseConfidenceThreshold : replaced double return with 0.0d for org/egothor/methodatlas/CliArgs::parseConfidenceThreshold → KILLED
        return parsed;
381
    }
382
383
    /**
384
     * Returns the argument value following an option token.
385
     *
386
     * @param args   full command-line argument array
387
     * @param index  index of the expected option value
388
     * @param option option whose value is being retrieved
389
     * @return argument value at {@code index}
390
     * @throws IllegalArgumentException if {@code index} is outside the bounds of
391
     *                                  {@code args}
392
     */
393
    private static String nextArg(String[] args, int index, String option) {
394 3 1. nextArg : removed conditional - replaced comparison check with true → KILLED
2. nextArg : removed conditional - replaced comparison check with false → KILLED
3. nextArg : changed conditional boundary → KILLED
        if (index >= args.length) {
395
            throw new IllegalArgumentException("Missing value for " + option);
396
        }
397 1 1. nextArg : replaced return value with "" for org/egothor/methodatlas/CliArgs::nextArg → KILLED
        return args[index];
398
    }
399
}

Mutations

100

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

3.3
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

4.4
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppContentHashTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppContentHashTest]/[method:cliFlagOverridesYamlConfig_enablesHash(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

101

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppSarifTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppSarifTest]/[method:configFile_overridesFileSuffixes(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppSarifTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppSarifTest]/[method:configFile_overridesFileSuffixes(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

103

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

4.4
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

106

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

4.4
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

107

1.1
Location : parse
Killed by : none
removed call to java/util/Map::forEach → NO_COVERAGE

110

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

111

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed call to org/egothor/methodatlas/CliArgs::applyYamlAiConfig → KILLED

119

1.1
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppContentHashTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppContentHashTest]/[method:yamlConfig_contentHashFalse_noHashColumn(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithValidYaml_appliesYamlValues(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithValidYaml_appliesYamlValues(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

120

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithOverrideFile_setsPath(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithOverrideFile_setsPath(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

122

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithSecurityOnlyTrue_setsFlag(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifModeWithIncludeNonSecurity_disablesFilter(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithSecurityOnlyTrue_setsFlag(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

123

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifModeWithIncludeNonSecurity_disablesFilter(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifModeWithIncludeNonSecurity_disablesFilter(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

124

1.1
Location : parse
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

3.3
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

4.4
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

125

1.1
Location : parse
Killed by : org.egothor.methodatlas.YamlConfigTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.YamlConfigTest]/[method:cliArgs_minConfidenceFromYaml_seedsValue(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.YamlConfigTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.YamlConfigTest]/[method:cliArgs_minConfidenceFromYaml_seedsValue(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

127

1.1
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

2.2
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED Covering tests

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

4.4
Location : parse
Killed by : none
removed conditional - replaced equality check with true → SURVIVED Covering tests

136

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noEmitSourceRoot_defaultsFalse()]
removed conditional - replaced comparison check with true → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noEmitSourceRoot_defaultsFalse()]
changed conditional boundary → KILLED

138

1.1
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppAiTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppAiTest]/[method:aiCache_miss_engineCalledForUnknownHash(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceBelowZero_throws()]
removed conditional - replaced equality check with true → KILLED

139

1.1
Location : parse
Killed by : none
Changed increment from 1 to -1 → TIMED_OUT

142

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_fileSuffixMissingValue_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiModelMissingValue_throwsIllegalArgumentException()]
removed conditional - replaced equality check with false → KILLED

146

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownFlag_throwsIllegalArgumentException()]
Changed switch default to be first case → KILLED

152

1.1
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppApplyTagsFromCsvTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppApplyTagsFromCsvTest]/[method:applyTagsFromCsv_emptyCsvReturnsZero(java.nio.file.Path)]
Changed increment from 1 to -1 → KILLED

153

1.1
Location : parse
Killed by : org.egothor.methodatlas.MethodAtlasAppApplyTagsFromCsvTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.MethodAtlasAppApplyTagsFromCsvTest]/[method:applyTagsFromCsv_mismatchLimitReturnsOne(java.nio.file.Path)]
Changed increment from 1 to -1 → KILLED

155

1.1
Location : parse
Killed by : none
Changed increment from 1 to -1 → TIMED_OUT

157

1.1
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_multipleFileSuffixes_allCollected()]
removed conditional - replaced equality check with true → KILLED

159

1.1
Location : parse
Killed by : none
removed call to java/util/List::clear → SURVIVED
Covering tests

162

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_fileSuffixMissingValue_throwsIllegalArgumentException()]
Changed increment from 1 to -1 → KILLED

164

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_testAnnotationAlias_sameAsTestMarker()]
Changed increment from 1 to -1 → KILLED

166

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_propertyMissingEquals_throwsException()]
Changed increment from 1 to -1 → KILLED

168

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_propertyMissingEquals_throwsException()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_singleProperty_stored()]
removed conditional - replaced comparison check with true → KILLED

3.3
Location : parse
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

172

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_singleProperty_stored()]
Replaced integer addition with subtraction → KILLED

2.2
Location : lambda$parse$1
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_singleProperty_stored()]
replaced return value with Collections.emptyList for org/egothor/methodatlas/CliArgs::lambda$parse$1 → KILLED

181

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceBelowZero_throws()]
Changed increment from 1 to -1 → KILLED

182

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_overrideFileFlag_setsPath()]
Changed increment from 1 to -1 → KILLED

184

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualPrepare_createsPrepareModeWithPaths()]
Changed increment from 1 to -1 → KILLED

185

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualPrepare_createsPrepareModeWithPaths()]
Changed increment from 1 to -1 → KILLED

189

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualConsume_createsConsumeModeWithPaths()]
Changed increment from 1 to -1 → KILLED

190

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualConsume_createsConsumeModeWithPaths()]
Changed increment from 1 to -1 → KILLED

194

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_positionalArg_addedToPaths()]
removed conditional - replaced equality check with true → KILLED

203

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualConsume_createsConsumeModeWithPaths()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noEmitSourceRoot_defaultsFalse()]
removed conditional - replaced equality check with true → KILLED

206

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualConsume_createsConsumeModeWithPaths()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_manualPrepare_createsPrepareModeWithPaths()]
removed conditional - replaced equality check with true → KILLED

214

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_sarifWithIncludeNonSecurity_disablesImplicitFilter()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noArgs_returnsDefaults()]
removed conditional - replaced equality check with true → KILLED

3.3
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_sarifFlag_impliesSecurityOnly()]
removed conditional - replaced equality check with false → KILLED

4.4
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_sarifFlag_impliesSecurityOnly()]
removed conditional - replaced equality check with false → KILLED

218

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noArgs_returnsDefaults()]
removed conditional - replaced equality check with false → KILLED

2.2
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_fileSuffix_replacesDefault()]
removed conditional - replaced equality check with true → KILLED

219

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_twoTestMarkers_bothPresent()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : parse
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

220

1.1
Location : parse
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noEmitSourceRoot_defaultsFalse()]
replaced return value with null for org/egothor/methodatlas/CliArgs::parse → KILLED

240

1.1
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced comparison check with true → KILLED

2.2
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
Replaced integer subtraction with addition → KILLED

3.3
Location : loadYamlConfigFromArgs
Killed by : none
changed conditional boundary → SURVIVED
Covering tests

4.4
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configNonExistentFile_throwsIllegalArgumentException(java.nio.file.Path)]
removed conditional - replaced comparison check with false → KILLED

241

1.1
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_twoTestMarkers_bothPresent()]
removed conditional - replaced equality check with true → KILLED

2.2
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configNonExistentFile_throwsIllegalArgumentException(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

242

1.1
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configNonExistentFile_throwsIllegalArgumentException(java.nio.file.Path)]
Replaced integer addition with subtraction → KILLED

244

1.1
Location : loadYamlConfigFromArgs
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
replaced return value with null for org/egothor/methodatlas/CliArgs::loadYamlConfigFromArgs → KILLED

260

1.1
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_cliOverrideFileOverridesYaml(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

3.3
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

4.4
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
removed conditional - replaced equality check with true → KILLED

261

1.1
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_noArgs_returnsDefaults()]
replaced return value with null for org/egothor/methodatlas/CliArgs::resolveOutputModeFromYaml → KILLED

263

1.1
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
Changed switch default to be first case → KILLED

2.2
Location : resolveOutputModeFromYaml
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_yamlSarifMode_impliesSecurityOnly(java.nio.file.Path)]
replaced return value with null for org/egothor/methodatlas/CliArgs::resolveOutputModeFromYaml → KILLED

279

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

282

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

285

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

288

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

291

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

294

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : none
removed conditional - replaced equality check with true → SURVIVED
Covering tests

297

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

300

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

304

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

307

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

310

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

313

1.1
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithFullAiSection_appliesAllTwelveAiFields(java.nio.file.Path)]
removed conditional - replaced equality check with false → KILLED

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

316

1.1
Location : applyYamlAiConfig
Killed by : none
removed conditional - replaced equality check with false → SURVIVED
Covering tests

2.2
Location : applyYamlAiConfig
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_configWithAiEnabledFalseAndConfidenceFalse_doesNotActivate(java.nio.file.Path)]
removed conditional - replaced equality check with true → KILLED

344

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_unknownAiFlag_throwsIllegalArgumentException()]
Changed switch default to be first case → KILLED

348

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiProviderAnthropicUppercase_setsProvider()]
Changed increment from 1 to -1 → KILLED

349

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiModelMissingValue_throwsIllegalArgumentException()]
Changed increment from 1 to -1 → KILLED

350

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiBaseUrl_setsBaseUrl()]
Changed increment from 1 to -1 → KILLED

351

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiApiKey_setsApiKey()]
Changed increment from 1 to -1 → KILLED

352

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiApiKeyEnv_setsApiKeyEnv()]
Changed increment from 1 to -1 → KILLED

353

1.1
Location : applyAiArg
Killed by : none
Changed increment from 1 to -1 → TIMED_OUT

355

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiTaxonomyMode_setsOptimized()]
Changed increment from 1 to -1 → KILLED

357

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiMaxClassChars_setsValue()]
Changed increment from 1 to -1 → KILLED

359

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiTimeoutSec_setsTimeout()]
Changed increment from 1 to -1 → KILLED

360

1.1
Location : applyAiArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_aiMaxRetries_setsMaxRetries()]
Changed increment from 1 to -1 → KILLED

361

1.1
Location : applyAiArg
Killed by : none
Changed increment from 1 to -1 → NO_COVERAGE

364

1.1
Location : applyAiArg
Killed by : none
replaced int return with 0 for org/egothor/methodatlas/CliArgs::applyAiArg → TIMED_OUT

376

1.1
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceZero_accepted()]
removed conditional - replaced comparison check with false → KILLED

2.2
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceZero_accepted()]
changed conditional boundary → KILLED

3.3
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceZero_accepted()]
removed conditional - replaced comparison check with true → KILLED

4.4
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceAboveOne_throws()]
removed conditional - replaced comparison check with false → KILLED

5.5
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceOne_accepted()]
changed conditional boundary → KILLED

6.6
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceBelowZero_throws()]
removed conditional - replaced comparison check with true → KILLED

380

1.1
Location : parseConfidenceThreshold
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_minConfidenceFlag_setsValue()]
replaced double return with 0.0d for org/egothor/methodatlas/CliArgs::parseConfidenceThreshold → KILLED

394

1.1
Location : nextArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_twoTestMarkers_bothPresent()]
removed conditional - replaced comparison check with true → KILLED

2.2
Location : nextArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_fileSuffixMissingValue_throwsIllegalArgumentException()]
removed conditional - replaced comparison check with false → KILLED

3.3
Location : nextArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_fileSuffixMissingValue_throwsIllegalArgumentException()]
changed conditional boundary → KILLED

397

1.1
Location : nextArg
Killed by : org.egothor.methodatlas.CliArgsTest.[engine:junit-jupiter]/[class:org.egothor.methodatlas.CliArgsTest]/[method:parse_twoTestMarkers_bothPresent()]
replaced return value with "" for org/egothor/methodatlas/CliArgs::nextArg → KILLED

Active mutators

Tests examined


Report generated by PIT 1.22.1