diff --git a/platform/lang-api/src/com/intellij/execution/filters/CompositeFilter.java b/platform/lang-api/src/com/intellij/execution/filters/CompositeFilter.java index b2a51ea4802f..aa4d3f16781e 100644 --- a/platform/lang-api/src/com/intellij/execution/filters/CompositeFilter.java +++ b/platform/lang-api/src/com/intellij/execution/filters/CompositeFilter.java @@ -34,17 +34,23 @@ import java.util.List; public class CompositeFilter implements Filter, FilterMixin { private static final Logger LOG = Logger.getInstance(CompositeFilter.class); - private final List myFilters = new ArrayList<>(); + private final List myFilters; private boolean myIsAnyHeavy; private boolean forceUseAllFilters; private final DumbService myDumbService; public CompositeFilter(@NotNull Project project) { + this(project, new ArrayList<>()); + } + + public CompositeFilter(@NotNull Project project, @NotNull List filters) { myDumbService = DumbService.getInstance(project); + myFilters = filters; } protected CompositeFilter(DumbService dumbService) { myDumbService = dumbService; + myFilters = new ArrayList<>(); } @Override diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index 870dada0f69c..fc948372407e 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -285,29 +285,11 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo myPsiDisposedCheck = new DisposedPsiManagerCheck(project); myProject = project; - myFilters = new CompositeFilter(project); - if (usePredefinedMessageFilter) { - for (ConsoleFilterProvider eachProvider : Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS)) { - Filter[] filters; - if (eachProvider instanceof ConsoleDependentFilterProvider) { - filters = ((ConsoleDependentFilterProvider)eachProvider).getDefaultFilters(this, project, searchScope); - } - else if (eachProvider instanceof ConsoleFilterProviderEx) { - filters = ((ConsoleFilterProviderEx)eachProvider).getDefaultFilters(project, searchScope); - } - else { - filters = eachProvider.getDefaultFilters(project); - } - for (Filter filter : filters) { - myFilters.addFilter(filter); - } - } - } + myFilters = new CompositeFilter(project, usePredefinedMessageFilter ? computeConsoleFilters(project, searchScope) : new SmartList<>()); myFilters.setForceUseAllFilters(true); myHeavyUpdateTicket = 0; myHeavyAlarm = myFilters.isAnyHeavy() ? new Alarm(Alarm.ThreadToUse.POOLED_THREAD, this) : null; - ConsoleInputFilterProvider[] inputFilters = Extensions.getExtensions(ConsoleInputFilterProvider.INPUT_FILTER_PROVIDERS); if (inputFilters.length > 0) { CompositeInputFilter compositeInputFilter = new CompositeInputFilter(project); @@ -349,6 +331,25 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo } + @NotNull + private List computeConsoleFilters(@NotNull Project project, @NotNull GlobalSearchScope searchScope) { + List result = new ArrayList<>(); + for (ConsoleFilterProvider eachProvider : ConsoleFilterProvider.FILTER_PROVIDERS.getExtensions()) { + Filter[] filters; + if (eachProvider instanceof ConsoleDependentFilterProvider) { + filters = ((ConsoleDependentFilterProvider)eachProvider).getDefaultFilters(this, project, searchScope); + } + else if (eachProvider instanceof ConsoleFilterProviderEx) { + filters = ((ConsoleFilterProviderEx)eachProvider).getDefaultFilters(project, searchScope); + } + else { + filters = eachProvider.getDefaultFilters(project); + } + ContainerUtil.addAll(result, filters); + } + return result; + } + @Override public void attachToProcess(final ProcessHandler processHandler) { myState = myState.attachTo(this, processHandler);