fix: LexicalPreservingPrinter can't print PrimitiveType #4817
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
fixes. #4781
Issue Analysis
When adding primitive type fields via LexicalPreservingPrinter, keywords like
int
,boolean
get omitted:Root Cause
Dynamically created
PrimitiveType
nodes lack proper NodeText initialization. The existingprettyPrintingTextNode()
relied onnode.toString()
which returns empty strings for uninitialized nodes.My Solution: CSM-Based Architecture Approach
Removed Special Case Handling: Eliminated the hardcoded PrimitiveType switch statement in
prettyPrintingTextNode()
(38 lines removed).Enhanced
getOrCreateNodeText()
: Added proper handling for dynamically created PrimitiveType nodes:Made Primitive enum implement Stringable: For consistency with JavaParser's design patterns.
nstead of special-casing PrimitiveType, I leveraged JavaParser's existing CSM (ConcreteSyntaxModel) infrastructure which already knows how to render primitive types correctly.
Question
Does this CSM-based approach align well with JavaParser's lexical preservation architecture? I chose this over the simpler hardcoded string approach because it maintains consistency with how other AST nodes are handled.