Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions debug/org.eclipse.debug.ui/plugin.properties
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ BreakpointActionSet.label=Breakpoints
CollapseAll.label=Collapse All
CollapseAll.tooltip= Collapse All
CopyToClipboardAction.label=&Copy Stack
CopyVariablesToClipboardAction.label=Copy &Variables
CopyExpressionsToClipboardAction.label=Copy &Expressions
CopyVariableRowToClipboardAction.label=Copy Row
CopyVariableToClipboardAction.label=Copy Variable
CopyExpressionRowToClipboardAction.label=Copy Row
CopyExpressionToClipboardAction.label=Copy Expression
CopyRegistersToClipboardAction.label=Copy &Registers
DebugActionSet.label=Debug
DebugToolbarActionSet.label=Debug Toolbar
Expand Down
33 changes: 27 additions & 6 deletions debug/org.eclipse.debug.ui/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1569,13 +1569,22 @@
id="org.eclipse.debug.ui.variablesView.popupMenu">
<!-- Variable Group -->
<action
label="%CopyVariablesToClipboardAction.label"
label="%CopyVariableRowToClipboardAction.label"
icon="$nl$/icons/full/elcl16/copy_edit_co.svg"
definitionId="org.eclipse.ui.edit.copy"
helpContextId="copy_variables_to_clipboard_action_context"
class="org.eclipse.debug.internal.ui.viewers.model.VirtualCopyToClipboardActionDelegate"
class="org.eclipse.debug.internal.ui.actions.expressions.CopyVariableRowToClipboardActionDelegate"
menubarPath="variableGroup"
id="org.eclipse.debug.ui.debugview.popupMenu.copyVariableRowToClipboard">
</action>
<action
label="%CopyVariableToClipboardAction.label"
icon="$nl$/icons/full/elcl16/copy_edit_co.svg"
definitionId="org.eclipse.ui.edit.copy"
helpContextId="copy_variables_to_clipboard_action_context"
class="org.eclipse.debug.internal.ui.actions.expressions.CopyVariableToClipboardActionDelegate"
menubarPath="variableGroup"
id="org.eclipse.debug.ui.debugview.popupMenu.copyVariablesToClipboard">
id="org.eclipse.debug.ui.debugview.popupMenu.copyVariableToClipboard">
</action>
<action
label="%SelectAll.label"
Expand Down Expand Up @@ -1615,13 +1624,25 @@
</selection>
</action>
<action
label="%CopyExpressionsToClipboardAction.label"
label="%CopyExpressionRowToClipboardAction.label"
icon="$nl$/icons/full/elcl16/copy_edit_co.svg"
definitionId="org.eclipse.ui.edit.copy"
helpContextId="copy_variables_to_clipboard_action_context"
class="org.eclipse.debug.internal.ui.actions.expressions.CopyExpressionRowToClipboardActionDelegate"
menubarPath="expressionGroup"
id="org.eclipse.debug.ui.debugview.popupMenu.copyExpressionsRowToClipboard">
<selection
class="org.eclipse.debug.core.model.IDebugElement">
</selection>
</action>
<action
label="%CopyExpressionToClipboardAction.label"
icon="$nl$/icons/full/elcl16/copy_edit_co.svg"
definitionId="org.eclipse.ui.edit.copy"
helpContextId="copy_variables_to_clipboard_action_context"
class="org.eclipse.debug.internal.ui.actions.expressions.CopyExpressionsToClipboardActionDelegate"
class="org.eclipse.debug.internal.ui.actions.expressions.CopyExpressionToClipboardActionDelegate"
menubarPath="expressionGroup"
id="org.eclipse.debug.ui.debugview.popupMenu.copyVariablesToClipboard">
id="org.eclipse.debug.ui.debugview.popupMenu.copyExpressionToClipboard">
<selection
class="org.eclipse.debug.core.model.IDebugElement">
</selection>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2017, 2025 Bachmann electronic GmbH and others.
* Copyright (c) 2017, 2026 Bachmann electronic GmbH and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
Expand All @@ -14,11 +14,18 @@
*******************************************************************************/
package org.eclipse.debug.internal.ui.actions.expressions;

