From 294eb992e03ee2eeaa32df8bf0778a088fdc9a50 Mon Sep 17 00:00:00 2001 From: irengrig Date: Wed, 8 Dec 2010 11:25:46 +0300 Subject: [PATCH] IDEA-62667 NPE in git branch widget [review=denis.zhdanov] --- .../checkout/branches/GitCurrentBranchWidget.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/checkout/branches/GitCurrentBranchWidget.java b/plugins/git4idea/src/git4idea/checkout/branches/GitCurrentBranchWidget.java index 82af514720c9..b21763e06aa9 100644 --- a/plugins/git4idea/src/git4idea/checkout/branches/GitCurrentBranchWidget.java +++ b/plugins/git4idea/src/git4idea/checkout/branches/GitCurrentBranchWidget.java @@ -15,12 +15,14 @@ */ package git4idea.checkout.branches; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManagerEvent; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.ProjectLevelVcsManager; @@ -151,7 +153,18 @@ public class GitCurrentBranchWidget extends EditorBasedWidget implements StatusB currentBranchName = ""; } myCurrentBranchName.set(currentBranchName); - myStatusBar.updateWidget(ID()); + // status bar update would be anyway invoked on awt thread + // check not-disposed predicates before (they will be also checked on awt thread) + // in any other thread we wouldn't have guarantee that disposed hadn't started in parallel + ApplicationManager.getApplication().invokeLater(new Runnable() { + public void run() { + myStatusBar.updateWidget(ID()); + } + }, new Condition() { + public boolean value(Object o) { + return isDisposed() || (project != null) && ((! project.isOpen()) || project.isDisposed()) || myStatusBar == null; + } + }); } }; if (project == null) {