Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMickael Istria2022-02-15 17:51:58 +0000
committerAndrey Loskutov2022-02-16 16:28:40 +0000
commit6b0c9ae07ac28cbbd1f8012b2c962f66820fa0b2 (patch)
treef0665cf7406ad0093c7ac52359a0c815b17b3d6d
parentda44517d75ff5c31d642751d2708c3ecee07617d (diff)
downloadeclipse.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.java32
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;
}
}
}

Back to the top