mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-58707 Fixed "already disposed" in GitChangeProvider.
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user