From dcd08e01ed310369b472dca887d8ef6e5e1bfb8b Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 20 Sep 2019 18:14:33 +0800 Subject: [PATCH 1/3] Clean up the resources generated by HCR provider Signed-off-by: Jinbo Wang --- .../microsoft/java/debug/core/adapter/IProvider.java | 6 ++++++ .../handler/AbstractDisconnectRequestHandler.java | 4 ++++ .../core/adapter/handler/DisconnectRequestHandler.java | 8 ++++++++ .../plugin/internal/JavaHotCodeReplaceProvider.java | 10 +++++++++- 4 files changed, 27 insertions(+), 1 deletion(-) 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..e9f9d23fb 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 @@ -50,6 +50,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 +98,7 @@ private void destroyLaunchFiles(IDebugAdapterContext context) { } protected abstract void destroyDebugSession(Command command, Arguments arguments, Response response, IDebugAdapterContext context); + + protected void destroyProviders(IDebugAdapterContext context) { + } } 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..a7902b17c 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 @@ -13,6 +13,7 @@ import com.microsoft.java.debug.core.IDebugSession; import com.microsoft.java.debug.core.adapter.IDebugAdapterContext; +import com.microsoft.java.debug.core.adapter.IHotCodeReplaceProvider; import com.microsoft.java.debug.core.protocol.Messages.Response; import com.microsoft.java.debug.core.protocol.Requests.Arguments; import com.microsoft.java.debug.core.protocol.Requests.Command; @@ -33,4 +34,11 @@ public void destroyDebugSession(Command command, Arguments arguments, Response r } } + @Override + protected void destroyProviders(IDebugAdapterContext context) { + IHotCodeReplaceProvider hcrProvider = context.getProvider(IHotCodeReplaceProvider.class); + if (hcrProvider != null) { + hcrProvider.close(); + } + } } 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 From 255ec47667d8965ab9b84268cba91c3273130d5d Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 20 Sep 2019 18:24:53 +0800 Subject: [PATCH 2/3] Fix launch.json project name Signed-off-by: Jinbo Wang --- .vscode/launch.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 From 6c13fde95ebae4e14effe3550798884952dab6b5 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Sun, 22 Sep 2019 13:36:46 +0800 Subject: [PATCH 3/3] clean up hcr provider in noDebug mode Signed-off-by: Jinbo Wang --- .../handler/AbstractDisconnectRequestHandler.java | 5 +++++ .../core/adapter/handler/DisconnectRequestHandler.java | 9 --------- 2 files changed, 5 insertions(+), 9 deletions(-) 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 e9f9d23fb..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; @@ -100,5 +101,9 @@ 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 a7902b17c..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 @@ -13,7 +13,6 @@ import com.microsoft.java.debug.core.IDebugSession; import com.microsoft.java.debug.core.adapter.IDebugAdapterContext; -import com.microsoft.java.debug.core.adapter.IHotCodeReplaceProvider; import com.microsoft.java.debug.core.protocol.Messages.Response; import com.microsoft.java.debug.core.protocol.Requests.Arguments; import com.microsoft.java.debug.core.protocol.Requests.Command; @@ -33,12 +32,4 @@ public void destroyDebugSession(Command command, Arguments arguments, Response r } } } - - @Override - protected void destroyProviders(IDebugAdapterContext context) { - IHotCodeReplaceProvider hcrProvider = context.getProvider(IHotCodeReplaceProvider.class); - if (hcrProvider != null) { - hcrProvider.close(); - } - } }