package com.redhat.ceylon.eclipse.code.open;
import static com.redhat.ceylon.eclipse.code.editor.Navigation.gotoDeclaration;
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.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.ITextEditor;
import com.redhat.ceylon.model.typechecker.model.Declaration;
import com.redhat.ceylon.eclipse.ui.CeylonPlugin;
import com.redhat.ceylon.eclipse.ui.CeylonResources;
public class OpenDeclarationAction extends Action {
private static final ImageDescriptor ICON =
CeylonPlugin.imageRegistry()
.getDescriptor(CeylonResources.CEYLON_OPEN_DECLARATION);
private final IEditorPart editor;
public OpenDeclarationAction(IEditorPart editor) {
this("Open Declaration...", editor);
}
public OpenDeclarationAction(String text, IEditorPart editor) {
super(text);
this.editor = editor;
setActionDefinitionId(PLUGIN_ID
+ ".action.openDeclaration");
setImageDescriptor(ICON);
}
@Override
public void run() {
OpenDeclarationDialog dialog =
new OpenDeclarationDialog(true, true,
getWorkbench()
.getActiveWorkbenchWindow()
.getShell(),
"Open Declaration",
"&Type part of a name, with wildcard *, or a camel hump pattern, with . to display members:",
"&Select one or more declarations to open in editors:");
if (editor instanceof ITextEditor) {
dialog.setInitialPattern(getSelectionText((ITextEditor) editor));
}
dialog.open();
Declaration[] results = dialog.getResult();
if (results != null) {
for (int i=0; i<results.length; i++) {
gotoDeclaration(results[i]);
}
}
}
}