From f4ad19a8c9d40eb83805b6c4ae6e2f952dde1a1b Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 23 Sep 2019 10:02:39 +0800 Subject: [PATCH] Clean up the resources generated by HCR provider (#300) * Clean up the resources generated by HCR provider Signed-off-by: Jinbo Wang * Fix launch.json project name Signed-off-by: Jinbo Wang * clean up hcr provider in noDebug mode Signed-off-by: Jinbo Wang --- .vscode/launch.json | 3 ++- .../microsoft/java/debug/core/adapter/IProvider.java | 6 ++++++ .../handler/AbstractDisconnectRequestHandler.java | 9 +++++++++ .../core/adapter/handler/DisconnectRequestHandler.java | 1 - .../plugin/internal/JavaHotCodeReplaceProvider.java | 10 +++++++++- 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c8c1f83c8..6de8b630d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,7 +14,8 @@ "sourcePaths": [ "${workspaceRoot}/com.microsoft.java.debug.core/main/java", "${workspaceRoot}/com.microsoft.java.debug.plugin/src/main/java" - ] + ], + "projectName": "com.microsoft.java.debug.plugin" } ] } \ No newline at end of file diff --git a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/IProvider.java b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/IProvider.java index 74b5e17d9..86c30929c 100644 --- a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/IProvider.java +++ b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/IProvider.java @@ -24,4 +24,10 @@ public interface IProvider { */ default void initialize(IDebugAdapterContext debugContext, Map options) { } + + /** + * Close the provider and free all associated resources. + */ + default void close() { + } } diff --git a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/AbstractDisconnectRequestHandler.java b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/AbstractDisconnectRequestHandler.java index 3a9653dcd..888009890 100644 --- a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/AbstractDisconnectRequestHandler.java +++ b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/AbstractDisconnectRequestHandler.java @@ -23,6 +23,7 @@ import com.microsoft.java.debug.core.Configuration; import com.microsoft.java.debug.core.adapter.IDebugAdapterContext; import com.microsoft.java.debug.core.adapter.IDebugRequestHandler; +import com.microsoft.java.debug.core.adapter.IHotCodeReplaceProvider; import com.microsoft.java.debug.core.adapter.LaunchMode; import com.microsoft.java.debug.core.protocol.Messages.Response; import com.microsoft.java.debug.core.protocol.Requests.Arguments; @@ -50,6 +51,7 @@ public CompletableFuture handle(Command command, Arguments arguments, * @param context the debug context */ private void destroyResource(IDebugAdapterContext context) { + destroyProviders(context); if (shouldDestroyLaunchFiles(context)) { destroyLaunchFiles(context); } @@ -97,4 +99,11 @@ private void destroyLaunchFiles(IDebugAdapterContext context) { } protected abstract void destroyDebugSession(Command command, Arguments arguments, Response response, IDebugAdapterContext context); + + protected void destroyProviders(IDebugAdapterContext context) { + IHotCodeReplaceProvider hcrProvider = context.getProvider(IHotCodeReplaceProvider.class); + if (hcrProvider != null) { + hcrProvider.close(); + } + } } diff --git a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/DisconnectRequestHandler.java b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/DisconnectRequestHandler.java index 7170e1549..a615e8963 100644 --- a/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/DisconnectRequestHandler.java +++ b/com.microsoft.java.debug.core/src/main/java/com/microsoft/java/debug/core/adapter/handler/DisconnectRequestHandler.java @@ -32,5 +32,4 @@ public void destroyDebugSession(Command command, Arguments arguments, Response r } } } - } diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaHotCodeReplaceProvider.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaHotCodeReplaceProvider.java index e601bc128..3ea1635d2 100644 --- a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaHotCodeReplaceProvider.java +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaHotCodeReplaceProvider.java @@ -265,8 +265,16 @@ public void initialize(IDebugAdapterContext context, Map options } this.context = context; currentDebugSession = context.getDebugSession(); + } + + @Override + public void close() { + if (DebugSettings.getCurrent().hotCodeReplace != DebugSettings.HotCodeReplace.NEVER) { + // Remove the listener. + ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); + } - // TODO: Change IProvider interface for shutdown event + eventSubject.onComplete(); } @Override