| /******************************************************************************* |
| * Copyright (c) 2005, 2009 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.jsdt.internal.corext.refactoring; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.dialogs.ProgressMonitorDialog; |
| import org.eclipse.jface.operation.IRunnableContext; |
| import org.eclipse.jface.text.ITextSelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.ltk.core.refactoring.Refactoring; |
| import org.eclipse.ltk.core.refactoring.RefactoringCore; |
| import org.eclipse.ltk.core.refactoring.RefactoringStatus; |
| import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry; |
| import org.eclipse.ltk.core.refactoring.participants.CopyRefactoring; |
| import org.eclipse.ltk.core.refactoring.participants.DeleteRefactoring; |
| import org.eclipse.ltk.ui.refactoring.RefactoringWizard; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.wst.jsdt.core.IClassFile; |
| import org.eclipse.wst.jsdt.core.IField; |
| import org.eclipse.wst.jsdt.core.IFunction; |
| import org.eclipse.wst.jsdt.core.IJavaScriptElement; |
| import org.eclipse.wst.jsdt.core.IJavaScriptProject; |
| import org.eclipse.wst.jsdt.core.IJavaScriptUnit; |
| import org.eclipse.wst.jsdt.core.ILocalVariable; |
| import org.eclipse.wst.jsdt.core.IMember; |
| import org.eclipse.wst.jsdt.core.IPackageFragment; |
| import org.eclipse.wst.jsdt.core.IPackageFragmentRoot; |
| import org.eclipse.wst.jsdt.core.IType; |
| import org.eclipse.wst.jsdt.core.ITypeRoot; |
| import org.eclipse.wst.jsdt.core.JavaScriptModelException; |
| import org.eclipse.wst.jsdt.core.dom.JavaScriptUnit; |
| import org.eclipse.wst.jsdt.internal.corext.fix.CleanUpRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.base.RefactoringStatusCodes; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.ConvertAnonymousToNestedRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.InlineConstantRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.InlineMethodRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.InlineTempRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.IntroduceFactoryRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.IntroduceIndirectionRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.IntroduceParameterRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.code.ReplaceInvocationsRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.rename.JavaRenameRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.rename.RenameResourceProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.JavaCopyProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.JavaCopyRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.JavaDeleteProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.JavaDeleteRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.JavaMoveProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.ReorgPolicyFactory; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.IReorgPolicy.ICopyPolicy; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.reorg.IReorgPolicy.IMovePolicy; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.sef.SelfEncapsulateFieldRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.ChangeSignatureRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.ChangeTypeRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.ExtractSupertypeProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.ExtractSupertypeRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.JavaMoveRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.MoveInnerToTopRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.MoveInstanceMethodProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.MoveInstanceMethodRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.PullUpRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.PullUpRefactoringProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.PushDownRefactoring; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.PushDownRefactoringProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.UseSuperTypeProcessor; |
| import org.eclipse.wst.jsdt.internal.corext.refactoring.structure.UseSuperTypeRefactoring; |
| import org.eclipse.wst.jsdt.internal.ui.actions.ActionMessages; |
| import org.eclipse.wst.jsdt.internal.ui.fix.CleanUpRefactoringWizard; |
| import org.eclipse.wst.jsdt.internal.ui.fix.ICleanUp; |
| import org.eclipse.wst.jsdt.internal.ui.preferences.JavaPreferencesSettings; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.ChangeSignatureWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.ChangeTypeWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.ConvertAnonymousToNestedWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.ExtractSupertypeWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.InlineConstantWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.InlineTempWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.IntroduceFactoryWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.IntroduceIndirectionWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.IntroduceParameterWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.MoveInnerToTopWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.MoveInstanceMethodWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.MoveMembersWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.PullUpWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.PushDownWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.RefactoringExecutionHelper; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.RefactoringMessages; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.RefactoringSaveHelper; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.UseSupertypeWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.UserInterfaceStarter; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.actions.RefactoringStarter; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.code.InlineMethodWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.code.ReplaceInvocationsWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.CreateTargetQueries; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.DeleteUserInterfaceManager; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.NewNameQueries; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.RenameUserInterfaceManager; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.ReorgCopyWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.ReorgMoveWizard; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.reorg.ReorgQueries; |
| import org.eclipse.wst.jsdt.internal.ui.refactoring.sef.SelfEncapsulateFieldWizard; |
| import org.eclipse.wst.jsdt.internal.ui.util.ExceptionHandler; |
| import org.eclipse.wst.jsdt.ui.actions.SelectionDispatchAction; |
| import org.eclipse.wst.jsdt.ui.refactoring.RenameSupport; |
| |
| /** |
| * Helper class to run refactorings from action code. |
| * <p> |
| * This class has been introduced to decouple actions from the refactoring code, |
| * in order not to eagerly load refactoring classes during action |
| * initialization. |
| * </p> |
| * |
| * |
| */ |
| public final class RefactoringExecutionStarter { |
| |
| private static RenameSupport createRenameSupport(IJavaScriptElement element, String newName, int flags) throws CoreException { |
| switch (element.getElementType()) { |
| case IJavaScriptElement.JAVASCRIPT_PROJECT: |
| return RenameSupport.create((IJavaScriptProject) element, newName, flags); |
| case IJavaScriptElement.PACKAGE_FRAGMENT_ROOT: |
| return RenameSupport.create((IPackageFragmentRoot) element, newName); |
| case IJavaScriptElement.PACKAGE_FRAGMENT: |
| return RenameSupport.create((IPackageFragment) element, newName, flags); |
| case IJavaScriptElement.JAVASCRIPT_UNIT: |
| return RenameSupport.create((IJavaScriptUnit) element, newName, flags); |
| case IJavaScriptElement.TYPE: |
| return RenameSupport.create((IType) element, newName, flags); |
| case IJavaScriptElement.METHOD: |
| final IFunction method= (IFunction) element; |
| if (method.isConstructor()) |
| return createRenameSupport(method.getDeclaringType(), newName, flags); |
| else |
| return RenameSupport.create((IFunction) element, newName, flags); |
| case IJavaScriptElement.FIELD: |
| return RenameSupport.create((IField) element, newName, flags); |
| case IJavaScriptElement.LOCAL_VARIABLE: |
| return RenameSupport.create((ILocalVariable) element, newName, flags); |
| } |
| return null; |
| } |
| |
| public static void startChangeSignatureRefactoring(final IFunction method, final SelectionDispatchAction action, final Shell shell) throws JavaScriptModelException { |
| if (!RefactoringAvailabilityTester.isChangeSignatureAvailable(method)) |
| return; |
| final ChangeSignatureRefactoring refactoring= new ChangeSignatureRefactoring(method); |
| final UserInterfaceStarter starter= new UserInterfaceStarter() { |
| |
| public final boolean activate(final Refactoring ref, final Shell parent, final int saveMode) throws CoreException { |
| final RefactoringStatus status= ref.checkInitialConditions(new NullProgressMonitor()); |
| if (status.hasFatalError()) { |
| final RefactoringStatusEntry entry= status.getEntryMatchingSeverity(RefactoringStatus.FATAL); |
| if (entry.getCode() == RefactoringStatusCodes.OVERRIDES_ANOTHER_METHOD || entry.getCode() == RefactoringStatusCodes.METHOD_DECLARED_IN_INTERFACE) { |
| |
| String message= entry.getMessage(); |
| final Object element= entry.getData(); |
| message= message + RefactoringMessages.RefactoringErrorDialogUtil_okToPerformQuestion; |
| if (element != null && MessageDialog.openQuestion(shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, message)) { |
| |
| final IStructuredSelection selection= new StructuredSelection(element); |
| // TODO: should not hijack this |
| // ModifiyParametersAction. |
| // The action is set up on an editor, but we use it |
| // as if it were set up on a ViewPart. |
| boolean wasEnabled= action.isEnabled(); |
| action.selectionChanged(selection); |
| if (action.isEnabled()) { |
| action.run(selection); |
| } else { |
| MessageDialog.openInformation(shell, ActionMessages.ModifyParameterAction_problem_title, ActionMessages.ModifyParameterAction_problem_message); |
| } |
| action.setEnabled(wasEnabled); |
| } |
| return false; |
| } |
| } |
| return super.activate(ref, parent, saveMode); |
| } |
| }; |
| starter.initialize(new ChangeSignatureWizard(refactoring)); |
| try { |
| starter.activate(refactoring, shell, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } catch (CoreException e) { |
| ExceptionHandler.handle(e, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringMessages.RefactoringStarter_unexpected_exception); |
| } |
| } |
| |
| public static void startChangeTypeRefactoring(final IJavaScriptUnit unit, final Shell shell, final int offset, final int length) throws JavaScriptModelException { |
| final ChangeTypeRefactoring refactoring= new ChangeTypeRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(refactoring, new ChangeTypeWizard(refactoring), shell, RefactoringMessages.ChangeTypeAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startCleanupRefactoring(IJavaScriptUnit[] cus, ICleanUp[] cleanUps, Shell shell, boolean showWizard, String actionName) throws InvocationTargetException, JavaScriptModelException { |
| final CleanUpRefactoring refactoring= new CleanUpRefactoring(actionName); |
| for (int i= 0; i < cus.length; i++) { |
| refactoring.addCompilationUnit(cus[i]); |
| } |
| |
| if (!showWizard) { |
| for (int i= 0; i < cleanUps.length; i++) { |
| refactoring.addCleanUp(cleanUps[i]); |
| } |
| |
| IRunnableContext context; |
| if (refactoring.getCompilationUnits().length > 1) { |
| context= new ProgressMonitorDialog(shell); |
| } else { |
| context= PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
| } |
| |
| RefactoringExecutionHelper helper= new RefactoringExecutionHelper(refactoring, IStatus.INFO, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES, shell, context); |
| try { |
| helper.perform(true, true); |
| } catch (InterruptedException e) { |
| } |
| } else { |
| CleanUpRefactoringWizard refactoringWizard= new CleanUpRefactoringWizard(refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE); |
| RefactoringStarter starter= new RefactoringStarter(); |
| starter.activate(refactoring, refactoringWizard, shell, actionName, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| } |
| |
| public static void startConvertAnonymousRefactoring(final IJavaScriptUnit unit, final int offset, final int length, final Shell shell) throws JavaScriptModelException { |
| final ConvertAnonymousToNestedRefactoring refactoring= new ConvertAnonymousToNestedRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(refactoring, new ConvertAnonymousToNestedWizard(refactoring), shell, RefactoringMessages.ConvertAnonymousToNestedAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startCopyRefactoring(IResource[] resources, IJavaScriptElement[] javaElements, Shell shell) throws JavaScriptModelException { |
| ICopyPolicy copyPolicy= ReorgPolicyFactory.createCopyPolicy(resources, javaElements); |
| if (copyPolicy.canEnable()) { |
| JavaCopyProcessor processor= new JavaCopyProcessor(copyPolicy); |
| CopyRefactoring refactoring= new JavaCopyRefactoring(processor); |
| RefactoringWizard wizard= new ReorgCopyWizard(refactoring); |
| processor.setNewNameQueries(new NewNameQueries(wizard)); |
| processor.setReorgQueries(new ReorgQueries(wizard)); |
| new RefactoringStarter().activate(refactoring, wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_NOTHING); |
| } |
| } |
| |
| public static void startCutRefactoring(final Object[] elements, final Shell shell) throws CoreException, InterruptedException, InvocationTargetException { |
| final JavaDeleteProcessor processor= new JavaDeleteProcessor(elements); |
| processor.setSuggestGetterSetterDeletion(false); |
| processor.setQueries(new ReorgQueries(shell)); |
| new RefactoringExecutionHelper(new JavaDeleteRefactoring(processor), RefactoringCore.getConditionCheckingFailedSeverity(), RefactoringSaveHelper.SAVE_NOTHING, shell, new ProgressMonitorDialog(shell)).perform(false, false); |
| } |
| |
| public static void startDeleteRefactoring(final Object[] elements, final Shell shell) throws CoreException { |
| final DeleteRefactoring refactoring= new JavaDeleteRefactoring(new JavaDeleteProcessor(elements)); |
| DeleteUserInterfaceManager.getDefault().getStarter(refactoring).activate(refactoring, shell, RefactoringSaveHelper.SAVE_NOTHING); |
| } |
| |
| public static void startExtractSupertypeRefactoring(final IMember[] members, final Shell shell) throws JavaScriptModelException { |
| if (!RefactoringAvailabilityTester.isExtractSupertypeAvailable(members)) |
| return; |
| IJavaScriptProject project= null; |
| if (members != null && members.length > 0) |
| project= members[0].getJavaScriptProject(); |
| final ExtractSupertypeRefactoring refactoring= new ExtractSupertypeRefactoring(new ExtractSupertypeProcessor(members, JavaPreferencesSettings.getCodeGenerationSettings(project))); |
| new RefactoringStarter().activate(refactoring, new ExtractSupertypeWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static boolean startInlineConstantRefactoring(final IJavaScriptUnit unit, final JavaScriptUnit node, final int offset, final int length, final Shell shell) throws JavaScriptModelException { |
| final InlineConstantRefactoring refactoring= new InlineConstantRefactoring(unit, node, offset, length); |
| if (! refactoring.checkStaticFinalConstantNameSelected().hasFatalError()) { |
| new RefactoringStarter().activate(refactoring, new InlineConstantWizard(refactoring), shell, RefactoringMessages.InlineConstantAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| return true; |
| } |
| return false; |
| } |
| |
| public static boolean startInlineMethodRefactoring(final ITypeRoot typeRoot, final JavaScriptUnit node, final int offset, final int length, final Shell shell) throws JavaScriptModelException { |
| final InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(typeRoot, node, offset, length); |
| if (refactoring != null) { |
| new RefactoringStarter().activate(refactoring, new InlineMethodWizard(refactoring), shell, RefactoringMessages.InlineMethodAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| return true; |
| } |
| return false; |
| } |
| |
| public static boolean startInlineTempRefactoring(final IJavaScriptUnit unit, JavaScriptUnit node, final ITextSelection selection, final Shell shell) throws JavaScriptModelException { |
| final InlineTempRefactoring refactoring= new InlineTempRefactoring(unit, node, selection.getOffset(), selection.getLength()); |
| if (! refactoring.checkIfTempSelected().hasFatalError()) { |
| new RefactoringStarter().activate(refactoring, new InlineTempWizard(refactoring), shell, RefactoringMessages.InlineTempAction_inline_temp, RefactoringSaveHelper.SAVE_NOTHING); |
| return true; |
| } |
| return false; |
| } |
| |
| public static void startIntroduceFactoryRefactoring(final IJavaScriptUnit unit, final ITextSelection selection, final Shell shell) throws JavaScriptModelException { |
| final IntroduceFactoryRefactoring refactoring= new IntroduceFactoryRefactoring(unit, selection.getOffset(), selection.getLength()); |
| new RefactoringStarter().activate(refactoring, new IntroduceFactoryWizard(refactoring, RefactoringMessages.IntroduceFactoryAction_use_factory), shell, RefactoringMessages.IntroduceFactoryAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startIntroduceIndirectionRefactoring(final IClassFile file, final int offset, final int length, final Shell shell) throws JavaScriptModelException { |
| final IntroduceIndirectionRefactoring refactoring= new IntroduceIndirectionRefactoring(file, offset, length); |
| new RefactoringStarter().activate(refactoring, new IntroduceIndirectionWizard(refactoring, RefactoringMessages.IntroduceIndirectionAction_dialog_title), shell, RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startIntroduceIndirectionRefactoring(final IJavaScriptUnit unit, final int offset, final int length, final Shell shell) throws JavaScriptModelException { |
| final IntroduceIndirectionRefactoring refactoring= new IntroduceIndirectionRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(refactoring, new IntroduceIndirectionWizard(refactoring, RefactoringMessages.IntroduceIndirectionAction_dialog_title), shell, RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startIntroduceIndirectionRefactoring(final IFunction method, final Shell shell) throws JavaScriptModelException { |
| final IntroduceIndirectionRefactoring refactoring= new IntroduceIndirectionRefactoring(method); |
| new RefactoringStarter().activate(refactoring, new IntroduceIndirectionWizard(refactoring, RefactoringMessages.IntroduceIndirectionAction_dialog_title), shell, RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startIntroduceParameter(IJavaScriptUnit unit, int offset, int length, Shell shell) throws JavaScriptModelException { |
| final IntroduceParameterRefactoring refactoring= new IntroduceParameterRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(refactoring, new IntroduceParameterWizard(refactoring), shell, RefactoringMessages.IntroduceParameterAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startMoveInnerRefactoring(final IType type, final Shell shell) throws JavaScriptModelException { |
| if (!RefactoringAvailabilityTester.isMoveInnerAvailable(type)) |
| return; |
| final MoveInnerToTopRefactoring refactoring= new MoveInnerToTopRefactoring(type, JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaScriptProject())); |
| new RefactoringStarter().activate(refactoring, new MoveInnerToTopWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startMoveMethodRefactoring(final IFunction method, final Shell shell) throws JavaScriptModelException { |
| final MoveInstanceMethodRefactoring refactoring= new MoveInstanceMethodRefactoring(new MoveInstanceMethodProcessor(method, JavaPreferencesSettings.getCodeGenerationSettings(method.getJavaScriptProject()))); |
| new RefactoringStarter().activate(refactoring, new MoveInstanceMethodWizard(refactoring), shell, RefactoringMessages.MoveInstanceMethodAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startMoveRefactoring(final IResource[] resources, final IJavaScriptElement[] elements, final Shell shell) throws JavaScriptModelException { |
| IMovePolicy policy= ReorgPolicyFactory.createMovePolicy(resources, elements); |
| if (policy.canEnable()) { |
| final JavaMoveProcessor processor= new JavaMoveProcessor(policy); |
| final JavaMoveRefactoring refactoring= new JavaMoveRefactoring(processor); |
| final RefactoringWizard wizard= new ReorgMoveWizard(refactoring); |
| processor.setCreateTargetQueries(new CreateTargetQueries(wizard)); |
| processor.setReorgQueries(new ReorgQueries(wizard)); |
| new RefactoringStarter().activate(refactoring, wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_ALL); |
| } |
| } |
| |
| public static void startMoveStaticMembersRefactoring(final IMember[] members, final Shell shell) throws JavaScriptModelException { |
| if (!RefactoringAvailabilityTester.isMoveStaticAvailable(members)) |
| return; |
| final Set set= new HashSet(); |
| set.addAll(Arrays.asList(members)); |
| final IMember[] elements= (IMember[]) set.toArray(new IMember[set.size()]); |
| IJavaScriptProject project= null; |
| if (elements.length > 0) |
| project= elements[0].getJavaScriptProject(); |
| final JavaMoveRefactoring refactoring= new JavaMoveRefactoring(new MoveStaticMembersProcessor(elements, JavaPreferencesSettings.getCodeGenerationSettings(project))); |
| new RefactoringStarter().activate(refactoring, new MoveMembersWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_NON_JAVA_UPDATES); |
| } |
| |
| public static void startPullUpRefactoring(final IMember[] members, final Shell shell) throws JavaScriptModelException { |
| if (!RefactoringAvailabilityTester.isPullUpAvailable(members)) |
| return; |
| IJavaScriptProject project= null; |
| if (members != null && members.length > 0) |
| project= members[0].getJavaScriptProject(); |
| final PullUpRefactoring refactoring= new PullUpRefactoring(new PullUpRefactoringProcessor(members, JavaPreferencesSettings.getCodeGenerationSettings(project))); |
| new RefactoringStarter().activate(refactoring, new PullUpWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startPushDownRefactoring(final IMember[] members, final Shell shell) throws JavaScriptModelException { |
| if (!RefactoringAvailabilityTester.isPushDownAvailable(members)) |
| return; |
| final PushDownRefactoring refactoring= new PushDownRefactoring(new PushDownRefactoringProcessor(members)); |
| new RefactoringStarter().activate(refactoring, new PushDownWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startRenameRefactoring(final IJavaScriptElement element, final Shell shell) throws CoreException { |
| final RenameSupport support= createRenameSupport(element, null, RenameSupport.UPDATE_REFERENCES); |
| if (support != null && support.preCheck().isOK()) |
| support.openDialog(shell); |
| } |
| |
| public static void startRenameResourceRefactoring(final IResource resource, final Shell shell) throws CoreException { |
| final JavaRenameRefactoring refactoring= new JavaRenameRefactoring(new RenameResourceProcessor(resource)); |
| RenameUserInterfaceManager.getDefault().getStarter(refactoring).activate(refactoring, shell, RefactoringSaveHelper.SAVE_ALL); |
| } |
| |
| public static void startReplaceInvocationsRefactoring(final ITypeRoot typeRoot, final int offset, final int length, final Shell shell) throws JavaScriptModelException { |
| final ReplaceInvocationsRefactoring refactoring= new ReplaceInvocationsRefactoring(typeRoot, offset, length); |
| new RefactoringStarter().activate(refactoring, new ReplaceInvocationsWizard(refactoring), shell, RefactoringMessages.ReplaceInvocationsAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startReplaceInvocationsRefactoring(final IFunction method, final Shell shell) throws JavaScriptModelException { |
| final ReplaceInvocationsRefactoring refactoring= new ReplaceInvocationsRefactoring(method); |
| new RefactoringStarter().activate(refactoring, new ReplaceInvocationsWizard(refactoring), shell, RefactoringMessages.ReplaceInvocationsAction_dialog_title, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| public static void startSelfEncapsulateRefactoring(final IField field, final Shell shell) { |
| try { |
| if (!RefactoringAvailabilityTester.isSelfEncapsulateAvailable(field)) |
| return; |
| final SelfEncapsulateFieldRefactoring refactoring= new SelfEncapsulateFieldRefactoring(field); |
| new RefactoringStarter().activate(refactoring, new SelfEncapsulateFieldWizard(refactoring), shell, "", RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); //$NON-NLS-1$ |
| } catch (JavaScriptModelException e) { |
| ExceptionHandler.handle(e, ActionMessages.SelfEncapsulateFieldAction_dialog_title, ActionMessages.SelfEncapsulateFieldAction_dialog_cannot_perform); |
| } |
| } |
| |
| public static void startUseSupertypeRefactoring(final IType type, final Shell shell) throws JavaScriptModelException { |
| final UseSuperTypeRefactoring refactoring= new UseSuperTypeRefactoring(new UseSuperTypeProcessor(type)); |
| new RefactoringStarter().activate(refactoring, new UseSupertypeWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| } |
| |
| private RefactoringExecutionStarter() { |
| // Not for instantiation |
| } |
| |
| // public static void startIntroduceParameterObject(IJavaScriptUnit unit, int offset, int length, Shell shell) throws CoreException { |
| // IJavaScriptElement javaElement= unit.getElementAt(offset); |
| // if (javaElement instanceof IFunction) { |
| // IFunction method= (IFunction) javaElement; |
| // startIntroduceParameterObject(method, shell); |
| // } |
| // } |
| // |
| // public static void startIntroduceParameterObject(IFunction method, Shell shell) throws CoreException { |
| // RefactoringStatus availability= Checks.checkAvailability(method); |
| // if (availability.hasError()){ |
| // MessageDialog.openError(shell, RefactoringMessages.RefactoringExecutionStarter_IntroduceParameterObject_problem_title, RefactoringMessages.RefactoringExecutionStarter_IntroduceParameterObject_problem_description); |
| // return; |
| // } |
| // IntroduceParameterObjectRefactoring refactoring= new IntroduceParameterObjectRefactoring(method); |
| // final RefactoringStatus status= refactoring.checkInitialConditions(new NullProgressMonitor()); |
| // if (status.hasFatalError()) { |
| // final RefactoringStatusEntry entry= status.getEntryMatchingSeverity(RefactoringStatus.FATAL); |
| // if (entry.getCode() == RefactoringStatusCodes.OVERRIDES_ANOTHER_METHOD || entry.getCode() == RefactoringStatusCodes.METHOD_DECLARED_IN_INTERFACE) { |
| // |
| // String message= entry.getMessage(); |
| // final Object element= entry.getData(); |
| // IFunction superMethod= (IFunction) element; |
| // availability= Checks.checkAvailability(superMethod); |
| // if (availability.hasError()){ |
| // MessageDialog.openError(shell, RefactoringMessages.RefactoringExecutionStarter_IntroduceParameterObject_problem_title, RefactoringMessages.RefactoringExecutionStarter_IntroduceParameterObject_problem_description); |
| // return; |
| // } |
| // message= message + RefactoringMessages.RefactoringErrorDialogUtil_okToPerformQuestion; |
| // if (element != null && MessageDialog.openQuestion(shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, message)) { |
| // refactoring=new IntroduceParameterObjectRefactoring(superMethod); |
| // } |
| // else refactoring=null; |
| // } |
| // } |
| // if (refactoring!=null) |
| // new RefactoringStarter().activate(refactoring, new IntroduceParameterObjectWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_JAVA_ONLY_UPDATES); |
| // } |
| } |