From d2b8cdb83e67eff28058a28a9729fd07788b078b Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 5 Mar 2025 09:13:45 +0100 Subject: [PATCH] GH-1500: do not generate repo symbol when type is annotated with NoRepositoryBean Fixes GH-1500 --- .../java/data/DataRepositorySymbolProvider.java | 8 ++++---- .../test/DataRepositorySymbolProviderTest.java | 10 ++++++++++ .../test/CustomerRepositoryParentInterface.java | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 headless-services/spring-boot-language-server/src/test/resources/test-projects/test-spring-data-symbols/src/main/java/org/test/CustomerRepositoryParentInterface.java diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositorySymbolProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositorySymbolProvider.java index 5a6c739ad..abf3317e9 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositorySymbolProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositorySymbolProvider.java @@ -167,9 +167,10 @@ public class DataRepositorySymbolProvider implements SymbolProvider { } private static Tuple4 getRepositoryBean(TypeDeclaration typeDeclaration, TextDocument doc) { - ITypeBinding resolvedType = typeDeclaration.resolveBinding(); + AnnotationHierarchies annotationHierarchies = AnnotationHierarchies.get(typeDeclaration); - if (resolvedType != null) { + ITypeBinding resolvedType = typeDeclaration.resolveBinding(); + if (resolvedType != null && !annotationHierarchies.isAnnotatedWith(resolvedType, Annotations.NO_REPO_BEAN)) { return getRepositoryBean(typeDeclaration, doc, resolvedType); } else { @@ -177,8 +178,7 @@ public class DataRepositorySymbolProvider implements SymbolProvider { } } - private static Tuple4 getRepositoryBean(TypeDeclaration typeDeclaration, TextDocument doc, - ITypeBinding resolvedType) { + private static Tuple4 getRepositoryBean(TypeDeclaration typeDeclaration, TextDocument doc, ITypeBinding resolvedType) { ITypeBinding[] interfaces = resolvedType.getInterfaces(); for (ITypeBinding resolvedInterface : interfaces) { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java index fd4ce97ca..d0470f738 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositorySymbolProviderTest.java @@ -72,6 +72,16 @@ public class DataRepositorySymbolProviderTest { assertTrue(containsSymbol(symbols, "@+ 'customerRepository' (Customer) Repository", docUri, 6, 17, 6, 35)); } + @Test + void testNoRepositorySymbolForNoRepositoryAnnotation() throws Exception { + String docUri = directory.toPath().resolve("src/main/java/org/test/CustomerRepositoryParentInterface.java").toUri().toString(); + List symbols = indexer.getSymbols(docUri); + assertEquals(2, symbols.size()); + + assertTrue(containsSymbol(symbols, "@NoRepositoryBean", docUri, 8, 0, 8, 17)); + assertTrue(containsSymbol(symbols, "@Query(\"PARENT REPO INTERFACE QUERY STATEMENT\")", docUri, 11, 4, 11, 51)); + } + @Test void testDocumentSymbolsForRepository() throws Exception { String docUri = directory.toPath().resolve("src/main/java/org/test/CustomerRepository.java").toUri().toString(); diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-spring-data-symbols/src/main/java/org/test/CustomerRepositoryParentInterface.java b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-spring-data-symbols/src/main/java/org/test/CustomerRepositoryParentInterface.java new file mode 100644 index 000000000..1f17c83f9 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-spring-data-symbols/src/main/java/org/test/CustomerRepositoryParentInterface.java @@ -0,0 +1,14 @@ +package org.test; + +import java.util.List; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.NoRepositoryBean; + +@NoRepositoryBean +public interface CustomerRepositoryParentInterface extends CrudRepository { + + @Query("PARENT REPO INTERFACE QUERY STATEMENT") + List findParentPetTypes(); +}