private void updateUiOnFilterChange() {
   FilterModel[] models = {
     myBranchFilterModel,
     myUserFilterModel,
     myDateFilterModel,
     myStructureFilterModel,
     myTextFilterModel
   };
   for (FilterModel<?> model : models) {
     model.addSetFilterListener(
         new Runnable() {
           @Override
           public void run() {
             myUi.applyFiltersAndUpdateUi();
             myBranchFilterModel.onStructureFilterChanged(
                 new HashSet<VirtualFile>(myLogDataHolder.getRoots()),
                 myStructureFilterModel.getFilter());
           }
         });
   }
 }
 @NotNull
 @Override
 public VcsLogFilterCollection getFilters() {
   ApplicationManager.getApplication().assertIsDispatchThread();
   Pair<VcsLogTextFilter, VcsLogHashFilter> filtersFromText =
       getFiltersFromTextArea(myTextFilterModel.getFilter());
   return new VcsLogFilterCollectionImpl(
       myBranchFilterModel.getFilter(),
       myUserFilterModel.getFilter(),
       filtersFromText.second,
       myDateFilterModel.getFilter(),
       filtersFromText.first,
       myStructureFilterModel.getFilter() == null
           ? null
           : myStructureFilterModel.getFilter().getStructureFilter(),
       myStructureFilterModel.getFilter() == null
           ? null
           : myStructureFilterModel.getFilter().getRootFilter());
 }
 @Override
 void setFilter(@Nullable VcsLogTextFilter filter) {
   super.setFilter(filter);
   myText = null;
 }