Skip to content

Commit 3d57aeb

Browse files
committed
Disable aot query codelenses for Gradle project in VSCode
Signed-off-by: BoykoAlex <alex.boyko@broadcom.com>
1 parent c2620f0 commit 3d57aeb

5 files changed

Lines changed: 35 additions & 13 deletions

File tree

‎headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositoryAotMetadataCodeLensProvider.java‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,6 @@ protected void provideCodeLens(CancelChecker cancelToken, MethodDeclaration node
130130
if (project == null || !QueryMethodCodeActionProvider.isValidProject(project)) {
131131
return;
132132
}
133-
if (!repositoryMetadataService.isAotGenerationAvailable(project)) {
134-
// The build cannot generate the AOT metadata, e.g. the Gradle project has no `processAot` task
135-
return;
136-
}
137133

138134
IMethodBinding methodBinding = node.resolveBinding();
139135

‎headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositoryAotMetadataService.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ private static String buildType(IJavaProject project) {
234234
* GraalVM native build tools plugin is applied. The IDE reports the tasks of the build without running Gradle.
235235
* If it does not know them (yet) the project is given the benefit of the doubt.
236236
*/
237-
public boolean isAotGenerationAvailable(IJavaProject project) {
237+
public static boolean isAotGenerationAvailable(IJavaProject project) {
238238
IProjectBuild build = project.getProjectBuild();
239239
if (build != null && ProjectBuild.GRADLE_PROJECT_TYPE.equals(build.getType())) {
240240
Set<String> tasks = build.getTasks();

‎headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/QueryMethodCodeActionProvider.java‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,12 @@
2727
import org.springframework.ide.vscode.boot.java.jdt.refactoring.JdtRefactorings;
2828
import org.springframework.ide.vscode.commons.Version;
2929
import org.springframework.ide.vscode.commons.java.IJavaProject;
30+
import org.springframework.ide.vscode.commons.java.IProjectBuild;
3031
import org.springframework.ide.vscode.commons.java.SpringProjectUtil;
3132
import org.springframework.ide.vscode.commons.languageserver.reconcile.ICollector;
33+
import org.springframework.ide.vscode.commons.languageserver.util.LspClient;
34+
import org.springframework.ide.vscode.commons.languageserver.util.LspClient.Client;
35+
import org.springframework.ide.vscode.commons.protocol.java.ProjectBuild;
3236
import org.springframework.ide.vscode.commons.util.text.IRegion;
3337
import org.springframework.ide.vscode.commons.util.text.TextDocument;
3438

@@ -52,12 +56,19 @@ public boolean isApplicable(IJavaProject project) {
5256
}
5357

5458
static boolean isValidProject(IJavaProject project) {
59+
IProjectBuild build = project.getProjectBuild();
60+
if (LspClient.currentClient() == Client.VSCODE && build != null && ProjectBuild.GRADLE_PROJECT_TYPE.equals(build.getType())) {
61+
// TODO: remove once `gradle.runBuild` of vscode-gradle takes the arguments of the AOT refresh command (GH-1722)
62+
return false;
63+
}
5564
Version springDataJpaVersion = SpringProjectUtil.getDependencyVersionByPrefix(project, "spring-data-jpa");
5665
Version springDataMongoDbVersion = SpringProjectUtil.getDependencyVersionByPrefix(project, "spring-data-mongodb");
5766
Version springDataJddbcVersion = SpringProjectUtil.getDependencyVersionByPrefix(project, "spring-data-jdbc");
58-
return (springDataJpaVersion != null && springDataJpaVersion.getMajor() >= 4)
67+
boolean supportedSpringData = (springDataJpaVersion != null && springDataJpaVersion.getMajor() >= 4)
5968
|| (springDataMongoDbVersion != null && springDataMongoDbVersion.getMajor() >= 5)
6069
|| (springDataJddbcVersion != null && springDataJddbcVersion.getMajor() >= 4);
70+
// The AOT metadata must be possible to generate, e.g. a Gradle build without the `processAot` task cannot
71+
return supportedSpringData && DataRepositoryAotMetadataService.isAotGenerationAvailable(project);
6172
}
6273

6374
@Override

‎headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/DataRepositoryAotMetadataServiceRefreshCommandTest.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,19 @@ void clientWithoutSupportGetsNoCommand() throws Exception {
160160
assertFalse(service.regenerateMetadataCommand(project).isPresent());
161161
}
162162

163+
@Test
164+
void gradleProjectsAreNotValidInVSCodeUntilVSCodeGradleSupportsTheCommand() throws Exception {
165+
String client = System.getProperty("sts.lsp.client");
166+
System.setProperty("sts.lsp.client", "vscode");
167+
try {
168+
assertFalse(QueryMethodCodeActionProvider.isValidProject(gradleProject("spring-boot-4.0.0.jar", projectDir.toFile())));
169+
} finally {
170+
if (client == null) {
171+
System.clearProperty("sts.lsp.client");
172+
} else {
173+
System.setProperty("sts.lsp.client", client);
174+
}
175+
}
176+
}
177+
163178
}

‎headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositoryAotMetadataServiceTest.java‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,11 @@ private static IJavaProject gradleProject(Set<String> tasks) {
219219

220220
@Test
221221
void processAotAvailability() {
222-
assertTrue(service.isAotGenerationAvailable(gradleProject(Set.of("build", "processAot", "aotClasses"))));
223-
assertFalse(service.isAotGenerationAvailable(gradleProject(Set.of("build", "classes", "bootJar"))));
224-
assertFalse(service.isAotGenerationAvailable(gradleProject(Set.of())));
222+
assertTrue(DataRepositoryAotMetadataService.isAotGenerationAvailable(gradleProject(Set.of("build", "processAot", "aotClasses"))));
223+
assertFalse(DataRepositoryAotMetadataService.isAotGenerationAvailable(gradleProject(Set.of("build", "classes", "bootJar"))));
224+
assertFalse(DataRepositoryAotMetadataService.isAotGenerationAvailable(gradleProject(Set.of())));
225225
// unknown tasks get the benefit of the doubt
226-
assertTrue(service.isAotGenerationAvailable(gradleProject(null)));
226+
assertTrue(DataRepositoryAotMetadataService.isAotGenerationAvailable(gradleProject(null)));
227227
}
228228

229229
@Test
@@ -233,9 +233,9 @@ void otherProjectsAreNotAffected() {
233233
IJavaProject untyped = mock(IJavaProject.class);
234234
when(untyped.getProjectBuild()).thenReturn(IProjectBuild.create(null, null));
235235

236-
assertTrue(service.isAotGenerationAvailable(maven));
237-
assertTrue(service.isAotGenerationAvailable(untyped));
238-
assertTrue(service.isAotGenerationAvailable(mock(IJavaProject.class)));
236+
assertTrue(DataRepositoryAotMetadataService.isAotGenerationAvailable(maven));
237+
assertTrue(DataRepositoryAotMetadataService.isAotGenerationAvailable(untyped));
238+
assertTrue(DataRepositoryAotMetadataService.isAotGenerationAvailable(mock(IJavaProject.class)));
239239
}
240240

241241
@Test

0 commit comments

Comments
 (0)