Extract event-filter parts from EventListenersConfig

These are used by several parts of the application and keeping them in
a global instance makes more sense than passing them around.

Solves: Jira GER-1735
Change-Id: I6d090b8e16c53fd26116d4ece67e9f6e3d81e794
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfig.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfig.java
index 21bc418..cc89f39 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfig.java
@@ -16,15 +16,11 @@
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.entities.AccessSection;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.server.config.AllProjectsName;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.inject.Inject;
-import java.util.Arrays;
-import java.util.function.Function;
-import java.util.regex.Pattern;
 import org.eclipse.jgit.lib.Config;
 
 public class EventListenersConfig {
@@ -32,33 +28,10 @@
     private static final FluentLogger logger = FluentLogger.forEnclosingClass();
     static final String EVENT_LISTENERS = "EventListeners";
     static final String ENABLED = "enabled";
-    static final String BLOCKED_REFS = "blockedRef";
-    static final String BLOCKED_PROJECTS = "blockedProject";
-    static final String BLOCK_LIGHTWEIGHT_TAGS = "blockLightWeightTags";
-
-    @VisibleForTesting
-    static boolean filterMatches(String filter, String repoName) {
-      if (filter.startsWith(AccessSection.REGEX_PREFIX)) {
-        return Pattern.matches(filter, repoName);
-      }
-      if (filter.endsWith("*")) {
-        return repoName.startsWith(filter.substring(0, filter.length() - 1));
-      }
-      return repoName.equals(filter);
-    }
-
-    @VisibleForTesting
-    public static Function<String, Boolean> toCombinedMatcher(String... filters) {
-      return repoName -> Arrays.stream(filters).anyMatch(f -> filterMatches(f, repoName));
-    }
 
     @VisibleForTesting
     static EventListenersConfig fromConfig(Config cfg) {
-      return new EventListenersConfig(
-          cfg.getBoolean(EVENT_LISTENERS, ENABLED, true),
-          toCombinedMatcher(cfg.getStringList(EVENT_LISTENERS, null, BLOCKED_PROJECTS)),
-          toCombinedMatcher(cfg.getStringList(EVENT_LISTENERS, null, BLOCKED_REFS)),
-          cfg.getBoolean(EVENT_LISTENERS, BLOCK_LIGHTWEIGHT_TAGS, false));
+      return new EventListenersConfig(cfg.getBoolean(EVENT_LISTENERS, ENABLED, true));
     }
 
     private final PluginConfigFactory configFactory;
@@ -83,41 +56,19 @@
       } catch (NoSuchProjectException e) {
         logger.atSevere().withCause(e).log(
             "Unable to read project.config, using default EventListenersConfig");
-        return new EventListenersConfig(true, toCombinedMatcher(""), toCombinedMatcher(""), false);
+        return new EventListenersConfig(true);
       }
     }
   }
 
   private final boolean enabled;
-  private final Function<String, Boolean> blockedRefMatcher;
-  private final Function<String, Boolean> blockedProjectMatcher;
-  private final boolean blockLightWeightTags;
 
   @VisibleForTesting
-  public EventListenersConfig(
-      boolean enabled,
-      Function<String, Boolean> blockedProjectMatcher,
-      Function<String, Boolean> blockedRefMatcher,
-      boolean blockLightWeightTags) {
+  public EventListenersConfig(boolean enabled) {
     this.enabled = enabled;
-    this.blockedProjectMatcher = blockedProjectMatcher;
-    this.blockedRefMatcher = blockedRefMatcher;
-    this.blockLightWeightTags = blockLightWeightTags;
   }
 
   public boolean isEnabled() {
     return this.enabled;
   }
-
-  public boolean refIsBlocked(String ref) {
-    return blockedRefMatcher.apply(ref);
-  }
-
-  public boolean projectIsBlocked(String repoName) {
-    return blockedProjectMatcher.apply(repoName);
-  }
-
-  public boolean blockLightWeightTags() {
-    return blockLightWeightTags;
-  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventsFilter.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventsFilter.java
new file mode 100644
index 0000000..38f3acc
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventsFilter.java
@@ -0,0 +1,114 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.googlesource.gerrit.plugins.eventseiffel.config;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.entities.AccessSection;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.project.NoSuchProjectException;
+import com.google.inject.Inject;
+import java.util.Arrays;
+import java.util.function.Function;
+import java.util.regex.Pattern;
+import org.eclipse.jgit.lib.Config;
+
+public class EventsFilter {
+
+  public static class Provider implements com.google.inject.Provider<EventsFilter> {
+    private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+    static final String EVENTS_FILTER = "EventsFilter";
+    static final String BLOCKED_REFS = "blockedRef";
+    static final String BLOCKED_PROJECTS = "blockedProject";
+    static final String BLOCK_LIGHTWEIGHT_TAGS = "blockLightWeightTags";
+
+    @VisibleForTesting
+    static boolean filterMatches(String filter, String repoName) {
+      if (filter.startsWith(AccessSection.REGEX_PREFIX)) {
+        return Pattern.matches(filter, repoName);
+      }
+      if (filter.endsWith("*")) {
+        return repoName.startsWith(filter.substring(0, filter.length() - 1));
+      }
+      return repoName.equals(filter);
+    }
+
+    @VisibleForTesting
+    public static Function<String, Boolean> toCombinedMatcher(String... filters) {
+      return repoName -> Arrays.stream(filters).anyMatch(f -> filterMatches(f, repoName));
+    }
+
+    @VisibleForTesting
+    static EventsFilter fromConfig(Config cfg) {
+      return new EventsFilter(
+          toCombinedMatcher(cfg.getStringList(EVENTS_FILTER, null, BLOCKED_PROJECTS)),
+          toCombinedMatcher(cfg.getStringList(EVENTS_FILTER, null, BLOCKED_REFS)),
+          cfg.getBoolean(EVENTS_FILTER, BLOCK_LIGHTWEIGHT_TAGS, false));
+    }
+
+    private final PluginConfigFactory configFactory;
+    private final String pluginName;
+    private final AllProjectsName allProjects;
+
+    @Inject
+    public Provider(
+        PluginConfigFactory cfgFactory,
+        @PluginName String pluginName,
+        AllProjectsName allProjects) {
+      this.configFactory = cfgFactory;
+      this.pluginName = pluginName;
+      this.allProjects = allProjects;
+    }
+
+    @Override
+    public EventsFilter get() {
+      try {
+        Config cfg = configFactory.getProjectPluginConfig(allProjects, pluginName);
+        return fromConfig(cfg);
+      } catch (NoSuchProjectException e) {
+        logger.atSevere().withCause(e).log(
+            "Unable to read project.config, using default EventsFilter");
+        return new EventsFilter(toCombinedMatcher(""), toCombinedMatcher(""), false);
+      }
+    }
+  }
+
+  private final Function<String, Boolean> blockedRefMatcher;
+  private final Function<String, Boolean> blockedProjectMatcher;
+  private final boolean blockLightWeightTags;
+
+  @VisibleForTesting
+  public EventsFilter(
+      Function<String, Boolean> blockedProjectMatcher,
+      Function<String, Boolean> blockedRefMatcher,
+      boolean blockLightWeightTags) {
+    this.blockedProjectMatcher = blockedProjectMatcher;
+    this.blockedRefMatcher = blockedRefMatcher;
+    this.blockLightWeightTags = blockLightWeightTags;
+  }
+
+  public boolean refIsBlocked(String ref) {
+    return blockedRefMatcher.apply(ref);
+  }
+
+  public boolean projectIsBlocked(String repoName) {
+    return blockedProjectMatcher.apply(repoName);
+  }
+
+  public boolean blockLightWeightTags() {
+    return blockLightWeightTags;
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/PatchsetCreatedListener.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/PatchsetCreatedListener.java
index cd4c83f..048f701 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/PatchsetCreatedListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/PatchsetCreatedListener.java
@@ -18,30 +18,35 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.parsing.EiffelEventParsingQueue;
 
 public class PatchsetCreatedListener implements RevisionCreatedListener {
   private final EiffelEventParsingQueue queue;
   private final Provider<EventListenersConfig> configProvider;
+  private final Provider<EventsFilter> eventsFilter;
 
   @Inject
   public PatchsetCreatedListener(
-      EiffelEventParsingQueue queue, Provider<EventListenersConfig> configProvider) {
+      EiffelEventParsingQueue queue,
+      Provider<EventListenersConfig> configProvider,
+      Provider<EventsFilter> eventsFilter) {
     this.queue = queue;
     this.configProvider = configProvider;
+    this.eventsFilter = eventsFilter;
   }
 
   @Override
   public void onRevisionCreated(RevisionCreatedListener.Event event) {
-    EventListenersConfig config = configProvider.get();
-    if (!config.isEnabled()) {
+    if (!configProvider.get().isEnabled()) {
       return;
     }
     /* 'branch' is not the exact reference in this case.
      * Filtering for startsWith("refs/") to filter out refs/meta/config.*/
     if (!event.getChange().branch.startsWith(RefNames.REFS)) {
-      if (config.refIsBlocked(RefNames.REFS_HEADS + event.getChange().branch)
-          || config.projectIsBlocked(event.getChange().project)) {
+      EventsFilter filter = eventsFilter.get();
+      if (filter.refIsBlocked(RefNames.REFS_HEADS + event.getChange().branch)
+          || filter.projectIsBlocked(event.getChange().project)) {
         return;
       }
       queue.scheduleSccCreation(event);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/RefUpdateListener.java
index 8da4990..3a04f53 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/RefUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/RefUpdateListener.java
@@ -18,18 +18,23 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.parsing.EiffelEventParsingQueue;
 
 public class RefUpdateListener implements GitReferenceUpdatedListener {
 
   private final EiffelEventParsingQueue queue;
   private final Provider<EventListenersConfig> configProvider;
+  private final Provider<EventsFilter> eventsFilter;
 
   @Inject
   public RefUpdateListener(
-      EiffelEventParsingQueue queue, Provider<EventListenersConfig> configProvider) {
+      EiffelEventParsingQueue queue,
+      Provider<EventListenersConfig> configProvider,
+      Provider<EventsFilter> eventsFilter) {
     this.queue = queue;
     this.configProvider = configProvider;
+    this.eventsFilter = eventsFilter;
   }
 
   @Override
@@ -39,8 +44,10 @@
       return;
     }
 
-    if (config.refIsBlocked(event.getRefName())
-        || config.projectIsBlocked(event.getProjectName())) {
+    EventsFilter filter = eventsFilter.get();
+
+    if (filter.refIsBlocked(event.getRefName())
+        || filter.projectIsBlocked(event.getProjectName())) {
       return;
     }
     /* The reference was not deleted. */
@@ -51,7 +58,7 @@
       }
       /* Updated reference is a tag. */
       else if (event.getRefName().startsWith(RefNames.REFS_TAGS)) {
-        queue.scheduleArtcCreation(event, branch -> config.refIsBlocked(branch), config.blockLightWeightTags());
+        queue.scheduleArtcCreation(event);
       }
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
index 6b38d55..d5d3ff0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
@@ -32,8 +32,10 @@
 import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.eventseiffel.EiffelEventHub;
 import com.googlesource.gerrit.plugins.eventseiffel.cache.EiffelEventIdLookupException;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.CompositionDefinedEventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.EventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey;
@@ -47,7 +49,6 @@
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
@@ -71,17 +72,20 @@
   private final GitRepositoryManager repoManager;
   private final UnprocessedCommitsWalker.Factory walkerFactory;
   private final EiffelEventMapper mapper;
+  private final Provider<EventsFilter> eventsFilter;
 
   @Inject
   public EiffelEventParser(
       EiffelEventHub eventQueue,
       GitRepositoryManager repoManager,
       EiffelEventMapper mapper,
-      UnprocessedCommitsWalker.Factory walkerFactory) {
+      UnprocessedCommitsWalker.Factory walkerFactory,
+      Provider<EventsFilter> eventsFilter) {
     this.eventHub = eventQueue;
     this.repoManager = repoManager;
     this.walkerFactory = walkerFactory;
     this.mapper = mapper;
+    this.eventsFilter = eventsFilter;
   }
 
   public void createAndScheduleSccFromEvent(Event event) {
@@ -217,18 +221,13 @@
   }
 
   public void createAndScheduleArtc(
-      String projectName,
-      String tagName,
-      Long creationTime,
-      boolean force,
-      Function<String, Boolean> blockedRefMatcher,
-      boolean blockLightWeightTags) {
+      String projectName, String tagName, Long creationTime, boolean force) {
     try {
       CompositionDefinedEventKey cd =
           CompositionDefinedEventKey.create(mapper.tagCompositionName(projectName), tagName);
       Optional<UUID> oldCdId = eventHub.getExistingId(cd);
       if (oldCdId.isEmpty() || force) {
-        createAndScheduleCd(projectName, tagName, creationTime, force, blockedRefMatcher, blockLightWeightTags);
+        createAndScheduleCd(projectName, tagName, creationTime, force);
         Optional<UUID> cdId = eventHub.getExistingId(cd);
         if (cdId.isPresent() && !cdId.equals(oldCdId)) {
           pushToHub(mapper.toArtc(projectName, tagName, creationTime, cdId.get()), force);
@@ -251,17 +250,13 @@
   }
 
   private void createAndScheduleCd(
-      String projectName,
-      String tagName,
-      Long creationTime,
-      boolean force,
-      Function<String, Boolean> blockedRefMatcher,
-      boolean blockLightWeightTags) {
+      String projectName, String tagName, Long creationTime, boolean force) {
     Optional<UUID> scsId = Optional.empty();
     List<Ref> refs = null;
 
     try {
-      ObjectId objectId = peelTag(projectName, tagName, blockLightWeightTags);
+      EventsFilter filter = eventsFilter.get();
+      ObjectId objectId = peelTag(projectName, tagName, filter.blockLightWeightTags());
       if (objectId == null) {
         return;
       }
@@ -312,7 +307,7 @@
           RevWalk rw = new RevWalk(repo);
           refs =
               refs.stream()
-                  .filter(ref -> !blockedRefMatcher.apply(ref.getName()))
+                  .filter(ref -> !filter.refIsBlocked(ref.getName()))
                   .collect(Collectors.toList());
           branches = RevWalkUtils.findBranchesReachableFrom(rw.parseCommit(objectId), rw, refs);
         } catch (IOException e) {
@@ -351,10 +346,8 @@
       Ref tagRef = repo.getRefDatabase().exactRef(Constants.R_TAGS + tagName);
       if (tagRef != null) {
         ObjectId peeled = repo.getRefDatabase().peel(tagRef).getPeeledObjectId();
-        if (peeled != null)
-          return peeled;
-        if (!blockLightWeightTags)
-          return tagRef.getObjectId();
+        if (peeled != null) return peeled;
+        if (!blockLightWeightTags) return tagRef.getObjectId();
         logger.atInfo().log("Creation of CD is blocked for lightweight tags");
         return null;
       }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
index 36e69ca..1fd7ec5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
@@ -32,7 +32,6 @@
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledFuture;
-import java.util.function.Function;
 
 public class EiffelEventParsingQueue {
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
@@ -143,18 +142,15 @@
         });
   }
 
-  public void scheduleArtcCreation(
-      GitReferenceUpdatedListener.Event event, Function<String, Boolean> blockedRefMatcher, boolean blockLightWeightTags) {
+  public void scheduleArtcCreation(GitReferenceUpdatedListener.Event event) {
     scheduleArtcCreation(
         event.getProjectName(),
         event.getRefName().substring(RefNames.REFS_TAGS.length()),
         TimeUtil.nowMs(),
-        false,
-        blockedRefMatcher,
-        blockLightWeightTags);
+        false);
   }
 
-  public void scheduleArtcCreation(TagResource resource, boolean force, boolean blockLightWeightTags) {
+  public void scheduleArtcCreation(TagResource resource, boolean force) {
     String tagRef = resource.getRef();
     scheduleArtcCreation(
         resource.getName(),
@@ -162,26 +158,18 @@
             ? tagRef.substring(RefNames.REFS_TAGS.length())
             : tagRef,
         resource.getTagInfo().created.getTime(),
-        force,
-        branch -> false,
-        blockLightWeightTags);
+        force);
   }
 
   public void scheduleArtcCreation(
-      String projectName,
-      String tagName,
-      Long creationTime,
-      boolean force,
-      Function<String, Boolean> blockedRefMatcher,
-      boolean blockLightWeightTags) {
+      String projectName, String tagName, Long creationTime, boolean force) {
     schedule(
         new EventParsingWorker(ARTC, projectName, tagName) {
 
           @Override
           public void doRun() {
             try {
-              eventParser.createAndScheduleArtc(
-                  projectName, tagName, creationTime, force, blockedRefMatcher, blockLightWeightTags);
+              eventParser.createAndScheduleArtc(projectName, tagName, creationTime, force);
             } catch (Exception e) {
               logger.atSevere().withCause(e).log(
                   "Failed to create ARTC for %s:%s", projectName, tagName);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateArtcs.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateArtcs.java
index 7c53a2d..9a07c0f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateArtcs.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/rest/CreateArtcs.java
@@ -25,8 +25,6 @@
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.googlesource.gerrit.plugins.eventseiffel.parsing.EiffelEventParsingQueue;
-import com.google.inject.Provider;
-import com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig;
 
 @Singleton
 @RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
@@ -36,18 +34,16 @@
   }
 
   private final EiffelEventParsingQueue queue;
-  private final Provider<EventListenersConfig> configProvider;
 
   @Inject
-  CreateArtcs(EiffelEventParsingQueue queue, Provider<EventListenersConfig> configProvider) {
+  CreateArtcs(EiffelEventParsingQueue queue) {
     this.queue = queue;
-    this.configProvider = configProvider;
   }
 
   @Override
   public Response<?> apply(TagResource resource, CreateArtcs.Input input)
       throws AuthException, BadRequestException, ResourceConflictException, Exception {
-    queue.scheduleArtcCreation(resource, input.force, configProvider.get().blockLightWeightTags());
+    queue.scheduleArtcCreation(resource, input.force);
     return EventCreationResponse.artc(resource);
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
index c847bb0..3652427 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTest.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.eventseiffel;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter.Provider.toCombinedMatcher;
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCC;
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
 
@@ -24,6 +25,7 @@
 import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.extensions.api.projects.TagInput;
 import com.google.inject.Provider;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.EventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.api.EventStorageException;
@@ -184,6 +186,39 @@
     return gApi.projects().name(project.get()).tag(input.ref).create(input).get().ref;
   }
 
+  public static class TestEventsFilterProvider implements Provider<EventsFilter> {
+    private static String[] refPatterns;
+    private static String[] projectPatterns;
+    private static boolean blockLightweightTags;
+
+    static {
+      reset();
+    }
+
+    public static void reset() {
+      refPatterns = projectPatterns = new String[0];
+      blockLightweightTags = false;
+    }
+
+    public static void setBlockedRefPatterns(String... patterns) {
+      refPatterns = patterns;
+    }
+
+    public static void setBlockedProjectPatterns(String... patterns) {
+      projectPatterns = patterns;
+    }
+
+    public static void blockLightWeightTags() {
+      blockLightweightTags = true;
+    }
+
+    @Override
+    public EventsFilter get() {
+      return new EventsFilter(
+          toCombinedMatcher(projectPatterns), toCombinedMatcher(refPatterns), blockLightweightTags);
+    }
+  }
+
   public static class TestEventFactoryProvider implements Provider<EiffelEventFactory> {
 
     @Override
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTestModule.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTestModule.java
index 3b839dc..f51402a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTestModule.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/EiffelEventsTestModule.java
@@ -20,9 +20,11 @@
 import com.google.inject.Singleton;
 import com.google.inject.internal.UniqueAnnotations;
 import com.googlesource.gerrit.plugins.eventseiffel.EiffelEventsTest.TestEventFactoryProvider;
+import com.googlesource.gerrit.plugins.eventseiffel.EiffelEventsTest.TestEventsFilterProvider;
 import com.googlesource.gerrit.plugins.eventseiffel.cache.EiffelEventIdCacheImpl;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventIdCacheConfig;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventMappingConfig;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.api.EventStorage;
 import com.googlesource.gerrit.plugins.eventseiffel.mapping.EiffelEventFactory;
 import com.googlesource.gerrit.plugins.eventseiffel.parsing.EiffelEventParsingExecutor;
@@ -43,6 +45,7 @@
     bind(TestEventPublisher.class).in(Scopes.SINGLETON);
     bind(EiffelEventHub.Consumer.class).to(TestEventPublisher.class);
 
+    bind(EventsFilter.class).toProvider(TestEventsFilterProvider.class);
     bind(EiffelEventParsingQueue.class);
     bind(EiffelEventFactory.class).toProvider(TestEventFactoryProvider.class);
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventsFilterTest.java
similarity index 66%
rename from src/test/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfigTest.java
rename to src/test/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventsFilterTest.java
index bee0989..268cc2c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventListenersConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/config/EventsFilterTest.java
@@ -14,9 +14,9 @@
 
 package com.googlesource.gerrit.plugins.eventseiffel.config;
 
-import static com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig.Provider.filterMatches;
-import static com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig.Provider.fromConfig;
-import static com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig.Provider.toCombinedMatcher;
+import static com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter.Provider.filterMatches;
+import static com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter.Provider.fromConfig;
+import static com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter.Provider.toCombinedMatcher;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -24,51 +24,51 @@
 import org.eclipse.jgit.lib.Config;
 import org.junit.Test;
 
-public class EventListenersConfigTest {
+public class EventsFilterTest {
 
   @Test
   public void regexBlockRefPattern() throws Exception {
-    EventListenersConfig cfg = refsPatterns("^refs/.*/blocked");
-    assertTrue(cfg.refIsBlocked("refs/that/are/blocked"));
-    assertFalse(cfg.refIsBlocked("refs/allowed"));
+    EventsFilter filter = refsPatterns("^refs/.*/blocked");
+    assertTrue(filter.refIsBlocked("refs/that/are/blocked"));
+    assertFalse(filter.refIsBlocked("refs/allowed"));
 
-    cfg = refsPatterns("^refs/(heads|tags)");
-    assertTrue(cfg.refIsBlocked("refs/heads"));
-    assertTrue(cfg.refIsBlocked("refs/tags"));
-    assertFalse(cfg.refIsBlocked("refs/meta"));
+    filter = refsPatterns("^refs/(heads|tags)");
+    assertTrue(filter.refIsBlocked("refs/heads"));
+    assertTrue(filter.refIsBlocked("refs/tags"));
+    assertFalse(filter.refIsBlocked("refs/meta"));
   }
 
   @Test
   public void wildcardBlockRefPattern() throws Exception {
-    EventListenersConfig cfg = refsPatterns("");
-    assertFalse(cfg.refIsBlocked("refs/blocked/always"));
+    EventsFilter filter = refsPatterns("");
+    assertFalse(filter.refIsBlocked("refs/blocked/always"));
 
-    cfg = refsPatterns("refs/blocked/*");
-    assertTrue(cfg.refIsBlocked("refs/blocked/always"));
-    assertFalse(cfg.refIsBlocked("refs/allowed/always"));
+    filter = refsPatterns("refs/blocked/*");
+    assertTrue(filter.refIsBlocked("refs/blocked/always"));
+    assertFalse(filter.refIsBlocked("refs/allowed/always"));
   }
 
   @Test
   public void exactBlockRefPattern() throws Exception {
-    EventListenersConfig cfg = refsPatterns("");
-    assertFalse(cfg.refIsBlocked("refs/blocked/exact"));
+    EventsFilter filter = refsPatterns("");
+    assertFalse(filter.refIsBlocked("refs/blocked/exact"));
 
-    cfg = refsPatterns("refs/blocked/exact");
-    assertTrue(cfg.refIsBlocked("refs/blocked/exact"));
-    assertFalse(cfg.refIsBlocked("refs/blocked/exact2"));
+    filter = refsPatterns("refs/blocked/exact");
+    assertTrue(filter.refIsBlocked("refs/blocked/exact"));
+    assertFalse(filter.refIsBlocked("refs/blocked/exact2"));
   }
 
   @Test
   public void combinedBlockRefPattern() throws Exception {
-    EventListenersConfig cfg = refsPatterns("");
-    assertFalse(cfg.refIsBlocked("refs/certainly/blocked"));
-    assertFalse(cfg.refIsBlocked("refs/blocked/always"));
-    assertFalse(cfg.refIsBlocked("refs/not/allowed/at/all"));
+    EventsFilter filter = refsPatterns("");
+    assertFalse(filter.refIsBlocked("refs/certainly/blocked"));
+    assertFalse(filter.refIsBlocked("refs/blocked/always"));
+    assertFalse(filter.refIsBlocked("refs/not/allowed/at/all"));
 
-    cfg = refsPatterns("refs/blocked/*", "^refs/.*/blocked", "refs/not/allowed/at/all");
-    assertTrue(cfg.refIsBlocked("refs/certainly/blocked"));
-    assertTrue(cfg.refIsBlocked("refs/blocked/always"));
-    assertTrue(cfg.refIsBlocked("refs/not/allowed/at/all"));
+    filter = refsPatterns("refs/blocked/*", "^refs/.*/blocked", "refs/not/allowed/at/all");
+    assertTrue(filter.refIsBlocked("refs/certainly/blocked"));
+    assertTrue(filter.refIsBlocked("refs/blocked/always"));
+    assertTrue(filter.refIsBlocked("refs/not/allowed/at/all"));
   }
 
   @Test
@@ -132,26 +132,25 @@
   public void configParsedCorrectly() throws Exception {
     Config cfg = new Config();
     cfg.fromText(
-        "[EventListeners]\n"
+        "[EventsFilter]\n"
             + "blockedRef = refs/heads/blocked\n"
             + "blockedRef = refs/heads/also/blocked\n"
             + "blockedProject = blocked/project\n"
             + "blockedProject = blocked/projects/*\n"
             + "enabled = False\n");
-    EventListenersConfig fromText = fromConfig(cfg);
+    EventsFilter fromText = fromConfig(cfg);
 
     assertTrue(fromText.refIsBlocked("refs/heads/blocked"));
     assertTrue(fromText.refIsBlocked("refs/heads/also/blocked"));
     assertTrue(fromText.projectIsBlocked("blocked/project"));
     assertTrue(fromText.projectIsBlocked("blocked/projects/something"));
-    assertFalse(fromText.isEnabled());
   }
 
-  private EventListenersConfig refsPatterns(String... patterns) {
-    return new EventListenersConfig(true, toCombinedMatcher(), toCombinedMatcher(patterns), false);
+  private EventsFilter refsPatterns(String... patterns) {
+    return new EventsFilter(toCombinedMatcher(), toCombinedMatcher(patterns), false);
   }
 
-  private EventListenersConfig projectsPatterns(String... patterns) {
-    return new EventListenersConfig(true, toCombinedMatcher(patterns), toCombinedMatcher(), false);
+  private EventsFilter projectsPatterns(String... patterns) {
+    return new EventsFilter(toCombinedMatcher(patterns), toCombinedMatcher(), false);
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
index 93ec6a6..0527b19 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
@@ -14,7 +14,6 @@
 
 package com.googlesource.gerrit.plugins.eventseiffel.listeners;
 
-import static com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig.Provider.toCombinedMatcher;
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCC;
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
 import static org.junit.Assert.assertEquals;
@@ -38,6 +37,7 @@
 import com.googlesource.gerrit.plugins.eventseiffel.TestEventPublisher;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EiffelConfig;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventListenersConfig;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.ArtifactEventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.CompositionDefinedEventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.EventKey;
@@ -64,6 +64,7 @@
   @Before
   public void before() {
     publisher = plugin.getSysInjector().getInstance(TestEventPublisher.class);
+    TestEventsFilterProvider.reset();
     TestEventListenersConfigProvider.reset();
   }
 
@@ -175,7 +176,7 @@
 
   @Test
   public void noEventsCreatedWhenRefIsBlocked() throws Exception {
-    TestEventListenersConfigProvider.setBlockedRefPatterns("refs/heads/master");
+    TestEventsFilterProvider.setBlockedRefPatterns("refs/heads/master");
     PushOneCommit.Result res = createChange();
     SourceChangeEventKey sccKey = toSccKey(res);
     EiffelEvent sccEvent = publisher.getPublished(sccKey);
@@ -188,7 +189,7 @@
 
   @Test
   public void noEventsCreatedWhenProjectIsBlocked() throws Exception {
-    TestEventListenersConfigProvider.setBlockedProjectPatterns(project.get());
+    TestEventsFilterProvider.setBlockedProjectPatterns(project.get());
     PushOneCommit.Result res = createChange();
     SourceChangeEventKey sccKey = toSccKey(res);
     EiffelEvent sccEvent = publisher.getPublished(sccKey);
@@ -232,7 +233,7 @@
 
   @Test
   public void tagCreatedResultsInNoEventWhenBranchIsBlocked() throws Exception {
-    TestEventListenersConfigProvider.setBlockedRefPatterns("refs/heads/master");
+    TestEventsFilterProvider.setBlockedRefPatterns("refs/heads/master");
     String tagName = createTagRef(true).substring(RefNames.REFS_TAGS.length());
 
     EventKey artcKey = ArtifactEventKey.create(tagPURL(project.get(), tagName));
@@ -251,7 +252,7 @@
   @Test
   public void tagCreatedResultsInNoEventWhenBranchIsBlockedSCSHandled() throws Exception {
     UUID parentEventId = markMasterAsHandled(SCS);
-    TestEventListenersConfigProvider.setBlockedRefPatterns("refs/heads/master");
+    TestEventsFilterProvider.setBlockedRefPatterns("refs/heads/master");
     String tagName = createTagRef(true).substring(RefNames.REFS_TAGS.length());
 
     EventKey artcKey = ArtifactEventKey.create(tagPURL(project.get(), tagName));
@@ -309,8 +310,6 @@
 
   public static class TestEventListenersConfigProvider implements Provider<EventListenersConfig> {
     private static boolean enabled;
-    private static String[] refPatterns;
-    private static String[] projectPatterns;
 
     static {
       reset();
@@ -318,15 +317,6 @@
 
     static void reset() {
       enabled = true;
-      refPatterns = projectPatterns = new String[0];
-    }
-
-    static void setBlockedRefPatterns(String... patterns) {
-      refPatterns = patterns;
-    }
-
-    static void setBlockedProjectPatterns(String... patterns) {
-      projectPatterns = patterns;
     }
 
     static void disable() {
@@ -339,8 +329,7 @@
 
     @Override
     public EventListenersConfig get() {
-      return new EventListenersConfig(
-          enabled, toCombinedMatcher(projectPatterns), toCombinedMatcher(refPatterns), false);
+      return new EventListenersConfig(enabled);
     }
   }
 
@@ -350,6 +339,7 @@
     protected void configure() {
       install(new EiffelEventsTestModule());
       bind(EventListenersConfig.class).toProvider(TestEventListenersConfigProvider.class);
+      bind(EventsFilter.class).toProvider(TestEventsFilterProvider.class);
       DynamicSet.bind(binder(), RevisionCreatedListener.class).to(PatchsetCreatedListener.class);
       DynamicSet.bind(binder(), GitReferenceUpdatedListener.class).to(RefUpdateListener.class);
       bind(EiffelConfig.class).toProvider(EiffelConfig.Provider.class).in(Scopes.SINGLETON);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
index 9257cb0..cd5c38d 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserIT.java
@@ -35,6 +35,7 @@
 import com.googlesource.gerrit.plugins.eventseiffel.config.EiffelConfig;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventIdCacheConfig;
 import com.googlesource.gerrit.plugins.eventseiffel.config.EventMappingConfig;
+import com.googlesource.gerrit.plugins.eventseiffel.config.EventsFilter;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.ArtifactEventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.CompositionDefinedEventKey;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.EventKey;
@@ -64,6 +65,7 @@
   public void setUp() {
     eventParser = plugin.getSysInjector().getInstance(EiffelEventParser.class);
     TestEventHub.EVENTS.clear();
+    TestEventsFilterProvider.reset();
   }
 
   @Test
@@ -210,7 +212,7 @@
     String ref = setCdHandled();
     ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref));
     markAsHandled(artc);
-    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false, branch -> false, false);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(0, TestEventHub.EVENTS.size());
   }
 
@@ -224,7 +226,7 @@
     markAsHandled(cd);
     ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref));
     markAsHandled(artc);
-    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, true, branch -> false, false);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, true);
     assertEquals(2, TestEventHub.EVENTS.size());
     assertCorrectEvent(0, cd);
     assertCorrectEvent(1, artc);
@@ -258,7 +260,7 @@
     CompositionDefinedEventKey cd =
         CompositionDefinedEventKey.create(tagCompositionName(project.get(), "localhost"), ref);
 
-    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false, branch -> false, false);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(4, TestEventHub.EVENTS.size());
     assertCorrectEvent(0, scc);
     assertCorrectEvent(1, scs);
@@ -268,16 +270,17 @@
 
   @Test
   public void artcQueuedBlockBranch() throws Exception {
+    TestEventsFilterProvider.setBlockedRefPatterns("refs/heads/master");
     String ref =
         createTagRef(getHead(repo(), "HEAD").getName(), true).substring(Constants.R_TAGS.length());
 
-    eventParser.createAndScheduleArtc(
-        project.get(), ref, EPOCH_MILLIS, false, branch -> branch.equals("refs/heads/master"), false);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(0, TestEventHub.EVENTS.size());
   }
 
   @Test
   public void artcQueuedBlockBranchButReachableFromOtherBranch() throws Exception {
+    TestEventsFilterProvider.setBlockedRefPatterns("refs/heads/master");
     createBranch(BranchNameKey.create(project, "other-branch"));
     String ref =
         createTagRef(getHead(repo(), "HEAD").getName(), true).substring(Constants.R_TAGS.length());
@@ -289,8 +292,7 @@
     CompositionDefinedEventKey cd =
         CompositionDefinedEventKey.create(tagCompositionName(project.get(), "localhost"), ref);
 
-    eventParser.createAndScheduleArtc(
-        project.get(), ref, EPOCH_MILLIS, false, branch -> branch.equals("refs/heads/master"), false);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(4, TestEventHub.EVENTS.size());
     assertCorrectEvent(0, scc);
     assertCorrectEvent(1, scs);
@@ -300,34 +302,34 @@
 
   @Test
   public void artcQueuedNoTagCreated() throws Exception {
-    eventParser.createAndScheduleArtc(
-        project.get(), TAG_NAME, EPOCH_MILLIS, false, branch -> false, false);
+    eventParser.createAndScheduleArtc(project.get(), TAG_NAME, EPOCH_MILLIS, false);
     assertEquals(0, TestEventHub.EVENTS.size());
   }
 
   @Test
   public void annotatedTagArtcQueuedscsHandled() throws Exception {
-    assertArtcQueuedScsHandled(true, false);
+    assertArtcQueuedScsHandled(true);
   }
 
   @Test
   public void lightWeightTagArtcQueuedscsHandled() throws Exception {
-    assertArtcQueuedScsHandled(false, false);
+    assertArtcQueuedScsHandled(false);
   }
 
   @Test
   public void annotatedTagArtcQueuedscsHandledLightWeightBlocked() throws Exception {
-    assertArtcQueuedScsHandled(true, true);
+    TestEventsFilterProvider.blockLightWeightTags();
+    assertArtcQueuedScsHandled(true);
   }
 
   @Test
   public void lightWeightTagArtcQueuedscsHandledLightWeightBlocked() throws Exception {
     setScsHandled();
+    TestEventsFilterProvider.blockLightWeightTags();
     String ref =
-        createTagRef(getHead(repo(), "HEAD").getName(), false)
-            .substring(Constants.R_TAGS.length());
+        createTagRef(getHead(repo(), "HEAD").getName(), false).substring(Constants.R_TAGS.length());
 
-    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false, branch -> false, true);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(0, TestEventHub.EVENTS.size());
   }
 
@@ -336,7 +338,7 @@
     String ref = setCdHandled();
     ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), ref));
 
-    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false, branch -> false, false);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(0, TestEventHub.EVENTS.size());
   }
 
@@ -344,14 +346,14 @@
   @UseLocalDisk
   @GlobalPluginConfig(pluginName = PLUGIN_NAME, name = "EiffelEvent.namespace", value = NAMESPACE)
   public void artcQueuedscsHandledWithCustomNameSpace() throws Exception {
-    assertArtcQueuedScsHandled(false, false, NAMESPACE);
+    assertArtcQueuedScsHandled(false, NAMESPACE);
   }
 
-  private void assertArtcQueuedScsHandled(boolean annotated, boolean blockLightWeight) throws Exception {
-    assertArtcQueuedScsHandled(annotated, blockLightWeight, "localhost");
+  private void assertArtcQueuedScsHandled(boolean annotated) throws Exception {
+    assertArtcQueuedScsHandled(annotated, "localhost");
   }
 
-  private void assertArtcQueuedScsHandled(boolean annotated, boolean blockLightWeight, String namespace) throws Exception {
+  private void assertArtcQueuedScsHandled(boolean annotated, String namespace) throws Exception {
     setScsHandled();
     String ref =
         createTagRef(getHead(repo(), "HEAD").getName(), annotated)
@@ -360,7 +362,7 @@
     CompositionDefinedEventKey cd =
         CompositionDefinedEventKey.create(tagCompositionName(project.get(), namespace), ref);
 
-    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false, branch -> false, blockLightWeight);
+    eventParser.createAndScheduleArtc(project.get(), ref, EPOCH_MILLIS, false);
     assertEquals(2, TestEventHub.EVENTS.size());
     assertCorrectEvent(0, cd);
     assertCorrectEvent(1, artc);
@@ -410,6 +412,7 @@
     protected void configure() {
       bind(EventStorage.class).toProvider(TestEventStorage.Provider.class).in(Singleton.class);
       bind(EventIdCacheConfig.class).toProvider(EventIdCacheConfig.Provider.class);
+      bind(EventsFilter.class).toProvider(TestEventsFilterProvider.class);
       install(EiffelEventIdCacheImpl.module());
       bind(EiffelEventHub.class).to(TestEventHub.class);
       bind(EventMappingConfig.class).toProvider(EventMappingConfig.Provider.class);