diff options
author | Mickael Istria | 2022-02-15 17:51:58 +0000 |
---|---|---|
committer | Andrey Loskutov | 2022-02-16 16:28:40 +0000 |
commit | 6b0c9ae07ac28cbbd1f8012b2c962f66820fa0b2 (patch) | |
tree | f0665cf7406ad0093c7ac52359a0c815b17b3d6d | |
parent | da44517d75ff5c31d642751d2708c3ecee07617d (diff) | |
download | eclipse.platform.debug-6b0c9ae07ac28cbbd1f8012b2c962f66820fa0b2.tar.gz eclipse.platform.debug-6b0c9ae07ac28cbbd1f8012b2c962f66820fa0b2.tar.xz eclipse.platform.debug-6b0c9ae07ac28cbbd1f8012b2c962f66820fa0b2.zip |
Bug 507546 - Skip debug value codemining provider without debug launch
No need to crawl files if there is no debug launch running.
Change-Id: I6da47bbe568c88c47a4e61ce184140d945301581
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.debug/+/190835
Tested-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
-rw-r--r-- | org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/codemining/DebugValueCodeMiningProvider.java | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/codemining/DebugValueCodeMiningProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/codemining/DebugValueCodeMiningProvider.java index 96d6d7c06..5ddcd2a0f 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/codemining/DebugValueCodeMiningProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/codemining/DebugValueCodeMiningProvider.java @@ -14,12 +14,16 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.function.Predicate; +import java.util.stream.Stream; import org.eclipse.core.runtime.Adapters; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IDebugEventSetListener; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.model.IVariable; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.ui.IDebugUIConstants; @@ -34,7 +38,6 @@ import org.eclipse.jface.text.source.ISourceViewerExtension5; public class DebugValueCodeMiningProvider extends AbstractCodeMiningProvider { - private volatile boolean alreadyListening; private volatile IDebugEventSetListener listener; @Override @@ -44,10 +47,17 @@ public class DebugValueCodeMiningProvider extends AbstractCodeMiningProvider { return CompletableFuture.completedFuture(List.of()); } final IDocument document = viewer.getDocument(); - if (viewer instanceof ISourceViewerExtension5 && !alreadyListening) { - alreadyListening = true; - listener = e -> ((ISourceViewerExtension5) viewer).updateCodeMinings(); - DebugPlugin.getDefault().addDebugEventListener(listener); + if (viewer instanceof ISourceViewerExtension5 && listener == null) { + synchronized (this) { + if (listener == null) { + IDebugEventSetListener debugListener = e -> ((ISourceViewerExtension5) viewer).updateCodeMinings(); + DebugPlugin.getDefault().addDebugEventListener(debugListener); + listener = debugListener; + } + } + } + if (!hasDebugRunning()) { + return CompletableFuture.completedFuture(List.of()); } return CompletableFuture.supplyAsync(() -> { List<DebugValueCodeMining> res = new ArrayList<>(); @@ -78,14 +88,22 @@ public class DebugValueCodeMiningProvider extends AbstractCodeMiningProvider { }); } + private boolean hasDebugRunning() { + return Stream.of(DebugPlugin.getDefault().getLaunchManager().getLaunches()) // + .filter(Predicate.not(ILaunch::isTerminated)) // + .anyMatch(launch -> ILaunchManager.DEBUG_MODE.equals(launch.getLaunchMode())); + } + private boolean isEnabled() { return DebugUIPlugin.getDefault().getPreferenceStore().getBoolean(IDebugUIConstants.PREF_SHOW_VARIABLES_INLINE); } @Override public void dispose() { - if (listener != null) { - DebugPlugin.getDefault().removeDebugEventListener(listener); + IDebugEventSetListener debugListener = listener; + if (debugListener != null) { + DebugPlugin.getDefault().removeDebugEventListener(debugListener); + listener = null; } } } |