package com.redhat.ceylon.eclipse.code.open;
import static com.redhat.ceylon.eclipse.code.outline.HierarchyView.showHierarchyView;
import static com.redhat.ceylon.eclipse.ui.CeylonPlugin.PLUGIN_ID;
import static com.redhat.ceylon.eclipse.util.EditorUtil.getSelectionText;
import static org.eclipse.ui.PlatformUI.getWorkbench;
import org.eclipse.jface.action.Action;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.texteditor.ITextEditor;
import com.redhat.ceylon.model.typechecker.model.Declaration;
public class OpenDeclarationInHierarchyAction extends Action {
private final IEditorPart editor;
public OpenDeclarationInHierarchyAction(IEditorPart editor) {
this("Open in Type Hierarchy View...", editor);
}
public OpenDeclarationInHierarchyAction(String text, IEditorPart editor) {
super(text);
this.editor = editor;
setActionDefinitionId(PLUGIN_ID
+ ".action.openDeclarationInHierarchy");
// setImageDescriptor(CeylonPlugin.getInstance().getImageRegistry()
// .getDescriptor(CeylonResources.CEYLON_OPEN_DECLARATION));
}
@Override
public void run() {
OpenDeclarationDialog dialog =
new OpenDeclarationDialog(false, true,
getWorkbench()
.getActiveWorkbenchWindow()
.getShell(),
"Open in Type Hierarchy View",
"&Type part of a name, with wildcard *, or a camel hump pattern, with . to display members:",
"&Select a declaration to open in hierarchy view:");
if (editor instanceof ITextEditor) {
dialog.setInitialPattern(getSelectionText((ITextEditor) editor));
}
dialog.open();
Declaration[] results = dialog.getResult();
if (results!=null && results.length>0) {
try {
showHierarchyView().focusOn(results[0]);
}
catch (PartInitException e) {
e.printStackTrace();
}
}
}
}