From 7e84448a2304e4cc7d9a8f12c595cc1ff1ba969a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emma=20S=C3=B6derberg?= <emma.m.soderberg@gmail.com>
Date: Wed, 9 Dec 2020 15:53:35 +0100
Subject: [PATCH] Add more precise tracing of collection contributions

---
 src/template/ast/Collections.tt  |  6 ++++--
 src/template/trace/TraceHooks.tt | 14 ++++++++++----
 src/template/trace/Tracer.tt     | 25 +++++++++++++++++--------
 3 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/src/template/ast/Collections.tt b/src/template/ast/Collections.tt
index dda5d29c..b9e44fe5 100644
--- a/src/template/ast/Collections.tt
+++ b/src/template/ast/Collections.tt
@@ -234,15 +234,17 @@ $endif
 ]]
 
 CollEq.contributeStatement [[
-$include(CollEq.traceContributionBegin)
+    $include(CollEq.traceContributionBegin)
 $if(#hasCondition)
     if (#getCondition) {
       $include(CollEq.addValueToCollection)
+      $include(CollEq.traceContributionEnd)
     }
 $else
     $include(CollEq.addValueToCollection)
+    $include(CollEq.traceContributionEnd)
 $endif
-$include(CollEq.traceContributionEnd)
+    $include(CollEq.traceContributionEnd)
 ]]
 
 CollEq.addValueToCollection [[
diff --git a/src/template/trace/TraceHooks.tt b/src/template/trace/TraceHooks.tt
index e99d06e2..3140582b 100644
--- a/src/template/trace/TraceHooks.tt
+++ b/src/template/trace/TraceHooks.tt
@@ -323,14 +323,20 @@ state().trace().flushAttr(this, "#hostClassName.#signatureJavaStyle", "", #(sign
 $endif
 ]]
 
-CollEq.traceContributionBegin [[
+CollEq.traceContributionCheckBegin [[
 $if (TraceColl)
-state().trace().contributionBegin(this, "#collectionId");
+state().trace().contributionCheckBegin(this, "#collectionId", "#getCondition");
 $endif
 ]]
 
-CollEq.traceContributionEnd [[
+CollEq.traceContributionCheckEnd [[
 $if (TraceColl)
-state().trace().contributionEnd(this, "#collectionId");
+state().trace().contributionCheckEnd(this, "#collectionId", "#getCondition");
+$endif
+]]
+
+CollEq.traceContributionCheckMatch [[
+$if (TraceColl)
+state().trace().contributionCheckMatch(this, "#collectionId", "#getCondition", "#getValue");
 $endif
 ]]
diff --git a/src/template/trace/Tracer.tt b/src/template/trace/Tracer.tt
index ee3b37d3..7346ed00 100644
--- a/src/template/trace/Tracer.tt
+++ b/src/template/trace/Tracer.tt
@@ -82,8 +82,9 @@ public static class Trace {
     INC_FLUSH_ATTR,
 
     // Flag: --tracing=coll
-    CONTRIBUTION_BEGIN,
-    CONTRIBUTION_END;
+    CONTRIBUTION_CHECK_BEGIN,
+    CONTRIBUTION_CHECK_MATCH,
+    CONTRIBUTION_CHECK_END;
   }
 
   /**
@@ -338,18 +339,26 @@ public static class Trace {
   }
 
   /**
-   * Trace that a contribution to a collection attribute begun.
+   * Trace that a contribution check to a collection attribute begun.
    */
-  public void contributionBegin($ASTNode node, String attr) {
-    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_BEGIN, node, attr, "", "");
+  public void contributioniCheckBegin($ASTNode node, String attr, String check) {
+    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_CHECK_BEGIN, node, attr, check, "");
   }
 
   /**
-   * Trace that a contribution to a collection attribute ended.
+   * Trace that a contribution check to a collection attribute ended.
    */
-  public void contributionEnd($ASTNode node, String attr) {
-    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_END, node, attr, "", "");
+  public void contributionCheckEnd($ASTNode node, String attr, String check) {
+    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_CHECK_END, node, attr, check, "");
   }
+
+  /**
+   * Trace that a contribution check to a collection attribute found a match.
+   */
+  public void contributionCheckMatch($ASTNode node, String attr, String check, Object value) {
+    receiver.accept($StateClass.Trace.Event.CONTRIBUTION_CHECK_MATCH, node, attr, check, value);
+  }
+
 }
 $endif
 ]]
-- 
GitLab