From 2d2cf45af6749872c9160a99603274c1575607fa Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Sat, 24 May 2014 16:54:15 +0400 Subject: [PATCH 1/4] [log] set bek synchronously when applying filters to avoid locks --- .../vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java index b67e267c20e1..b96611dd0f25 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/VcsLogUiImpl.java @@ -319,7 +319,8 @@ public class VcsLogUiImpl implements VcsLogUi, Disposable { setModel(newModel, myDataPack, previouslySelected); myMainFrame.updateDataPack(myDataPack); setLongEdgeVisibility(myUiProperties.areLongEdgesVisible()); - setBek(myUiProperties.isBek()); + myDataPack.getGraphFacade().performAction(new BekGraphAction(myUiProperties.isBek() ? + PermanentGraph.SortType.Bek : PermanentGraph.SortType.Normal)); fireFilterChangeEvent(); repaintUI(); From a40d619111d62eba011d4e8c9ac53ea1524112fd Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Sat, 24 May 2014 16:56:35 +0400 Subject: [PATCH 2/4] [log] Fix IAE when jumping to row #0 in empty table --- .../intellij/vcs/log/ui/frame/VcsLogGraphTable.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java index 0f41ae644d0e..240fc672be53 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/VcsLogGraphTable.java @@ -21,7 +21,6 @@ import com.intellij.vcs.log.VcsLogHighlighter; import com.intellij.vcs.log.data.DataPack; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.graph.*; -import com.intellij.vcs.log.ui.render.GraphCommitCell; import com.intellij.vcs.log.printer.idea.PositionUtil; import com.intellij.vcs.log.ui.VcsLogUiImpl; import com.intellij.vcs.log.ui.render.GraphCommitCell; @@ -33,7 +32,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableModel; @@ -169,9 +167,11 @@ public class VcsLogGraphTable extends JBTable implements TypeSafeDataProvider, C } public void jumpToRow(int rowIndex) { - scrollRectToVisible(getCellRect(rowIndex, 0, false)); - setRowSelectionInterval(rowIndex, rowIndex); - scrollRectToVisible(getCellRect(rowIndex, 0, false)); + if (rowIndex >= 0 && rowIndex <= getRowCount() - 1) { + scrollRectToVisible(getCellRect(rowIndex, 0, false)); + setRowSelectionInterval(rowIndex, rowIndex); + scrollRectToVisible(getCellRect(rowIndex, 0, false)); + } } @Override From 813ab5f3eb4b7794d9d26d9e62be881b2e5eae41 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Sat, 24 May 2014 17:11:59 +0400 Subject: [PATCH 3/4] [log] Don't schedule a refresh task if there is nothing to refresh --- .../src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java index c7845f878ab0..cdb9f80fe1a9 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogRefresherImpl.java @@ -113,7 +113,9 @@ public class VcsLogRefresherImpl implements VcsLogRefresher { @Override public void refresh(@NotNull Collection rootsToRefresh) { - mySingleTaskController.request(new RefreshRequest(rootsToRefresh)); + if (!rootsToRefresh.isEmpty()) { + mySingleTaskController.request(new RefreshRequest(rootsToRefresh)); + } } @NotNull From 5ffae2a89d824293a3d854768827c5cf60fd5374 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 24 May 2014 15:46:50 +0200 Subject: [PATCH 4/4] fix class with wrong qname sometimes returned from findClasses --- .../intellij/psi/impl/file/impl/JavaFileManagerImpl.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java b/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java index d8c5d1c88b10..1b14c8ff462d 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java @@ -87,10 +87,7 @@ public class JavaFileManagerImpl implements JavaFileManager, Disposable { final Collection classes = JavaFullClassNameIndex.getInstance().get(qName.hashCode(), myManager.getProject(), scope); if (classes.isEmpty()) return PsiClass.EMPTY_ARRAY; List result = new ArrayList(classes.size()); - int count = 0; - PsiClass aClass = null; - for (PsiClass found : classes) { - aClass = found; + for (PsiClass aClass : classes) { final String qualifiedName = aClass.getQualifiedName(); if (qualifiedName == null || !qualifiedName.equals(qName)) continue; @@ -104,11 +101,11 @@ public class JavaFileManagerImpl implements JavaFileManager, Disposable { if (!hasAcceptablePackage(vFile)) continue; result.add(aClass); - count++; } + int count = result.size(); if (count == 0) return PsiClass.EMPTY_ARRAY; - if (count == 1) return new PsiClass[] {aClass}; + if (count == 1) return new PsiClass[] {result.get(0)}; ContainerUtil.quickSort(result, new Comparator() { @Override