Skip to content

fix(jdk-codemodel): resolve Symbol.PatternBinding for record-deconstruction pattern components#119

Merged
deer merged 1 commit into
mainfrom
record_deconstruction
Jul 10, 2026
Merged

fix(jdk-codemodel): resolve Symbol.PatternBinding for record-deconstruction pattern components#119
deer merged 1 commit into
mainfrom
record_deconstruction

Conversation

@deer

@deer deer commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

Record-deconstruction pattern components (e.g. x, y in case Point(int x, int y) ->) were converted to InstanceOf.Pattern.Binding/InstanceOf.Pattern.Record nodes, but the underlying binding variables were never registered with JdkExpressionConverter, unlike simple type patterns handled in Symbol.PatternBinding resolution. As a result, identifier usages of those component variables inside the case/if body would resolve to a Symbol.PatternBinding with an empty declaration(), losing the link back to the pattern test that introduced them.

This adds a registerNestedPatternBindings helper on JdkExpressionConverter that recursively walks a PatternTree and registers every nested BindingPatternTree against the enclosing InstanceOf, mirroring the registration already done for top-level BindingPatternTree bindings. It is invoked from both places that build a deconstruction InstanceOf: JdkExpressionConverter.visitInstanceOf for instanceof expressions, and JdkStatementConverter.convertPatternLabel for switch-case deconstruction labels.

Verified by adding shouldResolveInstanceOfDeconstructionPatternComponentBinding and shouldResolveSwitchDeconstructionPatternComponentBinding to SymbolResolutionTests, asserting that identifiers for deconstructed components resolve to Symbol.PatternBinding instances whose declaration() points back to the correct InstanceOf.

@deer deer merged commit 3187385 into main Jul 10, 2026
1 check passed
@deer deer deleted the record_deconstruction branch July 10, 2026 09:40
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.

1 participant