From 23ad2201233251756eda42b663ff93037817a412 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Mon, 27 Jan 2025 15:57:54 +0100 Subject: [PATCH] GH-1458: ignore org.springframework.lang annotations when creating default symbols Fixed GH-1458 --- .../vscode/boot/java/utils/SpringIndexerJava.java | 4 +++- .../boot/java/utils/test/SpringIndexerTest.java | 14 +++++++------- .../main/java/org/test/ClassWithDefaultSymbol.java | 6 ++++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java index 3c1f4d095..f6b96744a 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java @@ -786,7 +786,9 @@ public class SpringIndexerJava implements SpringIndexer { ITypeBinding type = node.resolveTypeBinding(); if (type != null) { String qualifiedName = type.getQualifiedName(); - if (qualifiedName != null && qualifiedName.startsWith("org.springframework") || isJakartaAnnotationWithDefaultSymbol(qualifiedName)) { + if (qualifiedName != null + && ((qualifiedName.startsWith("org.springframework") && !qualifiedName.startsWith("org.springframework.lang")) + || isJakartaAnnotationWithDefaultSymbol(qualifiedName))) { TextDocument doc = DocumentUtils.getTempTextDocument(context.getDocURI(), context.getDocRef(), context.getContent()); return DefaultSymbolProvider.provideDefaultSymbol(node, doc); } diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java index ee235f89a..2ecb129dd 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/utils/test/SpringIndexerTest.java @@ -94,7 +94,7 @@ public class SpringIndexerTest { assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38)); docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); } @Test @@ -153,7 +153,7 @@ public class SpringIndexerTest { docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); } @Test @@ -190,7 +190,7 @@ public class SpringIndexerTest { assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38)); docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); } @Test @@ -251,7 +251,7 @@ public class SpringIndexerTest { assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38)); docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); assertTrue(containsSymbol(allSymbols, "@/created-mapping1", createdDocURI, 6, 1, 6, 36)); assertTrue(containsSymbol(allSymbols, "@/created-mapping2", createdDocURI, 11, 1, 11, 36)); @@ -286,7 +286,7 @@ public class SpringIndexerTest { assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38)); docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); } @Test @@ -322,7 +322,7 @@ public class SpringIndexerTest { assertFalse(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38)); docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); } @Test @@ -358,7 +358,7 @@ public class SpringIndexerTest { assertTrue(containsSymbol(allSymbols, "@/classlevel/mapping-subpackage", docUri, 7, 1, 7, 38)); docUri = directory.toPath().resolve("src/main/java/org/test/ClassWithDefaultSymbol.java").toUri().toString(); - assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 4, 0, 4, 13)); + assertTrue(containsSymbol(allSymbols, "@Configurable", docUri, 5, 0, 5, 13)); } @Test diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-annotation-indexing-parent/test-annotation-indexing/src/main/java/org/test/ClassWithDefaultSymbol.java b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-annotation-indexing-parent/test-annotation-indexing/src/main/java/org/test/ClassWithDefaultSymbol.java index e24f4ed61..a0f96a786 100644 --- a/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-annotation-indexing-parent/test-annotation-indexing/src/main/java/org/test/ClassWithDefaultSymbol.java +++ b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-annotation-indexing-parent/test-annotation-indexing/src/main/java/org/test/ClassWithDefaultSymbol.java @@ -1,7 +1,13 @@ package org.test; import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.lang.NonNull; @Configurable public class ClassWithDefaultSymbol { + + @NonNull + public String foo() { + return "foo"; + } }