1 11 package org.eclipse.ltk.internal.core.refactoring; 12 13 import org.eclipse.core.runtime.CoreException; 14 15 import org.eclipse.core.resources.IFile; 16 import org.eclipse.core.resources.IResource; 17 import org.eclipse.core.resources.IResourceChangeEvent; 18 import org.eclipse.core.resources.IResourceChangeListener; 19 import org.eclipse.core.resources.IResourceDelta; 20 import org.eclipse.core.resources.IResourceDeltaVisitor; 21 import org.eclipse.core.resources.ResourcesPlugin; 22 23 import org.eclipse.ltk.core.refactoring.Change; 24 import org.eclipse.ltk.core.refactoring.IUndoManager; 25 import org.eclipse.ltk.core.refactoring.IUndoManagerListener; 26 import org.eclipse.ltk.core.refactoring.RefactoringCore; 27 28 public class SaveListener implements IResourceChangeListener, IUndoManagerListener { 29 30 private class DeltaVisitor implements IResourceDeltaVisitor { 31 public boolean visit(IResourceDelta delta) { 32 IResource resource= delta.getResource(); 33 if (resource.getType() == IResource.FILE && delta.getKind() == IResourceDelta.CHANGED && 34 (delta.getFlags() & IResourceDelta.CONTENT) != 0) { 35 IFile file= (IFile)resource; 36 ContentStamps.increment(file); 37 } 38 return true; 39 } 40 } 41 42 private DeltaVisitor fVisitor= new DeltaVisitor(); 43 private int fInChangeExecution; 44 45 private static final SaveListener INSTANCE= new SaveListener(); 46 47 public static SaveListener getInstance() { 48 return INSTANCE; 49 } 50 51 public void resourceChanged(IResourceChangeEvent event) { 52 try { 53 IResourceDelta delta= event.getDelta(); 54 if (delta != null && fInChangeExecution == 0) 55 delta.accept(fVisitor); 56 } catch (CoreException e) { 57 RefactoringCorePlugin.log(e); 58 } 59 } 60 61 public void undoStackChanged(IUndoManager manager) { 62 } 63 public void redoStackChanged(IUndoManager manager) { 64 } 65 public void aboutToPerformChange(IUndoManager manager, Change change) { 66 fInChangeExecution++; 67 } 68 public void changePerformed(IUndoManager manager, Change change) { 69 fInChangeExecution--; 70 } 71 72 public void startup() { 73 ResourcesPlugin.getWorkspace().addResourceChangeListener(this); 74 RefactoringCore.getUndoManager().addListener(this); 75 } 76 77 public void shutdown() { 78 ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); 79 RefactoringCore.getUndoManager().removeListener(this); 80 } 81 } 82 | Popular Tags |