You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/30 17:02:59 UTC

[camel] branch java-dsl-linenumber updated: CAMEL-17400: camel-java-dsl - Add source line number to loaded model. WIP

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch java-dsl-linenumber
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/java-dsl-linenumber by this push:
     new 70a3a3e  CAMEL-17400: camel-java-dsl - Add source line number to loaded model. WIP
70a3a3e is described below

commit 70a3a3e7b086dd4a04280c7fdc311fe960deae6e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Dec 30 18:02:20 2021 +0100

    CAMEL-17400: camel-java-dsl - Add source line number to loaded model. WIP
---
 .../main/java/org/apache/camel/builder/AdviceWith.java   |  2 +-
 .../main/java/org/apache/camel/builder/RouteBuilder.java | 16 +++++++++-------
 .../org/apache/camel/model/RouteDefinitionHelper.java    | 15 +++++++++++----
 .../java/org/apache/camel/model/RoutesDefinition.java    |  4 ++--
 4 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWith.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWith.java
index 72a99e8..87ebd6c 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWith.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/AdviceWith.java
@@ -229,7 +229,7 @@ public final class AdviceWith {
 
         // must re-prepare the merged route before it can be used
         merged.markUnprepared();
-        routes.prepareRoute(merged, builder.getClass());
+        routes.prepareRoute(merged, builder.getClass(), 0);
 
         // add the new merged route
         model.getRouteDefinitions().add(0, merged);
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
index d6ee6f0..c203394 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -497,8 +497,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
         populateRouteTemplates();
 
         // ensure routes are prepared before being populated
-        for (RouteDefinition route : routeCollection.getRoutes()) {
-            routeCollection.prepareRoute(route, this.getClass());
+        for (int i = 0; i < routeCollection.getRoutes().size(); i++) {
+            RouteDefinition route = routeCollection.getRoutes().get(i);
+            routeCollection.prepareRoute(route, this.getClass(), i);
         }
         populateRoutes();
 
@@ -522,8 +523,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
         populateRouteTemplates();
 
         // ensure routes are prepared before being populated
-        for (RouteDefinition route : routeCollection.getRoutes()) {
-            routeCollection.prepareRoute(route, this.getClass());
+        for (int i = 0; i < routeCollection.getRoutes().size(); i++) {
+            RouteDefinition route = routeCollection.getRoutes().get(i);
+            routeCollection.prepareRoute(route, this.getClass(), i);
         }
 
         // trigger update of the routes
@@ -609,9 +611,9 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
             // remember the source resource
             getRouteCollection().setResource(getResource());
 
-            for (RouteDefinition route : getRouteCollection().getRoutes()) {
-                // ensure the route is prepared after configure method is complete
-                getRouteCollection().prepareRoute(route, this.getClass());
+            for (int i = 0; i < routeCollection.getRoutes().size(); i++) {
+                RouteDefinition route = routeCollection.getRoutes().get(i);
+                routeCollection.prepareRoute(route, this.getClass(), i);
             }
 
             for (RouteBuilderLifecycleStrategy interceptor : lifecycleInterceptors) {
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
index 9a8fabf..4413ecf 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
@@ -764,7 +764,7 @@ public final class RouteDefinitionHelper {
         }
     }
 
-    public static void prepareJavaDslRoute(CamelContext camelContext, RouteDefinition route, Class<?> builder) {
+    public static void prepareJavaDslRoute(CamelContext camelContext, RouteDefinition route, Class<?> builder, int index) {
         String fqn = builder != null ? builder.getName() : null;
         if (fqn != null) {
             String name = "META-INF/services/org/apache/camel/java-dsl/" + fqn + ".dump";
@@ -773,9 +773,16 @@ public final class RouteDefinitionHelper {
                 try {
                     String lines = IOHelper.loadText(is);
                     Iterator<String> it = Arrays.stream(lines.split("\n")).iterator();
-                    // skip first line
-                    it.next();
-                    String first = it.next();
+
+                    // spool forward to the route index we want
+                    int pos = -1;
+                    String first = "";
+                    while (it.hasNext() && pos < index) {
+                        first = it.next();
+                        if (first.contains("\tfrom")) {
+                            pos++;
+                        }
+                    }
 
                     if (route.getInput().getLineNumber() < 0) {
                         String digit = StringHelper.before(first, "\t");
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
index 1d7c873..389dd38 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
@@ -225,7 +225,7 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
         return route;
     }
 
-    public void prepareRoute(RouteDefinition route, Class<?> builder) {
+    public void prepareRoute(RouteDefinition route, Class<?> builder, int index) {
         if (route.isPrepared()) {
             return;
         }
@@ -279,7 +279,7 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
         RouteDefinitionHelper.prepareRoute(getCamelContext(), route, oe, icp, ifrom, ito, oc);
 
         // enrich the route with line number details if we have metadata when using Java compiled routes
-        RouteDefinitionHelper.prepareJavaDslRoute(camelContext, route, builder);
+        RouteDefinitionHelper.prepareJavaDslRoute(camelContext, route, builder, index);
 
         if (LOG.isDebugEnabled() && route.getAppliedRouteConfigurationIds() != null) {
             LOG.debug("Route: {} is using route configurations ids: {}", route.getId(),