From 761dac522a9d6b21ff161abe6bc3b13d5e791f6d Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 6 Mar 2017 17:41:53 +0300 Subject: [PATCH] fixed NPE caused by previous commit --- .../psi/impl/DocumentCommitThread.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitThread.java b/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitThread.java index ec4d72ebcfcb..7c87ef4ccdd0 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitThread.java +++ b/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitThread.java @@ -396,22 +396,22 @@ public class DocumentCommitThread implements Runnable, Disposable, DocumentCommi if (!success && task != null) { final Project finalProject = project; - PsiDocumentManager documentManager = ReadAction.compute(() -> finalProject.isDisposed() ? null : PsiDocumentManager.getInstance(finalProject)); - if (documentManager.isUncommited(document)) { // sync commit has not intervened - final Document finalDocument = document; - final CharSequence[] lastCommittedText = {null}; - List> oldFileNodes = - ApplicationManager.getApplication().runReadAction((Computable>>)() -> { - if (finalProject.isDisposed()) return null; - lastCommittedText[0] = PsiDocumentManager.getInstance(finalProject).getLastCommittedText(finalDocument); - PsiFile file = documentManager.getPsiFile(finalDocument); - return file == null ? null : getAllFileNodes(file); - }); + final Document finalDocument = document; + Object finalFailureReason = failureReason; + CommitTask finalTask = task; + ReadAction.run(() -> { + if (finalProject.isDisposed()) return; + PsiDocumentManager documentManager = PsiDocumentManager.getInstance(finalProject); + if (documentManager.isCommitted(finalDocument)) return; // sync commit hasn't intervened + CharSequence lastCommittedText = documentManager.getLastCommittedText(finalDocument); + PsiFile file = documentManager.getPsiFile(finalDocument); + List> oldFileNodes = file == null ? null : getAllFileNodes(file); if (oldFileNodes != null) { - doQueue(project, document, oldFileNodes, "re-added on failure: " + failureReason, task.myCreationModalityState, - lastCommittedText[0]); + doQueue(finalProject, finalDocument, oldFileNodes, "re-added on failure: " + finalFailureReason, + finalTask.myCreationModalityState, + lastCommittedText); } - } + }); } synchronized (lock) { currentTask = null; // do not cancel, it's being invokeLatered