Package org.erlide.ui.internal.information

Source Code of org.erlide.ui.internal.information.OpenDeclarationAction

package org.erlide.ui.internal.information;

import org.eclipse.jface.action.Action;
import org.eclipse.ui.PartInitException;
import org.erlide.engine.model.root.IErlElement;
import org.erlide.engine.services.search.OpenResult;
import org.erlide.ui.ErlideImage;
import org.erlide.ui.actions.OpenUtils;
import org.erlide.ui.editors.erl.AbstractErlangEditor;
import org.erlide.ui.editors.util.EditorUtility;
import org.erlide.ui.internal.ErlBrowserInformationControlInput;
import org.erlide.ui.util.eclipse.text.BrowserInformationControl;
import org.erlide.ui.views.EdocView;
import org.erlide.util.ErlLogger;

/**
* Action that opens the current hover input element.
*
* @since 3.4
*/
public final class OpenDeclarationAction extends Action {
    private final BrowserInformationControl fInfoControl;
    private final EdocView edocView;

    public OpenDeclarationAction(final BrowserInformationControl infoControl,
            final AbstractErlangEditor editor) {
        fInfoControl = infoControl;
        edocView = null;
        setText("Open declaration");
        ErlideImage.setLocalImageDescriptors(this, "goto_input.gif");
    }

    public OpenDeclarationAction(final EdocView edocView) {
        this.edocView = edocView;
        fInfoControl = null;
        setText("Open declaration");
        ErlideImage.setLocalImageDescriptors(this, "goto_input.gif");
    }

    /*
     * @see org.eclipse.jface.action.Action#run()
     */
    @Override
    public void run() {
        ErlBrowserInformationControlInput input = null;
        if (fInfoControl != null) {
            input = (ErlBrowserInformationControlInput) fInfoControl.getInput();
            fInfoControl.notifyDelayedInputChange(null);
            fInfoControl.dispose();
        } else if (edocView != null) {
            input = edocView.getInput();
        }
        if (input != null) {
            // TODO: add hover location to editor navigation history?
            try {
                final Object element = input.getInputElement();
                if (element instanceof IErlElement) {
                    EditorUtility.openElementInEditor(element, true);
                } else if (element instanceof OpenResult) {
                    final OpenResult or = (OpenResult) element;
                    try {
                        final AbstractErlangEditor editor = input.getEditor();
                        new OpenUtils().openOpenResult(editor, editor.getModule(), -1,
                                null, or, null);
                    } catch (final Exception e) {
                        ErlLogger.error(e);
                    }
                }
            } catch (final PartInitException e) {
                ErlLogger.error(e);
            }
        }
    }
}
TOP

Related Classes of org.erlide.ui.internal.information.OpenDeclarationAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.