Skip to content

Commit d25ec80

Browse files
committed
Fix pre-release review findings
- resolveLazyChild: remove all alias keys mapping to the same class after resolution to prevent duplicate child parsers from stale alias entries - AeshOptionParser: add logging for DefaultValueProvider.fallbackValue() exceptions instead of silently swallowing them - AsciidocRenderer and MarkdownRenderer: add exclusiveWith guard to flag clustering so mutually exclusive boolean options are not double-rendered (in cluster AND in exclusive group)
1 parent 6a4b1b5 commit d25ec80

4 files changed

Lines changed: 13 additions & 5 deletions

File tree

aesh/src/main/java/org/aesh/command/impl/parser/AeshCommandLineParser.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ private CommandLineParser<CI> resolveLazyChild(String name) {
155155
Class<? extends Command> clazz = lazyChildClasses.remove(name);
156156
if (clazz == null)
157157
return null;
158+
// Remove all other keys mapping to the same class (aliases)
159+
// to prevent duplicate resolution via stale alias entries
160+
lazyChildClasses.values().removeIf(c -> c == clazz);
158161
try {
159162
AeshCommandContainerBuilder<CI> builder = new AeshCommandContainerBuilder<>();
160163
CommandContainer<CI> container = builder.create(clazz);

aesh/src/main/java/org/aesh/command/impl/parser/AeshOptionParser.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
*/
2020
package org.aesh.command.impl.parser;
2121

22+
import java.util.logging.Level;
23+
import java.util.logging.Logger;
2224
import java.util.regex.Pattern;
2325

2426
import org.aesh.command.impl.internal.OptionType;
@@ -33,6 +35,7 @@
3335
*/
3436
public class AeshOptionParser implements OptionParser {
3537

38+
private static final Logger LOGGER = Logger.getLogger(AeshOptionParser.class.getName());
3639
private static final String EQUALS = "=";
3740
private static final char DASH = '-';
3841
private Status status;
@@ -291,7 +294,7 @@ private static void applyOptionalFallback(ProcessedOption option) {
291294
return;
292295
}
293296
} catch (Exception e) {
294-
// Provider failed — fall through to annotation fallback
297+
LOGGER.log(Level.WARNING, "DefaultValueProvider.fallbackValue() failed for --" + option.name(), e);
295298
}
296299
}
297300

aesh/src/main/java/org/aesh/util/doc/AsciidocRenderer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ private String buildSynopsis(CommandLineParser<?> parser, String fullName) {
248248
if (opt.getVisibility() == OptionVisibility.HIDDEN)
249249
continue;
250250
if (opt.getOptionType() == OptionType.BOOLEAN && opt.shortName() != null
251-
&& !opt.isRequired()) {
251+
&& !opt.isRequired() && opt.getExclusiveWith().isEmpty()) {
252252
shortFlags.append(opt.shortName());
253253
}
254254
}
@@ -261,7 +261,8 @@ private String buildSynopsis(CommandLineParser<?> parser, String fullName) {
261261
if (opt.getVisibility() == OptionVisibility.HIDDEN)
262262
continue;
263263
if (opt.getOptionType() == OptionType.BOOLEAN && opt.shortName() != null
264-
&& !opt.isRequired() && !opt.isNegatable()) {
264+
&& !opt.isRequired() && !opt.isNegatable()
265+
&& opt.getExclusiveWith().isEmpty()) {
265266
continue; // already grouped, no separate rendering needed
266267
}
267268

aesh/src/main/java/org/aesh/util/doc/MarkdownRenderer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ private String buildSynopsis(CommandLineParser<?> parser, String fullName) {
241241
if (opt.getVisibility() == OptionVisibility.HIDDEN)
242242
continue;
243243
if (opt.getOptionType() == OptionType.BOOLEAN && opt.shortName() != null
244-
&& !opt.isRequired()) {
244+
&& !opt.isRequired() && opt.getExclusiveWith().isEmpty()) {
245245
shortFlags.append(opt.shortName());
246246
}
247247
}
@@ -254,7 +254,8 @@ private String buildSynopsis(CommandLineParser<?> parser, String fullName) {
254254
if (opt.getVisibility() == OptionVisibility.HIDDEN)
255255
continue;
256256
if (opt.getOptionType() == OptionType.BOOLEAN && opt.shortName() != null
257-
&& !opt.isRequired() && !opt.isNegatable()) {
257+
&& !opt.isRequired() && !opt.isNegatable()
258+
&& opt.getExclusiveWith().isEmpty()) {
258259
continue; // already grouped
259260
}
260261

0 commit comments

Comments
 (0)