import java.util.Iterator;

import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.internal.core.WatchExpression;
import org.eclipse.debug.internal.ui.DebugUIMessages;
import org.eclipse.debug.internal.ui.viewers.model.VirtualCopyToClipboardActionDelegate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.jface.viewers.IStructuredSelection;

public class CopyExpressionsToClipboardActionDelegate extends VirtualCopyToClipboardActionDelegate {
public class CopyExpressionRowToClipboardActionDelegate extends VirtualCopyToClipboardActionDelegate {

private static final String QUOTE = "\""; //$NON-NLS-1$
@Override
Expand Down Expand Up @@ -57,4 +64,40 @@ protected String exludeLabels(Object itemData, String label) {
}
return label;
}

@Override
protected boolean getEnableStateForSelection(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}

if (getViewer() instanceof TreeModelViewer treeViewer) {
if (!treeViewer.isShowColumns()) {
return false;
}
}

Object object = DebugUITools.getDebugContext();
IDebugElement context = null;
if (object == null) {
return false;
}
if (object instanceof IDebugElement debugElement) {
context = debugElement;
} else if (object instanceof ILaunch launch) {
context = launch.getDebugTarget();
}
if (context != null && context.getLaunch().isTerminated()) {
return false;
}

Iterator<?> itr = selection.iterator();
while (itr.hasNext()) {
Object element = itr.next();
if (!isEnabledFor(element)) {
return false;
}
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*******************************************************************************
* Copyright (c) 2026 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.actions.expressions;

import java.util.Iterator;

import org.eclipse.debug.core.model.IExpression;
import org.eclipse.debug.internal.ui.viewers.model.VirtualCopyToClipboardActionDelegate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
import org.eclipse.jface.viewers.IStructuredSelection;

public class CopyExpressionToClipboardActionDelegate extends VirtualCopyToClipboardActionDelegate {

@Override
protected void append(VirtualItem item, StringBuilder buffer, int indent) {
if (item.getData() instanceof IExpression expression) {
if (!buffer.isEmpty()) {
buffer.append(System.lineSeparator());
}
String expString = expression.getExpressionText();
buffer.append(expString);
}
}

@Override
protected boolean getEnableStateForSelection(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}
Iterator<?> itr = selection.iterator();
while (itr.hasNext()) {
Object element = itr.next();
if (!isEnabledFor(element)) {
return false;
}
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*******************************************************************************
* Copyright (c) 2026 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.actions.expressions;

import java.util.Iterator;

import org.eclipse.debug.internal.ui.viewers.model.VirtualCopyToClipboardActionDelegate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.jface.viewers.IStructuredSelection;

public class CopyVariableRowToClipboardActionDelegate extends VirtualCopyToClipboardActionDelegate {

@Override
protected boolean getEnableStateForSelection(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}

if (getViewer() instanceof TreeModelViewer treeViewer) {
if (!treeViewer.isShowColumns()) {
return false;
}
}

Iterator<?> itr = selection.iterator();
while (itr.hasNext()) {
Object element = itr.next();
if (!isEnabledFor(element)) {
return false;
}
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*******************************************************************************
* Copyright (c) 2026 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.actions.expressions;

import java.util.Iterator;

import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.debug.internal.ui.viewers.model.VirtualCopyToClipboardActionDelegate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
import org.eclipse.jface.viewers.IStructuredSelection;

public class CopyVariableToClipboardActionDelegate extends VirtualCopyToClipboardActionDelegate {

@Override
protected void append(VirtualItem item, StringBuilder buffer, int indent) {
if (item.getData() instanceof IVariable variable) {
try {
if (!buffer.isEmpty()) {
buffer.append(System.lineSeparator());
}
String variableName = variable.getName();
buffer.append(variableName);
} catch (DebugException e) {
DebugPlugin.log(e);
}

}
}

@Override
protected boolean getEnableStateForSelection(IStructuredSelection selection) {
if (selection.size() == 0) {
return false;
}
Iterator<?> itr = selection.iterator();
while (itr.hasNext()) {
Object element = itr.next();
if (!isEnabledFor(element)) {
return false;
}
}
return true;
}
}
Loading