| /******************************************************************************* |
| * Copyright (c) 2005, 2011 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.jdt.internal.corext.refactoring; |
| |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.swt.widgets.Shell; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| |
| import org.eclipse.core.resources.IResource; |
| |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.dialogs.ProgressMonitorDialog; |
| import org.eclipse.jface.operation.IRunnableContext; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| |
| import org.eclipse.jface.text.ITextSelection; |
| |
| import org.eclipse.ui.PlatformUI; |
| |
| 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.core.refactoring.participants.MoveRefactoring; |
| import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring; |
| import org.eclipse.ltk.ui.refactoring.RefactoringWizard; |
| import org.eclipse.ltk.ui.refactoring.resource.RenameResourceWizard; |
| |
| import org.eclipse.jdt.core.IClassFile; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IField; |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.ILocalVariable; |
| import org.eclipse.jdt.core.IMember; |
| import org.eclipse.jdt.core.IMethod; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.IPackageFragmentRoot; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.ITypeParameter; |
| import org.eclipse.jdt.core.ITypeRoot; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.core.dom.CompilationUnit; |
| import org.eclipse.jdt.core.refactoring.descriptors.ExtractClassDescriptor; |
| import org.eclipse.jdt.core.refactoring.descriptors.IntroduceParameterObjectDescriptor; |
| |
| import org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory; |
| import org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatusCodes; |
| import org.eclipse.jdt.internal.corext.refactoring.code.ConvertAnonymousToNestedRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.InlineConstantRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.InlineMethodRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.InlineTempRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.IntroduceFactoryRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.IntroduceIndirectionRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.IntroduceParameterRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.code.ReplaceInvocationsRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.generics.InferTypeArgumentsRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaCopyProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaDeleteProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.reorg.JavaMoveProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.reorg.ReorgPolicyFactory; |
| import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.ICopyPolicy; |
| import org.eclipse.jdt.internal.corext.refactoring.reorg.IReorgPolicy.IMovePolicy; |
| import org.eclipse.jdt.internal.corext.refactoring.sef.SelfEncapsulateFieldRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.ChangeSignatureProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.ChangeTypeRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractClassRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractInterfaceProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.ExtractSupertypeProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.IntroduceParameterObjectProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.MoveInnerToTopRefactoring; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.MoveInstanceMethodProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.PullUpRefactoringProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.PushDownRefactoringProcessor; |
| import org.eclipse.jdt.internal.corext.refactoring.structure.UseSuperTypeProcessor; |
| import org.eclipse.jdt.internal.corext.util.Messages; |
| |
| import org.eclipse.jdt.ui.actions.SelectionDispatchAction; |
| import org.eclipse.jdt.ui.cleanup.ICleanUp; |
| import org.eclipse.jdt.ui.refactoring.RefactoringSaveHelper; |
| import org.eclipse.jdt.ui.refactoring.RenameSupport; |
| |
| import org.eclipse.jdt.internal.ui.actions.ActionMessages; |
| import org.eclipse.jdt.internal.ui.fix.CleanUpRefactoringWizard; |
| import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings; |
| import org.eclipse.jdt.internal.ui.refactoring.ChangeSignatureWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.ChangeTypeWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.ConvertAnonymousToNestedWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.ExtractClassWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.ExtractInterfaceWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.ExtractSupertypeWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.InferTypeArgumentsWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.InlineConstantWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.InlineTempWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.IntroduceFactoryWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.IntroduceIndirectionWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.IntroduceParameterObjectWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.IntroduceParameterWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.MoveInnerToTopWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.MoveInstanceMethodWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.MoveMembersWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.PullUpWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.PushDownWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper; |
| import org.eclipse.jdt.internal.ui.refactoring.RefactoringMessages; |
| import org.eclipse.jdt.internal.ui.refactoring.UseSupertypeWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter; |
| import org.eclipse.jdt.internal.ui.refactoring.code.InlineMethodWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.code.ReplaceInvocationsWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.reorg.CreateTargetQueries; |
| import org.eclipse.jdt.internal.ui.refactoring.reorg.DeleteUserInterfaceManager; |
| import org.eclipse.jdt.internal.ui.refactoring.reorg.NewNameQueries; |
| import org.eclipse.jdt.internal.ui.refactoring.reorg.ReorgCopyWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.reorg.ReorgMoveWizard; |
| import org.eclipse.jdt.internal.ui.refactoring.reorg.ReorgQueries; |
| import org.eclipse.jdt.internal.ui.refactoring.sef.SelfEncapsulateFieldWizard; |
| import org.eclipse.jdt.internal.ui.util.ExceptionHandler; |
| |
| /** |
| * 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> |
| * |
| * @since 3.1 |
| */ |
| public final class RefactoringExecutionStarter { |
| |
| private static RenameSupport createRenameSupport(IJavaElement element, String newName, int flags) throws CoreException { |
| switch (element.getElementType()) { |
| case IJavaElement.JAVA_PROJECT: |
| return RenameSupport.create((IJavaProject) element, newName, flags); |
| case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
| return RenameSupport.create((IPackageFragmentRoot) element, newName); |
| case IJavaElement.PACKAGE_FRAGMENT: |
| return RenameSupport.create((IPackageFragment) element, newName, flags); |
| case IJavaElement.COMPILATION_UNIT: |
| return RenameSupport.create((ICompilationUnit) element, newName, flags); |
| case IJavaElement.TYPE: |
| return RenameSupport.create((IType) element, newName, flags); |
| case IJavaElement.METHOD: |
| final IMethod method= (IMethod) element; |
| if (method.isConstructor()) |
| return createRenameSupport(method.getDeclaringType(), newName, flags); |
| else |
| return RenameSupport.create((IMethod) element, newName, flags); |
| case IJavaElement.FIELD: |
| return RenameSupport.create((IField) element, newName, flags); |
| case IJavaElement.TYPE_PARAMETER: |
| return RenameSupport.create((ITypeParameter) element, newName, flags); |
| case IJavaElement.LOCAL_VARIABLE: |
| return RenameSupport.create((ILocalVariable) element, newName, flags); |
| } |
| return null; |
| } |
| |
| public static void startChangeSignatureRefactoring(final IMethod method, final SelectionDispatchAction action, final Shell shell) throws JavaModelException { |
| if (!RefactoringAvailabilityTester.isChangeSignatureAvailable(method)) |
| return; |
| try { |
| ChangeSignatureProcessor processor= new ChangeSignatureProcessor(method); |
| RefactoringStatus status= processor.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) { |
| Object element= entry.getData(); |
| if (element != null) { |
| String message= Messages.format(RefactoringMessages.RefactoringErrorDialogUtil_okToPerformQuestion, entry.getMessage()); |
| if (MessageDialog.openQuestion(shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, message)) { |
| 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; |
| } |
| } |
| |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| ChangeSignatureWizard wizard= new ChangeSignatureWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, wizard.getDefaultPageTitle(), RefactoringSaveHelper.SAVE_REFACTORING); |
| } catch (CoreException e) { |
| ExceptionHandler.handle(e, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringMessages.RefactoringStarter_unexpected_exception); |
| } |
| } |
| |
| public static void startChangeTypeRefactoring(final ICompilationUnit unit, final Shell shell, final int offset, final int length) { |
| final ChangeTypeRefactoring refactoring= new ChangeTypeRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(new ChangeTypeWizard(refactoring), shell, RefactoringMessages.ChangeTypeAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startCleanupRefactoring(ICompilationUnit[] cus, ICleanUp[] cleanUps, boolean useOptionsFromProfile, Shell shell, boolean showWizard, String actionName) throws InvocationTargetException { |
| final CleanUpRefactoring refactoring= new CleanUpRefactoring(actionName); |
| for (int i= 0; i < cus.length; i++) { |
| refactoring.addCompilationUnit(cus[i]); |
| } |
| |
| if (!showWizard) { |
| refactoring.setUseOptionsFromProfile(useOptionsFromProfile); |
| for (int i= 0; i < cleanUps.length; i++) { |
| refactoring.addCleanUp(cleanUps[i]); |
| } |
| |
| IRunnableContext context; |
| if (refactoring.getCleanUpTargetsSize() > 1) { |
| context= new ProgressMonitorDialog(shell); |
| } else { |
| context= PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
| } |
| |
| RefactoringExecutionHelper helper= new RefactoringExecutionHelper(refactoring, IStatus.INFO, RefactoringSaveHelper.SAVE_REFACTORING, shell, context); |
| try { |
| helper.perform(true, true, true); |
| } catch (InterruptedException e) { |
| } |
| } else { |
| CleanUpRefactoringWizard refactoringWizard= new CleanUpRefactoringWizard(refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE); |
| RefactoringStarter starter= new RefactoringStarter(); |
| starter.activate(refactoringWizard, shell, actionName, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| } |
| |
| public static void startConvertAnonymousRefactoring(final ICompilationUnit unit, final int offset, final int length, final Shell shell) { |
| final ConvertAnonymousToNestedRefactoring refactoring= new ConvertAnonymousToNestedRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(new ConvertAnonymousToNestedWizard(refactoring), shell, RefactoringMessages.ConvertAnonymousToNestedAction_dialog_title, |
| RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startCopyRefactoring(IResource[] resources, IJavaElement[] javaElements, Shell shell) throws JavaModelException { |
| ICopyPolicy copyPolicy= ReorgPolicyFactory.createCopyPolicy(resources, javaElements); |
| if (copyPolicy.canEnable()) { |
| JavaCopyProcessor processor= new JavaCopyProcessor(copyPolicy); |
| Refactoring refactoring= new CopyRefactoring(processor); |
| RefactoringWizard wizard= new ReorgCopyWizard(processor, refactoring); |
| processor.setNewNameQueries(new NewNameQueries(wizard)); |
| processor.setReorgQueries(new ReorgQueries(wizard)); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, processor.getSaveMode()); |
| } |
| } |
| |
| public static void startCutRefactoring(final Object[] elements, final Shell shell) throws InterruptedException, InvocationTargetException { |
| JavaDeleteProcessor processor= new JavaDeleteProcessor(elements); |
| processor.setSuggestGetterSetterDeletion(false); |
| processor.setQueries(new ReorgQueries(shell)); |
| Refactoring refactoring= new DeleteRefactoring(processor); |
| int stopSeverity= RefactoringCore.getConditionCheckingFailedSeverity(); |
| new RefactoringExecutionHelper(refactoring, stopSeverity, RefactoringSaveHelper.SAVE_NOTHING, shell, new ProgressMonitorDialog(shell)).perform(false, false); |
| } |
| |
| public static void startDeleteRefactoring(final Object[] elements, final Shell shell) throws CoreException { |
| Refactoring refactoring= new DeleteRefactoring(new JavaDeleteProcessor(elements)); |
| DeleteUserInterfaceManager.getDefault().getStarter(refactoring).activate(refactoring, shell, RefactoringSaveHelper.SAVE_NOTHING); |
| } |
| |
| public static void startExtractInterfaceRefactoring(final IType type, final Shell shell) { |
| ExtractInterfaceProcessor processor= new ExtractInterfaceProcessor(type, JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaProject())); |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| new RefactoringStarter().activate(new ExtractInterfaceWizard(processor, refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, |
| RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startExtractSupertypeRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { |
| if (!RefactoringAvailabilityTester.isExtractSupertypeAvailable(members)) |
| return; |
| IJavaProject project= null; |
| if (members != null && members.length > 0) |
| project= members[0].getJavaProject(); |
| ExtractSupertypeProcessor processor= new ExtractSupertypeProcessor(members, JavaPreferencesSettings.getCodeGenerationSettings(project)); |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| ExtractSupertypeWizard wizard= new ExtractSupertypeWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startInferTypeArgumentsRefactoring(final IJavaElement[] elements, final Shell shell) { |
| try { |
| if (!RefactoringAvailabilityTester.isInferTypeArgumentsAvailable(elements)) |
| return; |
| final InferTypeArgumentsRefactoring refactoring= new InferTypeArgumentsRefactoring(elements); |
| new RefactoringStarter() |
| .activate(new InferTypeArgumentsWizard(refactoring), shell, RefactoringMessages.InferTypeArgumentsAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } catch (CoreException e) { |
| ExceptionHandler.handle(e, RefactoringMessages.InferTypeArgumentsAction_dialog_title, RefactoringMessages.OpenRefactoringWizardAction_exception); |
| } |
| } |
| |
| public static boolean startInlineConstantRefactoring(final ICompilationUnit unit, final CompilationUnit node, final int offset, final int length, final Shell shell) { |
| final InlineConstantRefactoring refactoring= new InlineConstantRefactoring(unit, node, offset, length); |
| if (! refactoring.checkStaticFinalConstantNameSelected().hasFatalError()) { |
| new RefactoringStarter().activate(new InlineConstantWizard(refactoring), shell, RefactoringMessages.InlineConstantAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| return true; |
| } |
| return false; |
| } |
| |
| public static boolean startInlineMethodRefactoring(final ITypeRoot typeRoot, final CompilationUnit node, final int offset, final int length, final Shell shell) { |
| final InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(typeRoot, node, offset, length); |
| if (refactoring != null) { |
| new RefactoringStarter().activate(new InlineMethodWizard(refactoring), shell, RefactoringMessages.InlineMethodAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| return true; |
| } |
| return false; |
| } |
| |
| public static boolean startInlineTempRefactoring(final ICompilationUnit unit, CompilationUnit node, final ITextSelection selection, final Shell shell) { |
| final InlineTempRefactoring refactoring= new InlineTempRefactoring(unit, node, selection.getOffset(), selection.getLength()); |
| if (!refactoring.checkIfTempSelected().hasFatalError()) { |
| new RefactoringStarter().activate(new InlineTempWizard(refactoring), shell, RefactoringMessages.InlineTempAction_inline_temp, RefactoringSaveHelper.SAVE_NOTHING); |
| return true; |
| } |
| return false; |
| } |
| |
| public static void startIntroduceFactoryRefactoring(final ICompilationUnit unit, final ITextSelection selection, final Shell shell) { |
| final IntroduceFactoryRefactoring refactoring= new IntroduceFactoryRefactoring(unit, selection.getOffset(), selection.getLength()); |
| new RefactoringStarter().activate(new IntroduceFactoryWizard(refactoring, RefactoringMessages.IntroduceFactoryAction_use_factory), shell, |
| RefactoringMessages.IntroduceFactoryAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startIntroduceIndirectionRefactoring(final IClassFile file, final int offset, final int length, final Shell shell) { |
| final IntroduceIndirectionRefactoring refactoring= new IntroduceIndirectionRefactoring(file, offset, length); |
| new RefactoringStarter().activate(new IntroduceIndirectionWizard(refactoring, RefactoringMessages.IntroduceIndirectionAction_dialog_title), shell, |
| RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startIntroduceIndirectionRefactoring(final ICompilationUnit unit, final int offset, final int length, final Shell shell) { |
| final IntroduceIndirectionRefactoring refactoring= new IntroduceIndirectionRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(new IntroduceIndirectionWizard(refactoring, RefactoringMessages.IntroduceIndirectionAction_dialog_title), shell, |
| RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startIntroduceIndirectionRefactoring(final IMethod method, final Shell shell) { |
| final IntroduceIndirectionRefactoring refactoring= new IntroduceIndirectionRefactoring(method); |
| new RefactoringStarter().activate(new IntroduceIndirectionWizard(refactoring, RefactoringMessages.IntroduceIndirectionAction_dialog_title), shell, |
| RefactoringMessages.IntroduceIndirectionAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startIntroduceParameter(ICompilationUnit unit, int offset, int length, Shell shell) { |
| final IntroduceParameterRefactoring refactoring= new IntroduceParameterRefactoring(unit, offset, length); |
| new RefactoringStarter().activate(new IntroduceParameterWizard(refactoring), shell, RefactoringMessages.IntroduceParameterAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startMoveInnerRefactoring(final IType type, final Shell shell) throws JavaModelException { |
| if (!RefactoringAvailabilityTester.isMoveInnerAvailable(type)) |
| return; |
| final MoveInnerToTopRefactoring refactoring= new MoveInnerToTopRefactoring(type, JavaPreferencesSettings.getCodeGenerationSettings(type.getJavaProject())); |
| new RefactoringStarter().activate(new MoveInnerToTopWizard(refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startMoveMethodRefactoring(final IMethod method, final Shell shell) { |
| MoveInstanceMethodProcessor processor= new MoveInstanceMethodProcessor(method, JavaPreferencesSettings.getCodeGenerationSettings(method.getJavaProject())); |
| Refactoring refactoring= new MoveRefactoring(processor); |
| MoveInstanceMethodWizard wizard= new MoveInstanceMethodWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.MoveInstanceMethodAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startMoveRefactoring(final IResource[] resources, final IJavaElement[] elements, final Shell shell) throws JavaModelException { |
| IMovePolicy policy= ReorgPolicyFactory.createMovePolicy(resources, elements); |
| if (policy.canEnable()) { |
| JavaMoveProcessor processor= new JavaMoveProcessor(policy); |
| Refactoring refactoring= new MoveRefactoring(processor); |
| RefactoringWizard wizard= new ReorgMoveWizard(processor, refactoring); |
| processor.setCreateTargetQueries(new CreateTargetQueries(wizard)); |
| processor.setReorgQueries(new ReorgQueries(wizard)); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, processor.getSaveMode()); |
| } |
| } |
| |
| public static void startMoveStaticMembersRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { |
| if (!RefactoringAvailabilityTester.isMoveStaticAvailable(members)) |
| return; |
| final Set<IMember> set= new HashSet<>(); |
| set.addAll(Arrays.asList(members)); |
| final IMember[] elements= set.toArray(new IMember[set.size()]); |
| IJavaProject project= null; |
| if (elements.length > 0) |
| project= elements[0].getJavaProject(); |
| MoveStaticMembersProcessor processor= new MoveStaticMembersProcessor(elements, JavaPreferencesSettings.getCodeGenerationSettings(project)); |
| Refactoring refactoring= new MoveRefactoring(processor); |
| MoveMembersWizard wizard= new MoveMembersWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startPullUpRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { |
| if (!RefactoringAvailabilityTester.isPullUpAvailable(members)) |
| return; |
| IJavaProject project= null; |
| if (members != null && members.length > 0) |
| project= members[0].getJavaProject(); |
| PullUpRefactoringProcessor processor= new PullUpRefactoringProcessor(members, JavaPreferencesSettings.getCodeGenerationSettings(project)); |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| new RefactoringStarter().activate(new PullUpWizard(processor, refactoring), shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startPushDownRefactoring(final IMember[] members, final Shell shell) throws JavaModelException { |
| if (!RefactoringAvailabilityTester.isPushDownAvailable(members)) |
| return; |
| PushDownRefactoringProcessor processor= new PushDownRefactoringProcessor(members); |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| PushDownWizard wizard= new PushDownWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startRenameRefactoring(final IJavaElement 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) { |
| RenameResourceWizard wizard= new RenameResourceWizard(resource); |
| new RefactoringStarter().activate(wizard, shell, wizard.getWindowTitle(), RefactoringSaveHelper.SAVE_ALL); |
| } |
| |
| public static void startReplaceInvocationsRefactoring(final ITypeRoot typeRoot, final int offset, final int length, final Shell shell) { |
| final ReplaceInvocationsRefactoring refactoring= new ReplaceInvocationsRefactoring(typeRoot, offset, length); |
| new RefactoringStarter().activate(new ReplaceInvocationsWizard(refactoring), shell, RefactoringMessages.ReplaceInvocationsAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| public static void startReplaceInvocationsRefactoring(final IMethod method, final Shell shell) { |
| final ReplaceInvocationsRefactoring refactoring= new ReplaceInvocationsRefactoring(method); |
| new RefactoringStarter().activate(new ReplaceInvocationsWizard(refactoring), shell, RefactoringMessages.ReplaceInvocationsAction_dialog_title, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| 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(new SelfEncapsulateFieldWizard(refactoring), shell, "", RefactoringSaveHelper.SAVE_REFACTORING); //$NON-NLS-1$ |
| } catch (JavaModelException e) { |
| ExceptionHandler.handle(e, ActionMessages.SelfEncapsulateFieldAction_dialog_title, ActionMessages.SelfEncapsulateFieldAction_dialog_cannot_perform); |
| } |
| } |
| |
| public static void startUseSupertypeRefactoring(final IType type, final Shell shell) { |
| UseSuperTypeProcessor processor= new UseSuperTypeProcessor(type); |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| UseSupertypeWizard wizard= new UseSupertypeWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| private RefactoringExecutionStarter() { |
| // Not for instantiation |
| } |
| |
| public static void startIntroduceParameterObject(ICompilationUnit unit, int offset, Shell shell) throws CoreException { |
| IJavaElement javaElement= unit.getElementAt(offset); |
| if (javaElement instanceof IMethod) { |
| IMethod method= (IMethod) javaElement; |
| startIntroduceParameterObject(method, shell); |
| } |
| } |
| |
| public static void startIntroduceParameterObject(IMethod 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; |
| } |
| IntroduceParameterObjectDescriptor ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(); |
| ipod.setMethod(method); |
| |
| IntroduceParameterObjectProcessor processor= new IntroduceParameterObjectProcessor(ipod); |
| |
| final RefactoringStatus status= processor.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) { |
| final Object element= entry.getData(); |
| IMethod superMethod= (IMethod) element; |
| availability= Checks.checkAvailability(superMethod); |
| if (availability.hasError()){ |
| MessageDialog.openError(shell, RefactoringMessages.RefactoringExecutionStarter_IntroduceParameterObject_problem_title, RefactoringMessages.RefactoringExecutionStarter_IntroduceParameterObject_problem_description); |
| return; |
| } |
| String message= Messages.format(RefactoringMessages.RefactoringErrorDialogUtil_okToPerformQuestion, entry.getMessage()); |
| if (element != null && MessageDialog.openQuestion(shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, message)) { |
| ipod= RefactoringSignatureDescriptorFactory.createIntroduceParameterObjectDescriptor(); |
| ipod.setMethod(superMethod); |
| processor= new IntroduceParameterObjectProcessor(ipod); |
| } |
| else processor=null; |
| } |
| } |
| if (processor != null) { |
| Refactoring refactoring= new ProcessorBasedRefactoring(processor); |
| IntroduceParameterObjectWizard wizard= new IntroduceParameterObjectWizard(processor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| } |
| |
| public static void startExtractClassRefactoring(IType type, Shell shell) { |
| ExtractClassDescriptor descriptor= RefactoringSignatureDescriptorFactory.createExtractClassDescriptor(); |
| descriptor.setType(type); |
| ExtractClassRefactoring refactoring= new ExtractClassRefactoring(descriptor); |
| ExtractClassWizard wizard= new ExtractClassWizard(descriptor, refactoring); |
| new RefactoringStarter().activate(wizard, shell, RefactoringMessages.OpenRefactoringWizardAction_refactoring, RefactoringSaveHelper.SAVE_REFACTORING); |
| } |
| |
| } |