3737import org .springframework .ide .vscode .boot .java .handlers .CodeLensProvider ;
3838import org .springframework .ide .vscode .parser .hql .HqlQueryFormatter ;
3939import org .springframework .ide .vscode .parser .postgresql .PostgreSqlQueryFormatter ;
40- import org .springframework .ide .vscode .boot .java .rewrite .RewriteRefactorings ;
40+ import org .springframework .ide .vscode .boot .java .jdt .refactoring .AddAnnotationRefactoring ;
41+ import org .springframework .ide .vscode .boot .java .jdt .refactoring .JdtFixDescriptor ;
42+ import org .springframework .ide .vscode .boot .java .jdt .refactoring .JdtRefactorUtils ;
43+ import org .springframework .ide .vscode .boot .java .jdt .refactoring .JdtRefactorings ;
4144import org .springframework .ide .vscode .boot .java .utils .ASTUtils ;
4245import org .springframework .ide .vscode .commons .java .IJavaProject ;
4346import org .springframework .ide .vscode .commons .languageserver .java .JavaProjectFinder ;
4447import org .springframework .ide .vscode .commons .languageserver .util .SimpleLanguageServer ;
45- import org .springframework .ide .vscode .commons .rewrite .config .RecipeScope ;
46- import org .springframework .ide .vscode .commons .rewrite .java .AddAnnotationOverMethod ;
47- import org .springframework .ide .vscode .commons .rewrite .java .FixDescriptor ;
4848import org .springframework .ide .vscode .commons .util .BadLocationException ;
4949import org .springframework .ide .vscode .commons .util .text .TextDocument ;
5050
@@ -65,11 +65,11 @@ public class DataRepositoryAotMetadataCodeLensProvider implements CodeLensProvid
6565
6666 private final DataRepositoryAotMetadataService repositoryMetadataService ;
6767 private final JavaProjectFinder projectFinder ;
68- private final RewriteRefactorings refactorings ;
68+ private final JdtRefactorings refactorings ;
6969 private final BootJavaConfig config ;
7070
7171 public DataRepositoryAotMetadataCodeLensProvider (SimpleLanguageServer server , JavaProjectFinder projectFinder , DataRepositoryAotMetadataService repositoryMetadataService ,
72- RewriteRefactorings refactorings , BootJavaConfig config ) {
72+ JdtRefactorings refactorings , BootJavaConfig config ) {
7373 this .projectFinder = projectFinder ;
7474 this .repositoryMetadataService = repositoryMetadataService ;
7575 this .refactorings = refactorings ;
@@ -159,7 +159,7 @@ private List<CodeLens> createCodeLenses(IJavaProject project, MethodDeclaration
159159 || hierarchyAnnot .isAnnotatedWith (mb , Annotations .DATA_JDBC_QUERY );
160160
161161 if (!isQueryAnnotated ) {
162- codeLenses .add (new CodeLens (range , refactorings .createFixCommand (COVERT_TO_QUERY_LABEL , createFixDescriptor (mb , document .getUri (), metadata .module (), methodMetadata , config )), null ));
162+ codeLenses .add (new CodeLens (range , refactorings .createFixCommand (COVERT_TO_QUERY_LABEL , createJdtFixDescriptor (mb , document .getUri (), metadata .module (), methodMetadata , config )), null ));
163163 }
164164
165165 Command impl = new Command ("Go To Implementation" , GenAotQueryMethodImplProvider .CMD_NAVIGATE_TO_IMPL , List .of (new GenAotQueryMethodImplProvider .GoToImplParams (
@@ -200,20 +200,23 @@ private Optional<CodeLens> createRefreshCodeLens(IJavaProject project, String ti
200200 });
201201 }
202202
203- static FixDescriptor createFixDescriptor (IMethodBinding mb , String docUri , DataRepositoryModule module , IDataRepositoryAotMethodMetadata methodMetadata , BootJavaConfig config ) {
204- return new FixDescriptor (AddAnnotationOverMethod .class .getName (), List .of (docUri ), "Turn into `@Query`" )
205- .withRecipeScope (RecipeScope .FILE )
206- .withParameters (Map .of (
207- "annotationType" , moduleToQueryMapping .get (module ),
208- "method" , "%s %s(%s)" .formatted (mb .getDeclaringClass ().getQualifiedName (), mb .getName (),
209- Arrays .stream (mb .getParameterTypes ())
210- .map (pt -> pt .getName ())
211- .collect (Collectors .joining ("," ))),
212- "attributes" , createAttributeList (methodMetadata .getAttributesMap (), module , config )));
203+ static JdtFixDescriptor createJdtFixDescriptor (IMethodBinding mb , String docUri , DataRepositoryModule module , IDataRepositoryAotMethodMetadata methodMetadata , BootJavaConfig config ) {
204+ List <String > paramTypeNames = Arrays .stream (mb .getParameterTypes ())
205+ .map (pt -> pt .getName ())
206+ .collect (Collectors .toList ());
207+
208+ AddAnnotationRefactoring refactoring = new AddAnnotationRefactoring (
209+ moduleToQueryMapping .get (module ),
210+ mb .getDeclaringClass ().getQualifiedName (),
211+ mb .getName (),
212+ paramTypeNames ,
213+ createAttributeList (methodMetadata .getAttributesMap (), module , config ));
214+
215+ return new JdtFixDescriptor (refactoring , List .of (docUri ), "Turn into `@Query`" );
213216 }
214217
215- private static List <AddAnnotationOverMethod .Attribute > createAttributeList (Map <String , String > attributes , DataRepositoryModule module , BootJavaConfig config ) {
216- List <AddAnnotationOverMethod .Attribute > result = new ArrayList <>();
218+ private static List <AddAnnotationRefactoring .Attribute > createAttributeList (Map <String , String > attributes , DataRepositoryModule module , BootJavaConfig config ) {
219+ List <AddAnnotationRefactoring .Attribute > result = new ArrayList <>();
217220 boolean isMultiline = config .isDataQueryMultiline ();
218221
219222 for (Map .Entry <String , String > entry : attributes .entrySet ()) {
@@ -232,14 +235,15 @@ private static List<AddAnnotationOverMethod.Attribute> createAttributeList(Map<S
232235 }
233236 }
234237 };
235- value = "\" \" \" \n " + formattedValue + "\n \" \" \" " ;
238+ value = "\" \" \" \n " + JdtRefactorUtils . escapeForTextBlock ( formattedValue ) + "\n \" \" \" " ;
236239 } else {
237240 value = "\" " + StringEscapeUtils .escapeJava (value ).trim () + "\" " ;
238241 }
239242
240- result .add (new AddAnnotationOverMethod .Attribute (key , value ));
243+ result .add (new AddAnnotationRefactoring .Attribute (key , value ));
241244 }
242245 return result ;
243246 }
247+
244248}
245249
0 commit comments