diff options
author | Andrey Loskutov | 2015-02-01 22:52:44 +0000 |
---|---|---|
committer | Matthias Sohn | 2015-02-01 23:48:05 +0000 |
commit | c7ee9a65bcfbe9032fec5626d45f86eec90e42c6 (patch) | |
tree | dddfccf4eb2e7bfb3d401607d586e7c0bede358e | |
parent | 6d975be68487c79cadd98baf6afeaa9f83555981 (diff) | |
download | egit-c7ee9a65bcfbe9032fec5626d45f86eec90e42c6.tar.gz egit-c7ee9a65bcfbe9032fec5626d45f86eec90e42c6.tar.xz egit-c7ee9a65bcfbe9032fec5626d45f86eec90e42c6.zip |
Implement hasChildren() to avoid diff calculation in UI thread
Fetch/Push result table content provider will now always report "true"
in hasChildren() if the requested object is a RepositoryCommit.
This is needed for tree viewer to paint "arrows" for expandable nodes
without calculation of the commit content - this calculation on huge
repositories can block UI thread forever.
Bug: 458839
Change-Id: I78ec6b62f36b46932a38fbcbea1fda2c61af9089
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java | 12 | ||||
-rw-r--r-- | org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java | 13 |
2 files changed, 23 insertions, 2 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java index a7893e363a..5ab4a09d49 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java @@ -353,11 +353,21 @@ class FetchResultTable { } public Object[] getChildren(Object element) { - if (element instanceof RepositoryCommit) + if (element instanceof RepositoryCommit) { return ((RepositoryCommit) element).getDiffs(); + } return super.getChildren(element); } + @Override + public boolean hasChildren(Object element) { + if (element instanceof RepositoryCommit) { + // always return true for commits to avoid commit diff + // calculation in UI thread, see bug 458839 + return true; + } + return super.hasChildren(element); + } }); new OpenAndLinkWithEditorHelper(treeViewer) { diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java index d9b6d38fd9..16cd9972b5 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java @@ -29,8 +29,19 @@ class RefUpdateContentProvider extends WorkbenchContentProvider { } public Object[] getChildren(Object element) { - if (element instanceof RepositoryCommit) + if (element instanceof RepositoryCommit) { return ((RepositoryCommit) element).getDiffs(); + } return super.getChildren(element); } + + @Override + public boolean hasChildren(Object element) { + if (element instanceof RepositoryCommit) { + // always return true for commits to avoid commit diff calculation + // in UI thread, see bug 458839 + return true; + } + return super.hasChildren(element); + } } |