package org.python.pydev.refactoring.core.base; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.TextFileChange; import org.python.pydev.core.log.Log; import com.aptana.shared_core.utils.RunInUiThread; public class PyTextFileChange extends TextFileChange { public PyTextFileChange(String name, IFile file) { super(name, file); } public Change perform(final org.eclipse.core.runtime.IProgressMonitor pm) throws CoreException { final Object[] superPerform = new Object[1]; //We need to sync it to have UI access because otherwise we're unable to start a document rewrite session. RunInUiThread.sync(new Runnable() { public void run() { try { superPerform[0] = superPerform(pm); } catch (CoreException e) { superPerform[0] = e; Log.log(e); } catch (Throwable e) { superPerform[0] = new RuntimeException(e); Log.log(e); } } }); Object object = superPerform[0]; if (object == null) { return null; } if (object instanceof Change) { return (Change) object; } if (object instanceof CoreException) { throw (CoreException) object; } else { throw (RuntimeException) object; } } public Change superPerform(org.eclipse.core.runtime.IProgressMonitor pm) throws CoreException { return super.perform(pm); } }