Add node level statistics to query outputs

Change-Id: I4d56c48ed83350c4ef19ae4449544bf0fff7b94a
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 e683034..00b7dcf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/task/TaskAttributeFactory.java
@@ -59,6 +59,12 @@
   }
 
   public static class TaskAttribute {
+    public static class Statistics {
+      public boolean isApplicableRefreshRequired;
+      public boolean isSubNodeReloadRequired;
+      public boolean isTaskRefreshNeeded;
+    }
+
     public Boolean applicable;
     public Map<String, String> exported;
     public Boolean hasPass;
@@ -69,6 +75,7 @@
     public Status status;
     public List<TaskAttribute> subTasks;
     public Long evaluationMilliSeconds;
+    public Statistics statistics;
 
     public TaskAttribute(String name) {
       this.name = name;
@@ -143,9 +150,10 @@
       this.node = node;
       this.matchCache = matchCache;
       this.task = node.task;
-      this.attribute = new TaskAttribute(task.name());
+      attribute = new TaskAttribute(task.name());
       if (options.includeStatistics) {
         statistics.numberOfNodes++;
+        attribute.statistics = new TaskAttribute.Statistics();
       }
     }
 
@@ -194,6 +202,13 @@
               if (options.evaluationTime) {
                 attribute.evaluationMilliSeconds = millis() - attribute.evaluationMilliSeconds;
               }
+              if (attribute.statistics != null) {
+                attribute.statistics.isApplicableRefreshRequired =
+                    node.properties.isApplicableRefreshRequired;
+                attribute.statistics.isSubNodeReloadRequired =
+                    node.properties.isSubNodeReloadRequired();
+                attribute.statistics.isTaskRefreshNeeded = node.properties.isTaskRefreshNeeded;
+              }
               return Optional.of(attribute);
             }
           }