package net.sourceforge.c4jplugin.internal.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.sourceforge.c4jplugin.C4JActivator; import net.sourceforge.c4jplugin.internal.core.ContractReferenceModel; import net.sourceforge.c4jplugin.internal.util.ExceptionHandler; import net.sourceforge.c4jplugin.internal.util.OpenContractHierarchyUtil; import net.sourceforge.c4jplugin.internal.util.SelectionConverter; import net.sourceforge.c4jplugin.internal.wizards.NewContractWizard; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IImportDeclaration; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jdt.internal.corext.util.JavaModelUtil; import org.eclipse.jdt.internal.ui.actions.ActionUtil; import org.eclipse.jdt.internal.ui.browsing.LogicalPackage; import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; public class NewContractAction implements IObjectActionDelegate { public void run(IAction action) { IWizard wizard = new NewContractWizard(); Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); } public void setActivePart(IAction action, IWorkbenchPart targetPart) { if (!action.isEnabled()) return; if (targetPart instanceof JavaEditor) { IJavaElement input = SelectionConverter.getInput((JavaEditor)targetPart); action.setEnabled(isContractable(input)); } } public void selectionChanged(IAction action, ISelection selection) { if (!action.isEnabled()) return; if (!(selection instanceof IStructuredSelection) || (selection == null)) { action.setEnabled(false); return; } IStructuredSelection sel = (IStructuredSelection)selection; if (sel.isEmpty()) { action.setEnabled(false); return; } // due to plugin.xml, selection is of type IJavaElement IJavaElement elem = (IJavaElement)sel.getFirstElement(); action.setEnabled(isContractable(elem)); } private boolean isContractable(IJavaElement elem) { if (elem == null) return false; try { Boolean isContracted = ContractReferenceModel.isContracted(elem.getUnderlyingResource()); if ((isContracted == null || isContracted == false) || ContractReferenceModel.isContract(elem.getUnderlyingResource())) { return false; } } catch (JavaModelException e) { return false; } return true; } }