IDEA-58707 Fixed "already disposed" in GitChangeProvider.

This commit is contained in:
Kirill Likhodedov
2010-11-18 19:33:40 +03:00
parent a9210f00b0
commit b66e1d437c
@@ -40,10 +40,14 @@ public class GitChangeProvider implements ChangeProvider {
private static final Logger LOG = Logger.getInstance("#git4idea.changes.GitChangeProvider");
private final Project myProject;
private final ChangeListManager myChangeListManager;
private FileDocumentManager myFileDocumentManager;
private final ProjectLevelVcsManager myVcsManager;
public GitChangeProvider(@NotNull Project project, ChangeListManager changeListManager) {
public GitChangeProvider(@NotNull Project project, ChangeListManager changeListManager, FileDocumentManager fileDocumentManager, ProjectLevelVcsManager vcsManager) {
myProject = project;
myChangeListManager = changeListManager;
myFileDocumentManager = fileDocumentManager;
myVcsManager = vcsManager;
}
/**
@@ -66,7 +70,8 @@ public class GitChangeProvider implements ChangeProvider {
Collection<VirtualFile> roots = GitUtil.gitRootsForPaths(affected);
try {
final MyNonChangedHolder holder = new MyNonChangedHolder(myProject, dirtyScope.getDirtyFilesNoExpand(), addGate);
final MyNonChangedHolder holder = new MyNonChangedHolder(myProject, dirtyScope.getDirtyFilesNoExpand(), addGate,
myFileDocumentManager, myVcsManager);
for (VirtualFile root : roots) {
ChangeCollector c = new ChangeCollector(myProject, myChangeListManager, dirtyScope, root);
final Collection<Change> changes = c.changes();
@@ -81,7 +86,10 @@ public class GitChangeProvider implements ChangeProvider {
holder.feedBuilder(builder);
}
} catch (VcsException e) {// most probably the error happened because git is not configured
GitVcs.getInstance(myProject).getExecutableValidator().showNotificationOrThrow(e);
final GitVcs vcs = GitVcs.getInstance(myProject);
if (vcs != null) {
vcs.getExecutableValidator().showNotificationOrThrow(e);
}
}
}
@@ -89,11 +97,18 @@ public class GitChangeProvider implements ChangeProvider {
private final Project myProject;
private final Set<FilePath> myDirty;
private final ChangeListManagerGate myAddGate;
private FileDocumentManager myFileDocumentManager;
private ProjectLevelVcsManager myVcsManager;
private MyNonChangedHolder(final Project project, final Set<FilePath> dirty, final ChangeListManagerGate addGate) {
private MyNonChangedHolder(final Project project,
final Set<FilePath> dirty,
final ChangeListManagerGate addGate,
FileDocumentManager fileDocumentManager, ProjectLevelVcsManager vcsManager) {
myProject = project;
myDirty = dirty;
myAddGate = addGate;
myFileDocumentManager = fileDocumentManager;
myVcsManager = vcsManager;
}
public void changed(final Collection<Change> changes) {
@@ -115,14 +130,12 @@ public class GitChangeProvider implements ChangeProvider {
public void feedBuilder(final ChangelistBuilder builder) throws VcsException {
final VcsKey gitKey = GitVcs.getKey();
final ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(myProject);
final FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance();
for (FilePath filePath : myDirty) {
final VirtualFile vf = filePath.getVirtualFile();
if (vf != null) {
if ((! FileStatus.ADDED.equals(myAddGate.getStatus(vf))) && fileDocumentManager.isFileModifiedAndDocumentUnsaved(vf)) {
final VirtualFile root = vcsManager.getVcsRootFor(vf);
if ((! FileStatus.ADDED.equals(myAddGate.getStatus(vf))) && myFileDocumentManager.isFileModifiedAndDocumentUnsaved(vf)) {
final VirtualFile root = myVcsManager.getVcsRootFor(vf);
if (root != null) {
final GitRevisionNumber beforeRevisionNumber = GitChangeUtils.loadRevision(myProject, root, "HEAD");
builder.processChange(new Change(GitContentRevision.createRevision(vf, beforeRevisionNumber, myProject),