This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch rc in repository https://gitbox.apache.org/repos/asf/camel.git
commit 232bea92365ce3e9bba3d248faf9aa6760704637 Author: Claus Ibsen <[email protected]> AuthorDate: Tue Jan 6 15:56:56 2026 +0100 CAMEL-22817: camel-route-coverage - Improve coverage information to better match when using advicing --- .../org/apache/camel/maven/RouteCoverageMojo.java | 7 ++-- .../parser/helper/CamelXmlTreeParserHelper.java | 7 ++++ .../camel/parser/helper/RouteCoverageHelper.java | 39 +++++++++++++++------- .../camel/parser/model/CamelNodeDetails.java | 10 ++++++ .../apache/camel/parser/model/CoverageData.java | 22 ++++++++++-- 5 files changed, 68 insertions(+), 17 deletions(-) diff --git a/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/RouteCoverageMojo.java b/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/RouteCoverageMojo.java index 12f0c920143b..46e6161f87be 100644 --- a/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/RouteCoverageMojo.java +++ b/catalog/camel-report-maven-plugin/src/main/java/org/apache/camel/maven/RouteCoverageMojo.java @@ -643,13 +643,16 @@ public class RouteCoverageMojo extends AbstractMojo { boolean found = false; while (!found && it.hasNext()) { CoverageData holder = it.next(); - found = holder.getNode().equals(node.getName()); + // match by id / line number / and then EIP name + found = (holder.getNodeId() != null && holder.getNodeId().equals(node.getNodeId())) + || (holder.getLineNumber() > 0 && holder.getLineNumber() == data.getLineNumber()) + || (holder.getNode().equals(node.getName())); if (found) { data.setCount(holder.getCount()); } } - if (node.getOutputs() != null) { + if (!node.getOutputs().isEmpty()) { level.addAndGet(1); for (CamelNodeDetails child : node.getOutputs()) { gatherRouteCoverageSummary(child, it, level, answer); diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java index aedbc9cf3459..9cea18ed299e 100644 --- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java +++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java @@ -84,6 +84,12 @@ public final class CamelXmlTreeParserHelper { // skip when/otherwise (as we do this in Java DSL) boolean isWhenOrOtherwise = "when".equals(name) || "otherwise".equals(name); + String id = null; + Node nid = node.getAttributes().getNamedItem("id"); + if (nid != null) { + id = nid.getNodeValue(); + } + // only include if its a known Camel model (dont include languages) if (isRoute || isEip) { // skip route as we just keep from (and also skip when/otherwise) @@ -92,6 +98,7 @@ public final class CamelXmlTreeParserHelper { String lineNumberEnd = (String) node.getUserData(XmlLineNumberParser.LINE_NUMBER_END); newNode = nodeFactory.newNode(parent, name); newNode.setRouteId(parent.getRouteId()); + newNode.setNodeId(id); newNode.setFileName(parent.getFileName()); newNode.setLineNumber(lineNumber); newNode.setLineNumberEnd(lineNumberEnd); diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/RouteCoverageHelper.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/RouteCoverageHelper.java index 1a6962314145..6746380aa97a 100644 --- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/RouteCoverageHelper.java +++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/RouteCoverageHelper.java @@ -72,7 +72,7 @@ public final class RouteCoverageHelper { if (routeId.equals(id)) { // parse each route and build a List<CoverageData> for line by line coverage data AtomicInteger counter = new AtomicInteger(); - parseRouteData(catalog, route, answer, counter); + parseRouteData(catalog, route, answer, counter, routeId); } } } @@ -117,7 +117,7 @@ public final class RouteCoverageHelper { // parse each route and build a List<CoverageData> for line by line coverage data AtomicInteger counter = new AtomicInteger(); List<CoverageData> list = new ArrayList<>(); - parseRouteData(catalog, route, list, counter); + parseRouteData(catalog, route, list, counter, id); if (id != null && !list.isEmpty()) { list.get(0).setRouteId(id); } @@ -147,10 +147,12 @@ public final class RouteCoverageHelper { NodeList routes = dom.getElementsByTagName("route"); for (int i = 0; i < routes.getLength(); i++) { Node route = routes.item(i); + Node n = route.getAttributes().getNamedItem("id"); + String id = n != null ? n.getNodeValue() : null; // parse each route and build a List<CoverageData> for line by line coverage data AtomicInteger counter = new AtomicInteger(); List<CoverageData> data = new ArrayList<>(); - parseRouteData(catalog, route, data, counter); + parseRouteData(catalog, route, data, counter, id); // create a key which is based on the file name without extension String key = file.getName(); // strip .xml extension @@ -169,7 +171,8 @@ public final class RouteCoverageHelper { return answer; } - private static void parseRouteData(CamelCatalog catalog, Node node, List<CoverageData> data, AtomicInteger counter) { + private static void parseRouteData( + CamelCatalog catalog, Node node, List<CoverageData> data, AtomicInteger counter, String routeId) { // must be a known EIP model String key = node.getNodeName(); boolean valid = catalog.findModelNames().contains(key); // skip route as we use from instead @@ -196,12 +199,26 @@ public final class RouteCoverageHelper { if (holder != null && holder.getNode().equals(key)) { count += holder.getCount(); } + + String id = null; + Node nid = node.getAttributes().getNamedItem("id"); + if (nid != null) { + id = nid.getNodeValue(); + } + int lineNumber = 0; + Node ln = node.getAttributes().getNamedItem("sourceLineNumber"); + if (ln != null) { + lineNumber = Integer.parseInt(ln.getNodeValue()); + } + + CoverageData cd = new CoverageData(id, key, count, routeId); + cd.setLineNumber(lineNumber); if (holder == null) { // add new - data.add(counter.get(), new CoverageData(key, count)); + data.add(counter.get(), cd); } else { // replace existing - data.set(counter.get(), new CoverageData(key, count)); + data.set(counter.get(), cd); } // advance counter counter.incrementAndGet(); @@ -209,12 +226,10 @@ public final class RouteCoverageHelper { // any children NodeList children = node.getChildNodes(); - if (children != null) { - for (int i = 0; i < children.getLength(); i++) { - Node child = children.item(i); - if (child instanceof Element) { - parseRouteData(catalog, child, data, counter); - } + for (int i = 0; i < children.getLength(); i++) { + Node child = children.item(i); + if (child instanceof Element) { + parseRouteData(catalog, child, data, counter, routeId); } } } diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java index 16d786e0c9af..c986c427633f 100644 --- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java +++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java @@ -38,12 +38,14 @@ public class CamelNodeDetails { private final int order; private List<CamelNodeDetails> outputs; private String routeId; + private String nodeId; public CamelNodeDetails(CamelNodeDetails parent, String name, int order, CamelNodeDetails copy) { this.parent = parent; this.name = name; this.order = order; this.routeId = copy.getRouteId(); + this.nodeId = copy.getNodeId(); this.fileName = copy.getFileName(); this.lineNumber = copy.getLineNumber(); this.lineNumberEnd = copy.getLineNumberEnd(); @@ -99,6 +101,14 @@ public class CamelNodeDetails { this.routeId = routeId; } + public String getNodeId() { + return nodeId; + } + + public void setNodeId(String nodeId) { + this.nodeId = nodeId; + } + public String getFileName() { return fileName; } diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CoverageData.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CoverageData.java index 13bfeb4f80d9..371e13436b3f 100644 --- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CoverageData.java +++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CoverageData.java @@ -21,13 +21,17 @@ package org.apache.camel.parser.model; */ public class CoverageData { + private final String nodeId; private final String node; private final int count; private String routeId; + private int lineNumber; - public CoverageData(String node, int count) { + public CoverageData(String nodeId, String node, int count, String routeId) { + this.nodeId = nodeId; this.node = node; this.count = count; + this.routeId = routeId; } public String getNode() { @@ -38,11 +42,23 @@ public class CoverageData { return count; } + public String getRouteId() { + return routeId; + } + public void setRouteId(String routeId) { this.routeId = routeId; } - public String getRouteId() { - return routeId; + public String getNodeId() { + return nodeId; + } + + public int getLineNumber() { + return lineNumber; + } + + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; } }
