Skip to content

Resolve @ParentCommand fields by type - #692

Merged
stalep merged 1 commit into
aeshell:masterfrom
dajiaohuang:fix/parent-command-type-resolution
Oct 25, 2026
Merged

stalep merged 1 commit into
aeshell:masterfrom
dajiaohuang:fix/parent-command-type-resolution

Conversation

@dajiaohuang

Copy link
Copy Markdown
Contributor

Follow-up to #685: the normal-mode fix currently injects only the immediate parent into the first annotated field. That leaves additional @ParentCommand fields unset and can assign the wrong object when a field targets a higher ancestor.

Resolve every annotated field against the nearest ancestor matching its declared type in both generated and reflection paths. The parser passes the ancestor chain; sub-command-mode injection uses the same type-directed resolver. Keep the existing BiConsumer-compatible direct-parent entry point.

Regression coverage adds multiple parent fields, including a distinct ancestor type, for reflection and generated metadata paths.

Validation:

  • ./mvnw.cmd -pl aesh -Dtest=GroupParentInjectionTest,ReadlineConsoleContextTest -Dsurefire.failIfNoSpecifiedTests=false test — 7 tests passed.
  • ./mvnw.cmd -pl aesh-processor -am -Dtest=ProcessorTest -Dsurefire.failIfNoSpecifiedTests=false test — 92 tests passed.
  • git diff --check passed.

@stalep

stalep commented Oct 25, 2026

Copy link
Copy Markdown
Member

Hi @dajiaohuang, thanks a lot for the pr! Looks good 👍

@stalep
stalep merged commit a814474 into aeshell:master Oct 25, 2026
5 checks passed
stalep added a commit that referenced this pull request Oct 26, 2026
Unit test drives the 5-arg populator with a hand-built two-frame
context and asserts exact-instance resolution for two same-type fields
plus an ancestor-typed field. Console end-to-end test enters nested
sub-command mode and asserts the leaf observes values through both
field types. Both verified to fail without the #692 fix.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants