Share MatchCache across root nodes for the same change

When the MatchCache was introduced, it was not shared across roots, fix
that.

Change-Id: I9e9e6a6ee88b83462fd9473d6dac36679f4cae37
diff --git a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
index c0ba9d7..2648701 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
@@ -92,13 +92,14 @@
   }
 
   protected PluginDefinedInfo createWithExceptions(ChangeData c) {
+    MatchCache matchCache = new MatchCache(predicateCache, c);
     TaskPluginAttribute a = new TaskPluginAttribute();
     try {
       for (Node node : definitions.getRootNodes(c)) {
         if (node == null) {
           a.roots.add(invalid());
         } else {
-          new AttributeFactory(node).create().ifPresent(t -> a.roots.add(t));
+          new AttributeFactory(node, matchCache).create().ifPresent(t -> a.roots.add(t));
         }
       }
     } catch (ConfigInvalidException | IOException | OrmException e) {
@@ -117,10 +118,6 @@
     protected Task task;
     protected TaskAttribute attribute;
 
-    protected AttributeFactory(Node node) {
-      this(node, new MatchCache(predicateCache, node.getChangeData()));
-    }
-
     protected AttributeFactory(Node node, MatchCache matchCache) {
       this.node = node;
       this.matchCache = matchCache;