diff --git a/pom.xml b/pom.xml
index a0c628c9..a3b583e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,9 +77,9 @@
${project.basedir}/processor/target/site/jacoco-aggregate/jacoco.xml,${project.basedir}/processor/target/site/jacoco/jacoco.xml
**/example/**
- **/processor/model/**,**/exceptions/**,**/generated/**
+ Only genuine boilerplate is excluded (DTO model, exception classes, constants
+ holders, generated sources); mapper logic is intentionally measured. -->
+ **/processor/model/**,**/exceptions/**,**/generated/**,**/JavadocConstants.java
3.13.0
diff --git a/processor/pom.xml b/processor/pom.xml
index 5d6b0bfa..5d9787db 100644
--- a/processor/pom.xml
+++ b/processor/pom.xml
@@ -357,6 +357,8 @@
**/processor/model/**
**/exceptions/**
+
+ **/JavadocConstants.*
diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/ActivePerformanceTrackerTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/ActivePerformanceTrackerTest.java
index 709fa08d..208b2c06 100644
--- a/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/ActivePerformanceTrackerTest.java
+++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/ActivePerformanceTrackerTest.java
@@ -364,16 +364,8 @@ void multipleGenerators_accumulateTimeAndCalls() throws IOException {
JsonNode genStats = root.get("generatorStats");
assertEquals(2, genStats.size());
- // Find GenA by name (stats are sorted by elapsed time, so index is unpredictable)
- JsonNode genA = null;
- for (int i = 0; i < genStats.size(); i++) {
- if ("GenA".equals(genStats.get(i).get("name").asText())) {
- genA = genStats.get(i);
- break;
- }
- }
- assertNotNull(genA, "GenA should be present in generator stats");
- assertEquals(2, genA.get("calls").asInt(), "GenA was called twice");
+ JsonNode genA = genStats.get(genStats.get(0).get("name").asText().equals("GenA") ? 0 : 1);
+ assertEquals(2, genA.get("calls").asInt());
}
@Test
diff --git a/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/NoOpPerformanceTrackerTest.java b/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/NoOpPerformanceTrackerTest.java
new file mode 100644
index 00000000..623ca2e6
--- /dev/null
+++ b/processor/src/test/java/org/javahelpers/simple/builders/processor/processing/logging/NoOpPerformanceTrackerTest.java
@@ -0,0 +1,56 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2026 Andreas Igel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package org.javahelpers.simple.builders.processor.processing.logging;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Unit tests for {@link NoOpPerformanceTracker}.
+ *
+ *
Verifies that every tracking call is a safe no-op, including {@code generateReport} with a
+ * null logger (the report must be dropped entirely when tracking is disabled).
+ */
+class NoOpPerformanceTrackerTest {
+
+ private final NoOpPerformanceTracker tracker = new NoOpPerformanceTracker();
+
+ @Test
+ void allTrackingCallsAreSafeNoOps() {
+ assertDoesNotThrow(
+ () -> {
+ tracker.startPhase();
+ tracker.endPhase("phase");
+ tracker.startGenerator();
+ tracker.endGenerator("generator");
+ tracker.startEnhancer();
+ tracker.endEnhancer("enhancer");
+ tracker.startClass("class");
+ tracker.endClass(1, 2);
+ tracker.generateReport(null);
+ });
+ }
+}