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 2018/07/13 07:17:32 UTC
[camel] 02/02: CAMEL-12639: camel-route-parser should include line
number end for Java DSL.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit f87ae126735914e03fd8b2880316c936f02f44b7
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jul 13 09:17:20 2018 +0200
CAMEL-12639: camel-route-parser should include line number end for Java DSL.
---
.../java/org/apache/camel/parser/ParserResult.java | 15 ++++++++++++---
.../org/apache/camel/parser/RouteBuilderParser.java | 21 +++++++++++++++++++++
.../camel/parser/helper/CamelJavaParserHelper.java | 17 +++++++++++------
.../apache/camel/parser/java/MyCdiRouteBuilder.java | 4 +++-
.../parser/java/RoasterEndpointInjectTest.java | 12 ++++++++++--
5 files changed, 57 insertions(+), 12 deletions(-)
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
index 71088d2..1cdb89b 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/ParserResult.java
@@ -24,16 +24,18 @@ public class ParserResult {
private final String node;
private boolean parsed;
private int position;
+ private int length;
private String element;
private Boolean predicate;
- public ParserResult(String node, int position, String element) {
- this(node, position, element, true);
+ public ParserResult(String node, int position, int length, String element) {
+ this(node, position, length, element, true);
}
- public ParserResult(String node, int position, String element, boolean parsed) {
+ public ParserResult(String node, int position, int length, String element, boolean parsed) {
this.node = node;
this.position = position;
+ this.length = length;
this.element = element;
this.parsed = parsed;
}
@@ -46,6 +48,13 @@ public class ParserResult {
}
/**
+ * Length of node in the source code (not line based).
+ */
+ public int getLength() {
+ return length;
+ }
+
+ /**
* The element such as a Camel endpoint uri
*/
public String getElement() {
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
index d56fe8f..b5290df 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
@@ -162,10 +162,15 @@ public final class RouteBuilderParser {
// find position of field/expression
if (internal instanceof ASTNode) {
int pos = ((ASTNode) internal).getStartPosition();
+ int len = ((ASTNode) internal).getLength();
int line = findLineNumber(clazz.toUnformattedString(), pos);
if (line > -1) {
detail.setLineNumber("" + line);
}
+ int endLine = findLineNumber(clazz.toUnformattedString(), pos + len);
+ if (endLine > -1) {
+ detail.setLineNumberEnd("" + endLine);
+ }
}
// we do not know if this field is used as consumer or producer only, but we try
// to find out by scanning the route in the configure method below
@@ -217,6 +222,10 @@ public final class RouteBuilderParser {
if (line > -1) {
detail.setLineNumber("" + line);
}
+ int lineEnd = findLineNumber(clazz.toUnformattedString(), result.getPosition() + result.getLength());
+ if (lineEnd > -1) {
+ detail.setLineNumberEnd("" + lineEnd);
+ }
detail.setEndpointComponentName(endpointComponentName(result.getElement()));
detail.setConsumerOnly(true);
detail.setProducerOnly(false);
@@ -260,6 +269,10 @@ public final class RouteBuilderParser {
if (line > -1) {
detail.setLineNumber("" + line);
}
+ int endLine = findLineNumber(clazz.toUnformattedString(), result.getPosition() + result.getLength());
+ if (endLine > -1) {
+ detail.setLineNumberEnd("" + endLine);
+ }
detail.setEndpointComponentName(endpointComponentName(result.getElement()));
detail.setConsumerOnly(false);
detail.setProducerOnly(true);
@@ -298,6 +311,10 @@ public final class RouteBuilderParser {
if (line > -1) {
detail.setLineNumber("" + line);
}
+ int endLine = findLineNumber(clazz.toUnformattedString(), result.getPosition() + result.getLength());
+ if (endLine > -1) {
+ detail.setLineNumberEnd("" + endLine);
+ }
detail.setSimple(result.getElement());
boolean predicate = result.getPredicate() != null ? result.getPredicate() : false;
@@ -341,6 +358,10 @@ public final class RouteBuilderParser {
if (line > -1) {
detail.setLineNumber("" + line);
}
+ int endLine = findLineNumber(clazz.toUnformattedString(), result.getPosition() + result.getLength());
+ if (endLine > -1) {
+ detail.setLineNumberEnd("" + endLine);
+ }
detail.setRouteId(result.getElement());
routes.add(detail);
diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
index 95338cf..89b665c 100644
--- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
+++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
@@ -235,7 +235,8 @@ public final class CamelJavaParserHelper {
String routeId = getLiteralValue(clazz, block, (Expression) arg);
if (!Strings.isBlank(routeId)) {
int position = ((Expression) arg).getStartPosition();
- uris.add(new ParserResult(name, position, routeId));
+ int len = ((Expression) arg).getLength();
+ uris.add(new ParserResult(name, position, len, routeId));
}
}
}
@@ -344,6 +345,7 @@ public final class CamelJavaParserHelper {
String uri = getLiteralValue(clazz, block, (Expression) arg);
if (!Strings.isBlank(uri)) {
int position = ((Expression) arg).getStartPosition();
+ int len = ((Expression) arg).getLength();
// if the node is fromF or toF, then replace all %X with {{%X}} as we cannot parse that value
if ("fromF".equals(node) || "toF".equals(node)) {
@@ -352,7 +354,7 @@ public final class CamelJavaParserHelper {
uri = uri.replaceAll("\\%b", "\\{\\{\\%b\\}\\}");
}
- uris.add(new ParserResult(node, position, uri));
+ uris.add(new ParserResult(node, position, len, uri));
return;
}
}
@@ -381,7 +383,8 @@ public final class CamelJavaParserHelper {
String uri = CamelJavaParserHelper.getLiteralValue(clazz, block, exp);
if (!Strings.isBlank(uri)) {
int position = ((SimpleName) arg).getStartPosition();
- uris.add(new ParserResult(node, position, uri));
+ int len = ((SimpleName) arg).getLength();
+ uris.add(new ParserResult(node, position, len, uri));
}
} else {
// the field may be initialized using variables, so we need to evaluate those expressions
@@ -392,7 +395,8 @@ public final class CamelJavaParserHelper {
if (!Strings.isBlank(uri)) {
// we want the position of the field, and not in the route
int position = ((VariableDeclaration) fi).getStartPosition();
- uris.add(new ParserResult(node, position, uri));
+ int len = ((VariableDeclaration) fi).getLength();
+ uris.add(new ParserResult(node, position, len, uri));
}
}
}
@@ -400,7 +404,7 @@ public final class CamelJavaParserHelper {
}
// cannot parse it so add a failure
- uris.add(new ParserResult(node, -1, arg.toString(), false));
+ uris.add(new ParserResult(node, -1, -1, arg.toString(), false));
}
public static List<ParserResult> parseCamelSimpleExpressions(MethodSource<JavaClassSource> method) {
@@ -481,7 +485,8 @@ public final class CamelJavaParserHelper {
}
int position = ((Expression) arg).getStartPosition();
- ParserResult result = new ParserResult(node, position, simple);
+ int len = ((Expression) arg).getLength();
+ ParserResult result = new ParserResult(node, position, len, simple);
result.setPredicate(predicate);
expressions.add(result);
}
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyCdiRouteBuilder.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyCdiRouteBuilder.java
index 2bf3e78..2ecf367 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyCdiRouteBuilder.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/MyCdiRouteBuilder.java
@@ -41,6 +41,8 @@ public class MyCdiRouteBuilder extends RouteBuilder {
from(inputEndpoint)
.log("I was here")
.to(loga)
- .to(mynetty);
+ .to(mynetty)
+ .to("mock:foo"
+ + "?retainFirst=1");
}
}
diff --git a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterEndpointInjectTest.java b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterEndpointInjectTest.java
index 8ffb23b..8e872fd 100644
--- a/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterEndpointInjectTest.java
+++ b/tooling/camel-route-parser/src/test/java/org/apache/camel/parser/java/RoasterEndpointInjectTest.java
@@ -47,12 +47,20 @@ public class RoasterEndpointInjectTest {
Assert.assertEquals("timer:foo?period=4999", details.get(0).getEndpointUri());
Assert.assertEquals("28", details.get(0).getLineNumber());
+ Assert.assertEquals("28", details.get(0).getLineNumberEnd());
Assert.assertEquals("log:a", details.get(1).getEndpointUri());
Assert.assertEquals("32", details.get(1).getLineNumber());
+ Assert.assertEquals("32", details.get(1).getLineNumberEnd());
Assert.assertEquals("netty4-http:http:someserver:80/hello", details.get(2).getEndpointUri());
Assert.assertEquals("36", details.get(2).getLineNumber());
+ Assert.assertEquals("36", details.get(2).getLineNumberEnd());
+
+ // spans 2 lines
+ Assert.assertEquals("mock:foo?retainFirst=1", details.get(5).getEndpointUri());
+ Assert.assertEquals("45", details.get(5).getLineNumber());
+ Assert.assertEquals("46", details.get(5).getLineNumberEnd());
List<ParserResult> list = CamelJavaParserHelper.parseCamelConsumerUris(method, true, true);
for (ParserResult result : list) {
@@ -64,9 +72,9 @@ public class RoasterEndpointInjectTest {
for (ParserResult result : list) {
LOG.info("Producer: " + result.getElement());
}
- Assert.assertEquals(2, list.size());
+ Assert.assertEquals(3, list.size());
- Assert.assertEquals(5, details.size());
+ Assert.assertEquals(6, details.size());
Assert.assertEquals("log:a", details.get(3).getEndpointUri());
}