package com.redhat.ceylon.eclipse.code.refactor;
import static com.redhat.ceylon.eclipse.code.editor.DynamicMenuItem.collapseMenuItems;
import static com.redhat.ceylon.eclipse.ui.CeylonPlugin.PLUGIN_ID;
import static com.redhat.ceylon.eclipse.ui.CeylonPlugin.imageRegistry;
import static com.redhat.ceylon.eclipse.ui.CeylonResources.CEYLON_CHANGE;
import static com.redhat.ceylon.eclipse.ui.CeylonResources.CEYLON_COMPOSITE_CHANGE;
import static com.redhat.ceylon.eclipse.ui.CeylonResources.CEYLON_IMPORT;
import static com.redhat.ceylon.eclipse.ui.CeylonResources.CEYLON_MOVE;
import static com.redhat.ceylon.eclipse.ui.CeylonResources.CEYLON_RENAME;
import static com.redhat.ceylon.eclipse.ui.CeylonResources.CEYLON_REORDER;
import static com.redhat.ceylon.eclipse.util.EditorUtil.getCurrentEditor;
import static com.redhat.ceylon.eclipse.java2ceylon.Java2CeylonProxies.refactorJ2C;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.actions.CompoundContributionItem;
import com.redhat.ceylon.eclipse.code.editor.CeylonEditor;
import com.redhat.ceylon.eclipse.code.editor.DynamicMenuItem;
public class RefactorMenuItems extends CompoundContributionItem {
private static ImageDescriptor RENAME =
imageRegistry().getDescriptor(CEYLON_RENAME);
private static ImageDescriptor CHANGE =
imageRegistry().getDescriptor(CEYLON_CHANGE);
private static ImageDescriptor COMP_CHANGE =
imageRegistry().getDescriptor(CEYLON_COMPOSITE_CHANGE);
private static ImageDescriptor MOVE =
imageRegistry().getDescriptor(CEYLON_MOVE);
private static ImageDescriptor IMPORT =
imageRegistry().getDescriptor(CEYLON_IMPORT);
private static ImageDescriptor REORDER =
imageRegistry().getDescriptor(CEYLON_REORDER);
public RefactorMenuItems() {}
public RefactorMenuItems(String id) {
super(id);
}
@Override
public IContributionItem[] getContributionItems() {
IContributionItem[] items = getItems(getCurrentEditor());
if (collapseMenuItems(getParent())) {
MenuManager submenu = new MenuManager("Refactor");
submenu.setActionDefinitionId(CeylonEditor.REFACTOR_MENU_ID);
for (IContributionItem item: items) {
submenu.add(item);
}
return new IContributionItem[] { submenu };
}
else {
return items;
}
}
private IContributionItem[] getItems(IEditorPart editor) {
return new IContributionItem[] {
new DynamicMenuItem(PLUGIN_ID + ".action.rename",
"&Rename...",
editorAvailable(editor)
&& new RenameRefactoring(editor).getEnabled(),
RENAME),
new DynamicMenuItem(PLUGIN_ID + ".action.enterAlias",
"Enter Import &Alias...",
editorAvailable(editor)
&& new EnterAliasRefactoring(editor).getEnabled(),
IMPORT),
new Separator(),
new DynamicMenuItem(PLUGIN_ID + ".action.changeParameters",
"Change Parameter &List...",
editorAvailable(editor)
&& new ChangeParametersRefactoring(editor).getEnabled(),
REORDER),
new Separator(),
new DynamicMenuItem(PLUGIN_ID + ".action.inline",
"&Inline...",
editorAvailable(editor)
&& newEclipseInlineRefactoring_.newEclipseInlineRefactoring(editor) != null,
COMP_CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.extractValue",
"Extract &Value...",
editorAvailable(editor)
&& refactorJ2C().newExtractValueRefactoring(editor).getEnabled(),
CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.extractFunction",
"Extract &Function...",
editorAvailable(editor)
&& refactorJ2C().newExtractFunctionRefactoring(editor).getEnabled(),
CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.extractInterface",
"Extract Interface...",
editorAvailable(editor)
&& new ExtractInterfaceRefactoring(editor).getEnabled(),
CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.extractParameter",
"Extract &Parameter...",
editorAvailable(editor)
&& refactorJ2C().newExtractParameterRefactoring(editor).getEnabled(),
CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.collectParameters",
"&Collect Parameters...",
editorAvailable(editor)
&& new CollectParametersRefactoring(editor).getEnabled(),
COMP_CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.createAlias",
"Introduce &Type Alias...",
editorAvailable(editor)
&& new AliasRefactoring(editor).getEnabled(),
COMP_CHANGE),
new Separator(),
new DynamicMenuItem(PLUGIN_ID + ".action.invertBoolean",
"Invert &Boolean...",
editorAvailable(editor)
&& new InvertBooleanRefactoring(editor).getEnabled(),
COMP_CHANGE),
new Separator(),
new DynamicMenuItem(PLUGIN_ID + ".action.moveOut",
"Move &Out...",
editorAvailable(editor)
&& new MoveOutRefactoring(editor).getEnabled(),
RefactorMenuItems.COMP_CHANGE),
new DynamicMenuItem(PLUGIN_ID + ".action.makeReceiver",
"Make R&eceiver...",
editorAvailable(editor)
&& new MakeReceiverRefactoring(editor).getEnabled(),
COMP_CHANGE),
new Separator(),
new DynamicMenuItem(PLUGIN_ID + ".action.moveDeclarationToNewUnit",
"Move to New &Source File...",
new MoveToNewUnitHandler().isEnabled(),
MOVE),
new DynamicMenuItem(PLUGIN_ID + ".action.moveDeclarationToUnit",
"&Move to Source File...",
new MoveToUnitHandler().isEnabled(),
MOVE),
};
}
private static boolean editorAvailable(IEditorPart editor) {
if (editor instanceof CeylonEditor) {
CeylonEditor ceylonEditor = (CeylonEditor) editor;
return ceylonEditor.getParseController()
.getTypecheckedRootNode()!=null;
}
else {
return false;
}
}
}