Add support for multiline query formatting in Query annotations #1763
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.
This PR addresses issue #1726
Summary
Default Data Query Style Change: Changed the default query generation style to
compact(single line) to ensure broader compatibility across Java versions.Architectural Refinement (Interface Separation): Decoupled the query formatting logic by introducing the
QueryFormatterinterface with dedicated implementations (JpqlQueryFormatter,MongoQueryFormatter). This allows for repository-specific formatting strategies.Robust String Escaping & Formatting:
Integrated
StringEscapeUtils.escapeJava()to safe-guard generated queries against syntax errors.Multiline Indentation: Improved Text Block generation by adding proper indentation/alignment to ensure the generated query is visually consistent with the surrounding Java code.
Configuration & Fallback: Updated logic to use
compactandmultilinekeywords fromUserSettings. Implemented a fallback mechanism that defaults tocompactand triggers alog.warnfor invalid ornullinputs.Key Changes
Refactoring & Logic:
QueryFormatter.java,JpqlQueryFormatter.java,MongoQueryFormatter.java: Separated formatting logic into an interface-based structure.BootJavaConfig.java: Updated style selection and added validation/fallback logic.DataRepositoryAotMetadataCodeLensProvider.java: Refactored to prioritize safety and proper indentation.Test Suite Updates:
QueryMethodCodeActionProviderJpaTest.java&QueryMethodCodeActionProviderMongoDbTest.java: Updated to verify the output specifically for thecompactstyle.DataRepositoryAotMetadataCodeLensProviderTest.java: Added comprehensive test cases for bothcompactandmultilinestyles, verifying correct indentation.Resolved Issues
IndexOutOfBoundsExceptionby properly escaping special characters.Discussion Points
DataRepositoryAotMetadataCodeLensProviderTestprovides full coverage for both styles. However,QueryMethodCodeActionProviderJpaTestandQueryMethodCodeActionProviderMongoDbTestare currently limited to verifying thecompactstyle. Should I expand these two classes to includemultilinetest cases as well to maintain consistency?log.warnfollowed by a fallback tocompactan acceptable approach for handling unexpected user configuration values? (Silent fallback to compact for null cases (no log.warn).)Test