diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties index cf177b83afc..5b4c8485513 100644 --- a/core/org.eclipse.cdt.ui/plugin.properties +++ b/core/org.eclipse.cdt.ui/plugin.properties @@ -181,6 +181,7 @@ Refactoring.toggleFunction.label=Toggle Function Refactoring.hideMethod.label=Hide Method... Refactoring.implementMethod.label=Impl&ement Method... Refactoring.gettersAndSetters.label=Gene&rate Getters and Setters... +Refactoring.deleteAction.label=&Delete Source.menu.label = &Source diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java index 7345b917efb..4796d5ebdfa 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ICEditorActionDefinitionIds.java @@ -96,6 +96,12 @@ public interface ICEditorActionDefinitionIds extends ITextEditorActionDefinition */ public static final String RENAME_ELEMENT= "org.eclipse.cdt.ui.edit.text.rename.element"; //$NON-NLS-1$ + /** + * Action definition ID of the refactor -> delete element action + * (value "org.eclipse.cdt.ui.edit.text.delete.element"). + */ + public static final String DELETE_ELEMENT = "org.eclipse.cdt.ui.edit.text.delete.element"; //$NON-NLS-1$} + /** * Action definition ID of the refactor -> extract constant action * (value "org.eclipse.cdt.ui.refactor.extract.constant"). diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CDeleteAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CDeleteAction.java new file mode 100644 index 00000000000..fbe3d90ccf0 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CDeleteAction.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2016 Luis Yanes. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + *******************************************************************************/ +package org.eclipse.cdt.ui.refactoring.actions; + +import java.lang.reflect.InvocationTargetException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableContext; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.text.ITextSelection; +import org.eclipse.jface.window.IShellProvider; +import org.eclipse.swt.widgets.Shell; + +import org.eclipse.cdt.core.model.CModelException; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.model.IWorkingCopy; + +import org.eclipse.cdt.internal.ui.util.ExceptionHandler; + +/** + * Launches a delete refactoring. + * + * @since 5.12 + * @noextend This class is not intended to be subclassed by clients. + * @author Luis Yanes + */ +public class CDeleteAction extends RefactoringAction { + + public CDeleteAction() { + super(Messages.CDeleteAction_label); + } + + @Override + public void run(IShellProvider shellProvider, IWorkingCopy wc, ITextSelection s) { + throw new UnsupportedOperationException("Invoking this action from the editor is not supported"); + } + + @Override + public void run(IShellProvider shellProvider, ICElement elem) { + final ICElement[] elements = new ICElement[] { elem }; + IRunnableWithProgress runnable = new IRunnableWithProgress() { + @Override + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + try { + CoreModel.getDefault().getCModel().delete(elements, false, monitor); + } catch (CModelException e) { + throw new InvocationTargetException(e); + } + } + }; + try { + IRunnableContext context = new ProgressMonitorDialog(shellProvider.getShell()); + context.run(true, true, runnable); + } catch (InvocationTargetException e) { + ExceptionHandler.handle(e, Messages.CDeleteAction_error_title, Messages.CDeleteAction_error_message); + } catch (InterruptedException e) { + // Safely ignore + } + } +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CRefactoringActionGroup.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CRefactoringActionGroup.java index b66138477b4..f9e6bb8b3a0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CRefactoringActionGroup.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/CRefactoringActionGroup.java @@ -26,6 +26,7 @@ import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchSite; +import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.ActionGroup; import org.eclipse.ui.part.Page; import org.eclipse.ui.texteditor.ITextEditor; @@ -113,6 +114,7 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh private String fGroupName= IWorkbenchActionConstants.GROUP_REORGANIZE; private CRenameAction fRenameAction; + private CDeleteAction fDeleteAction; private RefactoringAction fExtractConstantAction; private RefactoringAction fExtractLocalVariableAction; private RefactoringAction fExtractFunctionAction; @@ -165,8 +167,12 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh fToggleFunctionAction = new ToggleFunctionAction(); fToggleFunctionAction.setActionDefinitionId(ICEditorActionDefinitionIds.TOGGLE_FUNCTION); fAllActions.add(fToggleFunctionAction); + } else { + fDeleteAction = new CDeleteAction(); + fDeleteAction.setActionDefinitionId(ICEditorActionDefinitionIds.DELETE_ELEMENT); + fAllActions.add(fDeleteAction); } - + fHideMethodAction = new HideMethodAction(); fHideMethodAction.setActionDefinitionId(ICEditorActionDefinitionIds.HIDE_METHOD); fAllActions.add(fHideMethodAction); @@ -236,6 +242,7 @@ public class CRefactoringActionGroup extends ActionGroup implements ISelectionCh IMenuManager refactorSubmenu = new MenuManager(Messages.CRefactoringActionGroup_menu, MENU_ID); refactorSubmenu.add(new Separator(GROUP_REORG)); addAction(refactorSubmenu, fRenameAction); + addAction(refactorSubmenu, fDeleteAction); refactorSubmenu.add(new Separator(GROUP_CODING)); addAction(refactorSubmenu, fExtractConstantAction); addAction(refactorSubmenu, fExtractLocalVariableAction); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.java index f9a0a1c908d..47842685500 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.java @@ -22,7 +22,10 @@ class Messages extends NLS { public static String ImplementMethodAction_label; public static String GettersAndSetters_label; public static String ToggleFunctionAction_label; - + public static String CDeleteAction_label; + public static String CDeleteAction_error_title; + public static String CDeleteAction_error_message; + static { NLS.initializeMessages(Messages.class.getName(), Messages.class); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.properties index e773cef4301..2db1c652bc9 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/refactoring/actions/Messages.properties @@ -18,3 +18,6 @@ ImplementMethodAction_label=Implement Method... HideMethodAction_label=Hide Method... ExtractFunctionAction_label=Extract Function... ToggleFunctionAction_label=Toggle Function Definition +CDeleteAction_label=&Delete +CDeleteAction_error_title=Delete Element Problem +CDeleteAction_error_message=There was a problem while trying to delete the element. \ No newline at end of file