}catch (OperationCanceledException e) { throw new InterruptedException(e.getMessage());
	public void perform() throws InterruptedException, InvocationTargetException {		Assert.isTrue(Display.getCurrent() != null);		final IJobManager manager=  Platform.getJobManager();		final IWorkspaceRoot rule= ResourcesPlugin.getWorkspace().getRoot();		class OperationRunner extends WorkbenchRunnableAdapter implements IThreadListener {			public OperationRunner(IWorkspaceRunnable runnable, ISchedulingRule schedulingRule) {				super(runnable, schedulingRule);			}			public void threadChange(Thread thread) {				manager.transferRule(getSchedulingRule(), thread);			}		}		try {			try {				Runnable r= new Runnable() {					public void run() {						manager.beginRule(rule, null);					}				};				BusyIndicator.showWhile(fParent.getDisplay(), r);			} catch (OperationCanceledException e) {				throw new InterruptedException(e.getMessage());			}						RefactoringSaveHelper saveHelper= new RefactoringSaveHelper();			if (fNeedsSavedEditors && !saveHelper.saveEditors(fParent))				throw new InterruptedException();			Operation op= new Operation();			fRefactoring.setValidationContext(fParent);			try{				fExecContext.run(false, false, new OperationRunner(op, rule));				RefactoringStatus validationStatus= op.fPerformChangeOperation.getValidationStatus();				if (validationStatus != null && validationStatus.hasFatalError()) {					MessageDialog.openError(fParent, fRefactoring.getName(), 						Messages.format(							RefactoringMessages.RefactoringExecutionHelper_cannot_execute, 							validationStatus.getMessageMatchingSeverity(RefactoringStatus.FATAL)));					return;				}			} catch (InvocationTargetException e) {				PerformChangeOperation pco= op.fPerformChangeOperation;				if (pco != null && pco.changeExecutionFailed()) {					ChangeExceptionHandler handler= new ChangeExceptionHandler(fParent, fRefactoring);					Throwable inner= e.getTargetException();					if (inner instanceof RuntimeException) {						handler.handle(pco.getChange(), (RuntimeException)inner);					} else if (inner instanceof CoreException) {						handler.handle(pco.getChange(), (CoreException)inner);					} else {						throw e;					}				} else {					throw e;				}			} finally {				saveHelper.triggerBuild();			}		} finally {			manager.endRule(rule);			fRefactoring.setValidationContext(null);		}	}	