/* This file is part of the OpenJML plugin project. * Copyright (c) 2006-2013 David R. Cok * @author David R. Cok */ package org.jmlspecs.openjml.eclipse; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; // FIXME - needs to be changed to Eclipse 4.2 /** This class and its inner classes implement the various utilities * that are defined when a right-mouse click is performed on menu items * in the Package Navigator and other similar Views. The class names * must be in synch with the information in the plug-in definition. */ abstract public class PopupActions implements IObjectActionDelegate { /** A cached value of the most recent selection */ protected ISelection selection; /** A cached value of the shell */ protected Shell shell; /** A cached value of the utilities object */ protected Utils utils = Activator.utils(); /** The method that is called when the menu item is activated. */ @Override abstract public void run(IAction action); /* * (non-Javadoc) * * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, * org.eclipse.jface.viewers.ISelection) */ @Override public void selectionChanged(IAction action, ISelection selection) { this.selection = selection; } /* * (non-Javadoc) * * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, * org.eclipse.ui.IWorkbenchPart) */ @Override public void setActivePart(IAction action, IWorkbenchPart targetPart) { this.shell = targetPart.getSite().getShell(); } /** This class implements the 'EnableNature' action, which adds the * JML Natures to a Java Project. */ public static class EnableJMLNature extends PopupActions { // This is all done in the UI thread with no progress @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Enable JML context action initiated"); //$NON-NLS-1$ } utils.changeJmlNatureSelection(true,selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.EnableJML",e); //$NON-NLS-1$ } } } /** This class implements the 'DeleteNature' action, which removes * the JML Nature from a Java Project. This menu item * is only enabled for Java Projects. */ public static class DisableJMLNature extends PopupActions { // This is all done in the UI thread with no progress @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Disable JML context action initiated"); //$NON-NLS-1$ } utils.changeJmlNatureSelection(false,selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.DisableJML",e); //$NON-NLS-1$ } } } /** This class implements the action of type-checking JML for * a resource (recursively, for containers). */ public static class CheckJML extends PopupActions { @Override public void run(IAction action) { try { if (Options.uiverboseness) { Log.log("Type-check JML context action initiated"); //$NON-NLS-1$ } utils.checkSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.CheckJML",e); //$NON-NLS-1$ } } } /** This class implements the action of static checking for * a resource (recursively, for containers). */ public static class CheckESC extends PopupActions { @Override public void run(IAction action) { try { if (Options.uiverboseness) { Log.log("ESC context action initiated"); //$NON-NLS-1$ } utils.checkESCSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.CheckESC",e); //$NON-NLS-1$ } } } /** This class implements the action of compiling runtime checks for * a resource (recursively, for containers). */ public static class RAC extends PopupActions { @Override public void run(IAction action) { try{ if (Options.uiverboseness) { Log.log("RAC context action initiated"); //$NON-NLS-1$ } utils.racSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.RAC",e); //$NON-NLS-1$ } } } /** * This action enables selected resources for RAC compilation. * @author David Cok */ static public class EnableForRAC extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Mark For RAC context action initiated"); //$NON-NLS-1$ } utils.racMark(true,selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.EnableForRac",e); //$NON-NLS-1$ } } } /** * This action disables selected resources from RAC compilation. * @author David Cok */ static public class DisableForRAC extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Unmark For RAC context action initiated"); //$NON-NLS-1$ } utils.racMark(false,selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.DisableForRac",e); //$NON-NLS-1$ } } } /** * This action opens a dialog enabling choosing the files for RAC. * @author David Cok */ static public class ChooseForRAC extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Choose For RAC action initiated"); //$NON-NLS-1$ } utils.racChoose(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.ChooseForRac",e); //$NON-NLS-1$ } } } /** * This action deletes RAC-compiled class files. * @author David Cok */ static public class ClearForRAC extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Clear RAC Marks context action initiated"); //$NON-NLS-1$ } utils.racClear(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.ClearForRac",e); //$NON-NLS-1$ } } } /** This class implements the action of deleting all the JML markers * in everything selected (recursively, for containers). It is completed * in the UI thread, without a progress monitor. */ public static class DeleteJMLMarkers extends PopupActions { @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Delete Markers context action initiated"); //$NON-NLS-1$ } utils.deleteMarkersInSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.DeleteJMLMarkers",e); //$NON-NLS-1$ } } } /** * This action adds selected folders to the specs path. * @author David Cok */ static public class AddToSpecsPath extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Add To Specs Path context action initiated"); //$NON-NLS-1$ } utils.addSelectionToSpecsPath(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.AddToSpecsPath",e); //$NON-NLS-1$ } } } /** * This action removes selected folders from the specs path. * @author David Cok */ static public class RemoveFromSpecsPath extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Remove From Specs Path context action initiated"); //$NON-NLS-1$ } utils.removeSelectionFromSpecsPath(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.RemoveFromSpecsPath",e); //$NON-NLS-1$ } } } /** * This action puts up a dialog that allows manipulation of the specs path. */ static public class EditPaths extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Edit Paths action initiated"); //$NON-NLS-1$ } utils.manipulateSpecsPath(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"MenuActions.SpecsPath",e); //$NON-NLS-1$ } } } /** * This action puts up a dialog that shows the class, source, specs paths. * @author David Cok */ static public class ShowPaths extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Show Paths action initiated"); //$NON-NLS-1$ } utils.showPaths(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"MenuActions.ShowPaths",e); //$NON-NLS-1$ } } } /** * This action opens an editor containing the specifications file * for the selected Java classes. * * @author David Cok * */ static public class SpecsEditor extends PopupActions { // This is done in the UI thread. @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("Specs Editor context action initiated"); //$NON-NLS-1$ } utils.openSpecEditorForSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"MenuActions.SpecsEditor",e); //$NON-NLS-1$ } } } /** This class implements the action of popping up a dialog to * show specifications of a Java element. */ public static class ShowSpecs extends PopupActions { @Override public void run(IAction action) { try{ if (Options.uiverboseness) { Log.log("Show Specifications context action initiated"); //$NON-NLS-1$ } utils.showSpecsForSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.ShowSpecs",e); //$NON-NLS-1$ } } } /** This class implements the action of popping up a dialog to * show the counterexample for a Java method. */ public static class ProofInformation extends PopupActions { @Override public void run(IAction action) { try { if (Options.uiverboseness) { Log.log("Show Proof Information context action initiated"); //$NON-NLS-1$ } utils.showProofInfoForSelection(selection,null,shell,false); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.ShowCounterexample",e); //$NON-NLS-1$ } } } /** This class implements the action of popping up a dialog to * show the counterexample for a Java method. */ public static class ShowCounterexampleValue extends PopupActions { @Override public void run(IAction action) { try { if (Options.uiverboseness) { Log.log("Show Counterexample action initiated"); //$NON-NLS-1$ } utils.showCEValueForTextSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.ShowCounterexampleValue",e); //$NON-NLS-1$ } } } /** * This action generates jmldoc documentation for selected projects (and * for projects whose elements are selected). * @author David Cok */ static public class JmlDoc extends PopupActions { @Override public final void run(final IAction action) { try { if (Options.uiverboseness) { Log.log("JML doc context action initiated"); //$NON-NLS-1$ } utils.showMessageInUI(shell, "OpenJML - Not Yet Implemented", //$NON-NLS-1$ "jmldoc is not yet implemented"); //$NON-NLS-1$ if (false) utils.jmldocSelection(selection,null,shell); } catch (Exception e) { utils.topLevelException(shell,"PopupActions.JmlDoc",e); //$NON-NLS-1$ } } } }