blob: 1936251689fc5db658fec64907aa3971f62de21f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2021 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:
* Zsombor Gegesy - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.actions;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.ui.IDebugView;
import org.eclipse.jdt.debug.core.IJavaObject;
import org.eclipse.jdt.debug.core.IJavaVariable;
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.display.JavaInspectExpression;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
/**
* Asks the user to give a label to the variable, and store it in the {@link JDIDebugTarget}. If the user gives an empty string, this will remove the
* label.
*
*/
public class SetObjectLabelAction extends ObjectActionDelegate {
@Override
public void run(IAction action) {
IStructuredSelection selection = getCurrentSelection();
if (selection == null || selection.size() != 1) {
return;
}
Object element = selection.getFirstElement();
try {
String name;
IValue value;
if (element instanceof IJavaVariable) {
IJavaVariable variable = (IJavaVariable) element;
name = variable.getName();
value = variable.getValue();
} else if (element instanceof JavaInspectExpression) {
JavaInspectExpression jie = (JavaInspectExpression) element;
name = jie.getExpressionText();
value = jie.getValue();
} else {
return;
}
if (value instanceof IJavaObject) {
final IJavaObject javaValue = (IJavaObject) value;
askForLabel(javaValue, name);
}
} catch (DebugException e) {
return;
}
}
private void askForLabel(final IJavaObject javaValue, String variableName) throws DebugException {
final String currentLabel = javaValue.getLabel();
InputDialog dialog = new InputDialog(JDIDebugUIPlugin.getShell(), ActionMessages.SetObjectLabel_title, ActionMessages.SetObjectLabel_message, currentLabel != null
? currentLabel
: variableName, null);
if (dialog.open() != Window.OK) {
return;
}
javaValue.setLabel(dialog.getValue());
refresh();
}
protected StructuredViewer getStructuredViewer() {
IDebugView view = getPart().getAdapter(IDebugView.class);
if (view != null) {
Viewer viewer = view.getViewer();
if (viewer instanceof StructuredViewer) {
return (StructuredViewer) viewer;
}
}
return null;
}
private void refresh() {
StructuredViewer viewer = getStructuredViewer();
if (viewer != null) {
viewer.refresh();
}
}
}