package net.sourceforge.c4jplugin.internal.ui.actions; import net.sourceforge.c4jplugin.C4JActivator; import net.sourceforge.c4jplugin.internal.core.ContractReferenceModel; import net.sourceforge.c4jplugin.internal.util.SelectionConverter; import org.eclipse.core.resources.IResource; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; public class OpenTargetAction implements IObjectActionDelegate { public void run(IAction action) { IEditorInput editorInput = null; try { editorInput = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput(); } catch (NullPointerException e) { return; } IResource resource = JavaUI.getEditorInputJavaElement(editorInput).getResource(); IResource target = ContractReferenceModel.getTarget(resource); if (target == null) return; IJavaElement element = JavaCore.create(target); try { JavaUI.openInEditor(element); } catch (PartInitException e) { C4JActivator.log(e); } catch (JavaModelException e) { C4JActivator.log(e); } } public void selectionChanged(IAction action, ISelection selection) { } public void setActivePart(IAction action, IWorkbenchPart targetPart) { if (targetPart == null) return; IStructuredSelection selection; try { selection = SelectionConverter.getStructuredSelection(targetPart); } catch (JavaModelException e) { e.printStackTrace(); action.setEnabled(false); return; } if (selection.isEmpty()) { action.setEnabled(false); return; } Object sel = selection.getFirstElement(); if ((sel instanceof IMethod && ContractReferenceModel.isContracted(((IMethod)sel).getCompilationUnit().getResource())) || (sel instanceof ICompilationUnit && ContractReferenceModel.isContracted(((ICompilationUnit)sel).getResource()))) { action.setEnabled(true); } else { action.setEnabled(false); } } }