@@ -292,7 +292,7 @@ default void findByLastName(EntityManager manager) {
292292 }
293293
294294 @ Test
295- void nativeQuery () throws Exception {
295+ void nativeQueryAttribute () throws Exception {
296296 String source = """
297297 package my.package
298298
@@ -357,7 +357,141 @@ public interface OwnerRepository {
357357 assertThat (token ).isEqualTo (new SemanticTokenData (167 , 168 , "number" , new String [0 ]));
358358
359359 }
360+
361+ @ Test
362+ void nativeQuery_1 () throws Exception {
363+ String source = """
364+ package my.package
365+
366+ import org.springframework.data.jpa.repository.NativeQuery;
367+
368+ public interface OwnerRepository {
369+
370+ @NativeQuery(value = "SELECT * FROM USERS u WHERE u.status = 1")
371+ void findByLastName();
372+ }
373+ """ ;
374+
375+ String uri = Paths .get (jp .getLocationUri ()).resolve ("src/main/resource/my/package/OwnerRepository.java" ).toUri ().toASCIIString ();
376+ CompilationUnit cu = CompilationUnitCache .parse2 (source .toCharArray (), uri , "OwnerRepository.java" , jp );
377+
378+ assertThat (cu ).isNotNull ();
379+
380+ List <SemanticTokenData > tokens = computeTokens (cu );
381+
382+ SemanticTokenData token = tokens .get (0 );
383+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("SELECT" );
384+ assertThat (token ).isEqualTo (new SemanticTokenData (140 , 146 , "keyword" , new String [0 ]));
385+
386+ token = tokens .get (1 );
387+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("*" );
388+ assertThat (token ).isEqualTo (new SemanticTokenData (147 , 148 , "operator" , new String [0 ]));
389+
390+ token = tokens .get (2 );
391+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("FROM" );
392+ assertThat (token ).isEqualTo (new SemanticTokenData (149 , 153 , "keyword" , new String [0 ]));
393+
394+ token = tokens .get (3 );
395+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("USERS" );
396+ assertThat (token ).isEqualTo (new SemanticTokenData (154 , 159 , "variable" , new String [0 ]));
397+
398+ token = tokens .get (4 );
399+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("u" );
400+ assertThat (token ).isEqualTo (new SemanticTokenData (160 , 161 , "variable" , new String [0 ]));
401+
402+ token = tokens .get (5 );
403+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("WHERE" );
404+ assertThat (token ).isEqualTo (new SemanticTokenData (162 , 167 , "keyword" , new String [0 ]));
405+
406+ token = tokens .get (6 );
407+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("u" );
408+ assertThat (token ).isEqualTo (new SemanticTokenData (168 , 169 , "variable" , new String [0 ]));
409+
410+ token = tokens .get (7 );
411+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("." );
412+ assertThat (token ).isEqualTo (new SemanticTokenData (169 , 170 , "operator" , new String [0 ]));
413+
414+ token = tokens .get (8 );
415+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("status" );
416+ assertThat (token ).isEqualTo (new SemanticTokenData (170 , 176 , "property" , new String [0 ]));
417+
418+ token = tokens .get (9 );
419+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("=" );
420+ assertThat (token ).isEqualTo (new SemanticTokenData (177 , 178 , "operator" , new String [0 ]));
360421
422+ token = tokens .get (10 );
423+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("1" );
424+ assertThat (token ).isEqualTo (new SemanticTokenData (179 , 180 , "number" , new String [0 ]));
425+
426+ }
427+
428+ @ Test
429+ void nativeQuery_2 () throws Exception {
430+ String source = """
431+ package my.package
432+
433+ import org.springframework.data.jpa.repository.NativeQuery;
434+
435+ public interface OwnerRepository {
436+
437+ @NativeQuery("SELECT * FROM USERS u WHERE u.status = 1")
438+ void findByLastName();
439+ }
440+ """ ;
441+
442+ String uri = Paths .get (jp .getLocationUri ()).resolve ("src/main/resource/my/package/OwnerRepository.java" ).toUri ().toASCIIString ();
443+ CompilationUnit cu = CompilationUnitCache .parse2 (source .toCharArray (), uri , "OwnerRepository.java" , jp );
444+
445+ assertThat (cu ).isNotNull ();
446+
447+ List <SemanticTokenData > tokens = computeTokens (cu );
448+
449+ SemanticTokenData token = tokens .get (0 );
450+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("SELECT" );
451+ assertThat (token ).isEqualTo (new SemanticTokenData (132 , 138 , "keyword" , new String [0 ]));
452+
453+ token = tokens .get (1 );
454+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("*" );
455+ assertThat (token ).isEqualTo (new SemanticTokenData (140 , 141 , "operator" , new String [0 ]));
456+
457+ token = tokens .get (2 );
458+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("FROM" );
459+ assertThat (token ).isEqualTo (new SemanticTokenData (142 , 146 , "keyword" , new String [0 ]));
460+
461+ token = tokens .get (3 );
462+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("USERS" );
463+ assertThat (token ).isEqualTo (new SemanticTokenData (147 , 152 , "variable" , new String [0 ]));
464+
465+ token = tokens .get (4 );
466+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("u" );
467+ assertThat (token ).isEqualTo (new SemanticTokenData (153 , 154 , "variable" , new String [0 ]));
468+
469+ token = tokens .get (5 );
470+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("WHERE" );
471+ assertThat (token ).isEqualTo (new SemanticTokenData (155 , 160 , "keyword" , new String [0 ]));
472+
473+ token = tokens .get (6 );
474+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("u" );
475+ assertThat (token ).isEqualTo (new SemanticTokenData (161 , 162 , "variable" , new String [0 ]));
476+
477+ token = tokens .get (7 );
478+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("." );
479+ assertThat (token ).isEqualTo (new SemanticTokenData (162 , 163 , "operator" , new String [0 ]));
480+
481+ token = tokens .get (8 );
482+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("status" );
483+ assertThat (token ).isEqualTo (new SemanticTokenData (163 , 169 , "property" , new String [0 ]));
484+
485+ token = tokens .get (9 );
486+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("=" );
487+ assertThat (token ).isEqualTo (new SemanticTokenData (170 , 171 , "operator" , new String [0 ]));
488+
489+ token = tokens .get (10 );
490+ assertThat (source .substring (token .getStart (), token .getEnd ())).isEqualTo ("1" );
491+ assertThat (token ).isEqualTo (new SemanticTokenData (172 , 173 , "number" , new String [0 ]));
492+
493+ }
494+
361495 @ Test
362496 void nativeQueryWithSpel () throws Exception {
363497 String source = """
0 commit comments