package mit.edu.concurrencyrefactorings.popup.actions; import java.lang.reflect.InvocationTargetException; import mit.edu.concurrencyrefactorings.refactorings.ConvertToAtomicLongRefactoring; import mit.edu.concurrencyrefactorings.ui.ConvertToAtomicLongWizard; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.internal.ui.actions.SelectionConverter; import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ltk.ui.refactoring.RefactoringWizard; import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorPart; public class ConvertToAtomicLongEditorAction implements IEditorActionDelegate{ private JavaEditor fEditor; private ITextSelection fTextSelection; @Override public void setActiveEditor(IAction action, IEditorPart targetEditor) { if (targetEditor instanceof JavaEditor) { fEditor = (JavaEditor) targetEditor; } } @Override public void run(IAction action) { IJavaElement[] elements; try { elements = SelectionConverter.codeResolveForked(fEditor, true); if (elements.length == 1 && (elements[0] instanceof IField)) { IField field= (IField) elements[0]; if (isRefactoringAvailableFor(field)) { ConvertToAtomicLongRefactoring refactoring= new ConvertToAtomicLongRefactoring(field); run(new ConvertToAtomicLongWizard(refactoring, "Convert to Atomic Long"), getShell(), "Convert to Atomic Long"); return; } } } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); } MessageDialog.openError(getShell(), "Error ConvertToAtomicLong", "ConvertToAtomicLong not applicable for current selection"); } private boolean isRefactoringAvailableFor(IField field) throws JavaModelException { return field != null && field.exists() && field.isStructureKnown() && !field.getDeclaringType().isAnnotation() && "J".equals(field.getTypeSignature()); } public void run(RefactoringWizard wizard, Shell parent, String dialogTitle) { try { RefactoringWizardOpenOperation operation= new RefactoringWizardOpenOperation(wizard); operation.run(parent, dialogTitle); } catch (InterruptedException exception) { // Do nothing } } private Shell getShell() { return fEditor.getSite().getShell(); } @Override public void selectionChanged(IAction action, ISelection selection) { if (selection instanceof ITextSelection) { fTextSelection = (ITextSelection) selection; } } }