diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/AbstractFileToProjectCache.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/AbstractFileToProjectCache.java
index 1d5dbe27a..91b6b7344 100644
--- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/AbstractFileToProjectCache.java
+++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/languageserver/java/AbstractFileToProjectCache.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2020 Pivotal, Inc.
+ * Copyright (c) 2017, 2022 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -71,7 +71,7 @@ public abstract class AbstractFileToProjectCache
extends
final String taskId = getProgressId();
final ProgressService progressService = server.getProgressService();
if (progressService != null) {
- progressService.progressEvent(taskId, "Updating data for project `" + project.getElementName() + "'");
+ progressService.progressBegin(taskId, "Updating data for project", "'" + project.getElementName() + "'");
}
if (async) {
CompletableFuture.supplyAsync(() -> update(project)).thenAccept((changed) -> afterUpdate(project, changed, notify, taskId));
@@ -84,7 +84,7 @@ public abstract class AbstractFileToProjectCache
extends
private void afterUpdate(P project, boolean changed, boolean notify, String taskId) {
final ProgressService progressService = server.getProgressService();
if (progressService != null) {
- progressService.progressEvent(taskId, null);
+ progressService.progressDone(taskId);
}
if (changed || alwaysFireEventOnUpdate) {
if (notify) {
diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressService.java
index 32812628f..263d4c2f1 100644
--- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressService.java
+++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressService.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2016-2019 Pivotal, Inc.
+ * Copyright (c) 2016, 2022 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -15,23 +15,34 @@ public interface ProgressService {
public static ProgressService NO_PROGRESS = new ProgressService() {
+ @Override
+ public void progressBegin(String taskId, String title, String message) {
+ }
+
@Override
public void progressEvent(String taskId, String statusMsg) {
-
+ }
+
+ @Override
+ public void progressDone(String taskId) {
}
};
/**
- * Sends a progress event to the LSP client. A taskId is an arbirary id
+ * Sends an event to start progress to the LSP client.
+ *
+ * @param taskId is an arbitrary id
* that can be chosen by the caller. The purpose of the id is to be a 'unique'
- * id for some kind of 'long running job'. Only a single 'statusMsg' is associated
- * with a given taskId at any one time. Each event updates the message shown
+ * id for some kind of 'long running job'
+ * @param title progress main title, i.e. "Indexing", "Loading"
+ * @param message detail for the title, i.e. subtask in progress at the moment
+ */
+ void progressBegin(String taskId, String title, String message);
+
+ /**
+ * Sends a progress event to the LSP client. Each event updates the message shown
* to the user replacing the old one.
- *
- * Updating the message to 'null' erases the previous message without showing
- * a new one.
- *
* More than one message may be shown simultaneously to the user, if they
* have different taskId.
*
@@ -39,6 +50,13 @@ public interface ProgressService {
* @param statusMsg
*/
void progressEvent(String taskId, String statusMsg);
+
+ /**
+ * Send the event to the LSP client to end progress for passed id
+ *
+ * @param taskId the id of the task in progress
+ */
+ void progressDone(String taskId);
default ProgressTask createProgressTask(String taskId) {
return new ProgressTask(taskId, this);
diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressTask.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressTask.java
index f6176bdd1..ac15c3e55 100644
--- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressTask.java
+++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/ProgressTask.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019 Pivotal, Inc.
+ * Copyright (c) 2019, 2022 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -26,13 +26,17 @@ public class ProgressTask {
this.taskId = taskId;
this.service = service;
}
+
+ public void progressBegin(String title, String statusMsg) {
+ this.service.progressBegin(taskId, title, statusMsg);
+ }
public void progressEvent(String statusMsg) {
this.service.progressEvent(taskId, statusMsg);
}
public void progressDone() {
- this.service.progressEvent(taskId, null);
+ this.service.progressDone(taskId);
}
}
diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java
index 94774a384..d9c7250d8 100644
--- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java
+++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java
@@ -133,46 +133,54 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC
private ConcurrentHashMap activeTaskIDs = new ConcurrentHashMap<>();
@Override
- public void progressEvent(String taskId, String statusMsg) {
+ public void progressBegin(String taskId, String title, String message) {
STS4LanguageClient client = SimpleLanguageServer.this.client;
- if (client!=null) {
- if (statusMsg == null) {
- progressDone(taskId);
- return;
- }
+ if (client != null) {
boolean isNew = activeTaskIDs.put(taskId, true) == null;
- if (isNew) {
- // New taskId, new progress
- WorkDoneProgressCreateParams params = new WorkDoneProgressCreateParams();
- params.setToken(taskId);
- SimpleLanguageServer.this.client.createProgress(params).thenAccept((p) -> {
- ProgressParams progressParams = new ProgressParams();
- progressParams.setToken(taskId);
- WorkDoneProgressBegin report = new WorkDoneProgressBegin();
- report.setCancellable(false);
- progressParams.setValue(Either.forLeft(report));
- report.setMessage(statusMsg);
- SimpleLanguageServer.this.client.notifyProgress(progressParams);
- });
- } else {
- // Already exists
+ if (!isNew) {
+ log.error("Progress for task id '{}' already exists", taskId);
+ }
+ WorkDoneProgressCreateParams params = new WorkDoneProgressCreateParams();
+ params.setToken(taskId);
+ client.createProgress(params).thenAccept((p) -> {
ProgressParams progressParams = new ProgressParams();
progressParams.setToken(taskId);
- WorkDoneProgressReport report = new WorkDoneProgressReport();
+ WorkDoneProgressBegin report = new WorkDoneProgressBegin();
+ report.setCancellable(false);
progressParams.setValue(Either.forLeft(report));
- report.setMessage(statusMsg);
- SimpleLanguageServer.this.client.notifyProgress(progressParams);
- }
+ report.setMessage(message);
+ report.setTitle(title);
+ client.notifyProgress(progressParams);
+ });
}
}
- private void progressDone(String taskId) {
- if (activeTaskIDs.remove(taskId)) {
+ @Override
+ public void progressEvent(String taskId, String statusMsg) {
+ STS4LanguageClient client = SimpleLanguageServer.this.client;
+ if (client != null) {
+ if (!activeTaskIDs.containsKey(taskId)) {
+ log.error("Progress for task id '{}' does NOT exist!", taskId);
+ return;
+ }
+ ProgressParams progressParams = new ProgressParams();
+ progressParams.setToken(taskId);
+ WorkDoneProgressReport report = new WorkDoneProgressReport();
+ progressParams.setValue(Either.forLeft(report));
+ report.setMessage(statusMsg);
+ client.notifyProgress(progressParams);
+ }
+ }
+
+ @Override
+ public void progressDone(String taskId) {
+ STS4LanguageClient client = SimpleLanguageServer.this.client;
+ if (client != null && activeTaskIDs.remove(taskId)) {
ProgressParams progressParams = new ProgressParams();
progressParams.setToken(taskId);
WorkDoneProgressEnd report = new WorkDoneProgressEnd();
progressParams.setValue(Either.forLeft(report));
- SimpleLanguageServer.this.client.notifyProgress(progressParams);
+ client.notifyProgress(progressParams);
}
}
};
diff --git a/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java b/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java
index 9f9d4a031..e4ca4faa7 100644
--- a/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java
+++ b/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2017, 2019 Pivotal, Inc.
+ * Copyright (c) 2017, 2022 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -16,7 +16,6 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -174,7 +173,7 @@ public class MavenProjectCacheTest {
progressDone.set(true);
return null;
}
- }).when(progressService).progressEvent(any(String.class), (String) isNull());
+ }).when(progressService).progressDone(any(String.class));
when(server.getProgressService()).thenReturn(progressService);
@@ -223,7 +222,7 @@ public class MavenProjectCacheTest {
progressDone.set(true);
return null;
}
- }).when(progressService).progressEvent(any(String.class), (String) isNull());
+ }).when(progressService).progressDone(any(String.class));
when(server.getProgressService()).thenReturn(progressService);
diff --git a/headless-services/commons/commons-rewrite/pom.xml b/headless-services/commons/commons-rewrite/pom.xml
index cd3dabf0d..5ba92d32b 100644
--- a/headless-services/commons/commons-rewrite/pom.xml
+++ b/headless-services/commons/commons-rewrite/pom.xml
@@ -91,6 +91,13 @@
${rewrite-spring-version}
+
+
+ org.openrewrite.recipe
+ rewrite-migrate-java
+ ${rewrite-java-migration.version}
+
+
diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml
index 1030c3978..c2c8f4555 100644
--- a/headless-services/commons/pom.xml
+++ b/headless-services/commons/pom.xml
@@ -109,8 +109,9 @@
1.13
- 7.24.1
- 4.22.1
+ 7.26.1
+ 4.23.0
+ 1.8.02.13.2true
diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
index 582b6709e..7a352e4e4 100644
--- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
+++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/rewrite/RewriteRecipeRepository.java
@@ -126,7 +126,7 @@ public class RewriteRecipeRepository {
private void loadRecipes() {
try {
- server.getProgressService().progressEvent(RECIPES_LOADING_PROGRESS, "Loading Rewrite Recipes...");
+ server.getProgressService().progressBegin(RECIPES_LOADING_PROGRESS, "Loading Rewrite Recipes", null);
log.info("Loading Rewrite Recipes...");
for (Recipe r : Environment.builder().scanRuntimeClasspath().build().listRecipes()) {
if (r.getName() != null) {
@@ -151,7 +151,7 @@ public class RewriteRecipeRepository {
log.info("Done loading Rewrite Recipes");
server.doOnInitialized(() -> registerCommands());
} catch (Throwable t) {
- server.getProgressService().progressEvent(RECIPES_LOADING_PROGRESS, null);
+ server.getProgressService().progressDone(RECIPES_LOADING_PROGRESS);
log.error("", t);
}
}
@@ -263,7 +263,7 @@ public class RewriteRecipeRepository {
server.getClient().registerCapability(params).thenAccept((v) -> {
server.onShutdown(() -> server.getClient().unregisterCapability(new UnregistrationParams(List.of(new Unregistration(registrationId, WORKSPACE_EXECUTE_COMMAND)))));
log.info("Done registering commands for rewrite recipes");
- server.getProgressService().progressEvent(RECIPES_LOADING_PROGRESS, null);
+ server.getProgressService().progressDone(RECIPES_LOADING_PROGRESS);
});
}
@@ -280,7 +280,7 @@ public class RewriteRecipeRepository {
private CompletableFuture