GH-1500: do not generate repo symbol when type is annotated with NoRepositoryBean

Fixes GH-1500
This commit is contained in:
Martin Lippert
2025-03-05 09:13:45 +01:00
parent e7eb27c433
commit d2b8cdb83e
3 changed files with 28 additions and 4 deletions

View File

@@ -167,9 +167,10 @@ public class DataRepositorySymbolProvider implements SymbolProvider {
}
private static Tuple4<String, ITypeBinding, String, DocumentRegion> 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<String, ITypeBinding, String, DocumentRegion> getRepositoryBean(TypeDeclaration typeDeclaration, TextDocument doc,
ITypeBinding resolvedType) {
private static Tuple4<String, ITypeBinding, String, DocumentRegion> getRepositoryBean(TypeDeclaration typeDeclaration, TextDocument doc, ITypeBinding resolvedType) {
ITypeBinding[] interfaces = resolvedType.getInterfaces();
for (ITypeBinding resolvedInterface : interfaces) {

View File

@@ -72,6 +72,16 @@ public class DataRepositorySymbolProviderTest {
assertTrue(containsSymbol(symbols, "@+ 'customerRepository' (Customer) Repository<Customer,Long>", 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<? extends WorkspaceSymbol> 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();

View File

@@ -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<Customer, Long> {
@Query("PARENT REPO INTERFACE QUERY STATEMENT")
List<Object> findParentPetTypes();
}