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