Class Refactoring

  • All Implemented Interfaces:
    IAdaptable
    Direct Known Subclasses:
    ProcessorBasedRefactoring

    public abstract class Refactoring
    extends PlatformObject
    Abstract super class for all refactorings. Refactorings are used to perform behavior-preserving workspace transformations. A refactoring offers two different kind of methods:
    1. methods to check conditions to determine if the refactoring can be carried out in general and if transformation will be behavior-preserving.
    2. a method to create a Change object that represents the actual work space modifications.
    The life cycle of a refactoring is as follows:
    1. the refactoring gets created
    2. the refactoring is initialized with the elements to be refactored. It is up to a concrete refactoring implementation to provide corresponding API.
    3. checkInitialConditions(IProgressMonitor) is called. The method can be called more than once.
    4. additional arguments are provided to perform the refactoring (for example the new name of a element in the case of a rename refactoring). It is up to a concrete implementation to provide corresponding API.
    5. checkFinalConditions(IProgressMonitor) is called. The method can be called more than once. The method must not be called if checkInitialConditions(IProgressMonitor) returns a refactoring status of severity RefactoringStatus.FATAL.
    6. createChange(IProgressMonitor) is called. The method must only be called once after each call to checkFinalConditions(IProgressMonitor) and should not be called if one of the condition checking methods returns a refactoring status of severity RefactoringStatus.FATAL.
    7. steps 4 to 6 can be executed repeatedly (for example when the user goes back from the preview page).

    A refactoring can not assume that all resources are saved before any methods are called on it. Therefore a refactoring must be able to deal with unsaved resources.

    The class should be subclassed by clients wishing to implement new refactorings.

    Since:
    3.0
    See Also:
    RefactoringContext
    • Constructor Detail

      • Refactoring

        public Refactoring()
    • Method Detail

      • setValidationContext

        public final void setValidationContext​(Object context)
        Parameters:
        context - the org.eclipse.swt.widgets.Shell that is to be used to parent any dialogs with the user, or null if there is no UI context (declared as an Object to avoid any direct references on the SWT component)
      • getValidationContext

        public final Object getValidationContext()
        Returns the validation context
        Returns:
        the validation context or null if no validation context has been set.
      • getName

        public abstract String getName()
        Returns the refactoring's name.
        Returns:
        the refactoring's human readable name. Must not be null
      • getRefactoringTickProvider

        public final RefactoringTickProvider getRefactoringTickProvider()
        Returns the tick provider used for progress reporting for this refactoring.
        Returns:
        the refactoring tick provider used for progress reporting
        Since:
        3.2
      • doGetRefactoringTickProvider

        protected RefactoringTickProvider doGetRefactoringTickProvider()
        Hook method to provide the tick provider used for progress reporting.

        Subclasses may override this method

        Returns:
        the refactoring tick provider used for progress reporting
        Since:
        3.2
      • checkInitialConditions

        public abstract RefactoringStatus checkInitialConditions​(IProgressMonitor pm)
                                                          throws CoreException,
                                                                 OperationCanceledException
        Checks some initial conditions based on the element to be refactored. The method is typically called by the UI to perform an initial checks after an action has been executed.

        The refactoring has to be considered as not being executable if the returned status has the severity of RefactoringStatus#FATAL.

        This method can be called more than once.

        Parameters:
        pm - a progress monitor to report progress. Although initial checks are supposed to execute fast, there can be certain situations where progress reporting is necessary. For example rebuilding a corrupted index may report progress.
        Returns:
        a refactoring status. If the status is RefactoringStatus#FATAL the refactoring has to be considered as not being executable.
        Throws:
        CoreException - if an exception occurred during initial condition checking. If this happens then the initial condition checking has to be interpreted as failed
        OperationCanceledException - if the condition checking got canceled
        See Also:
        checkFinalConditions(IProgressMonitor), RefactoringStatus.FATAL
      • checkFinalConditions

        public abstract RefactoringStatus checkFinalConditions​(IProgressMonitor pm)
                                                        throws CoreException,
                                                               OperationCanceledException
        After checkInitialConditions has been performed and the user has provided all input necessary to perform the refactoring this method is called to check the remaining preconditions.

        The refactoring has to be considered as not being executable if the returned status has the severity of RefactoringStatus#FATAL.

        This method can be called more than once.

        Parameters:
        pm - a progress monitor to report progress
        Returns:
        a refactoring status. If the status is RefactoringStatus#FATAL the refactoring is considered as not being executable.
        Throws:
        CoreException - if an exception occurred during final condition checking If this happens then the final condition checking is interpreted as failed
        OperationCanceledException - if the condition checking got canceled
        See Also:
        checkInitialConditions(IProgressMonitor), RefactoringStatus.FATAL
      • getAdapter

        public <T> T getAdapter​(Class<T> adapter)
        Description copied from class: PlatformObject
        Returns an object which is an instance of the given class associated with this object. Returns null if no such object can be found.

        This implementation of the method declared by IAdaptable passes the request along to the platform's adapter manager; roughly Platform.getAdapterManager().getAdapter(this, adapter). Subclasses may override this method (however, if they do so, they should invoke the method on their superclass to ensure that the Platform's adapter manager is consulted).

        Specified by:
        getAdapter in interface IAdaptable
        Overrides:
        getAdapter in class PlatformObject
        Type Parameters:
        T - the class type
        Parameters:
        adapter - the class to adapt to
        Returns:
        the adapted object or null
        See Also:
        IAdaptable.getAdapter(Class)