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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 7cebb93bee5 (chores) camel-route-parser: break complex methods
7cebb93bee5 is described below

commit 7cebb93bee5d1081e08bc8bbada3c08eef07025f
Author: Otavio Rodolfo Piske <angusyo...@gmail.com>
AuthorDate: Fri Apr 26 14:40:27 2024 +0200

    (chores) camel-route-parser: break complex methods
---
 .../apache/camel/parser/RouteBuilderParser.java    | 29 ++++---
 .../org/apache/camel/parser/XmlRouteParser.java    | 84 ++++++++++++--------
 .../camel/parser/helper/CamelJavaParserHelper.java | 79 +++++++++++--------
 .../helper/CamelJavaRestDslParserHelper.java       | 91 +++++++++++++---------
 4 files changed, 173 insertions(+), 110 deletions(-)

diff --git 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
index c90e1374f6e..f9843e3c961 100644
--- 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
+++ 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/RouteBuilderParser.java
@@ -209,21 +209,13 @@ public final class RouteBuilderParser {
         String uri;
         Expression exp;
         for (Annotation<JavaClassSource> ann : field.getAnnotations()) {
-            boolean valid = 
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
-                    || 
"org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+            boolean valid = isValid(ann);
             if (valid) {
                 exp = (Expression) ann.getInternal();
                 if (exp instanceof SingleMemberAnnotation 
singleMemberAnnotation) {
                     exp = singleMemberAnnotation.getValue();
                 } else if (exp instanceof NormalAnnotation normalAnnotation) {
-                    List<?> values = normalAnnotation.values();
-                    for (Object value : values) {
-                        MemberValuePair pair = (MemberValuePair) value;
-                        if ("uri".equals(pair.getName().toString())) {
-                            exp = pair.getValue();
-                            break;
-                        }
-                    }
+                    exp = evalNormalAnnotation(normalAnnotation, exp);
                 }
                 uri = CamelJavaParserHelper.getLiteralValue(clazz, null, exp);
                 endpointUri = new EndpointUri(uri, exp);
@@ -232,6 +224,23 @@ public final class RouteBuilderParser {
         return endpointUri;
     }
 
+    private static Expression evalNormalAnnotation(NormalAnnotation 
normalAnnotation, Expression exp) {
+        List<?> values = normalAnnotation.values();
+        for (Object value : values) {
+            MemberValuePair pair = (MemberValuePair) value;
+            if ("uri".equals(pair.getName().toString())) {
+                exp = pair.getValue();
+                break;
+            }
+        }
+        return exp;
+    }
+
+    private static boolean isValid(Annotation<JavaClassSource> ann) {
+        return "org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
+                || "org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+    }
+
     static List<MethodSource<JavaClassSource>> findAllConfigureMethods(
             JavaClassSource clazz, boolean includeInlinedRouteBuilders) {
         List<MethodSource<JavaClassSource>> methods = new ArrayList<>();
diff --git 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/XmlRouteParser.java
 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/XmlRouteParser.java
index 740b27a4a61..5e219140b51 100644
--- 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/XmlRouteParser.java
+++ 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/XmlRouteParser.java
@@ -132,43 +132,65 @@ public final class XmlRouteParser {
                     uri = trimEndpointUri(uri);
                 }
                 if (!Strings.isNullOrEmpty(uri)) {
-                    String id = getSafeAttribute(node, "id");
-                    String lineNumber = (String) 
node.getUserData(XmlLineNumberParser.LINE_NUMBER);
-                    String lineNumberEnd = (String) 
node.getUserData(XmlLineNumberParser.LINE_NUMBER_END);
-
-                    // we only want the relative dir name from the resource 
directory, eg META-INF/spring/foo.xml
-                    String fileName = getFileName(baseDir, 
fullyQualifiedFileName);
-
-                    boolean consumerOnly = false;
-                    boolean producerOnly = false;
-                    String nodeName = node.getNodeName();
-                    if ("from".equals(nodeName) || 
"pollEnrich".equals(nodeName)) {
-                        consumerOnly = true;
-                    } else if ("to".equals(nodeName) || 
"enrich".equals(nodeName) || "wireTap".equals(nodeName)) {
-                        producerOnly = true;
-                    }
-
-                    CamelEndpointDetails detail = new CamelEndpointDetails();
-                    detail.setFileName(fileName);
-                    detail.setLineNumber(lineNumber);
-                    detail.setLineNumberEnd(lineNumberEnd);
-
-                    String column = (String) 
node.getUserData(XmlLineNumberParser.COLUMN_NUMBER);
-                    if (column != null) {
-                        detail.setLinePosition(Integer.parseInt(column));
-                    }
-
-                    detail.setEndpointInstance(id);
-                    detail.setEndpointUri(uri);
-                    
detail.setEndpointComponentName(endpointComponentName(uri));
-                    detail.setConsumerOnly(consumerOnly);
-                    detail.setProducerOnly(producerOnly);
+                    final CamelEndpointDetails detail =
+                            toCamelEndpointDetails(baseDir, 
fullyQualifiedFileName, node, uri);
                     endpoints.add(detail);
                 }
             }
         }
     }
 
+    private static CamelEndpointDetails toCamelEndpointDetails(
+            String baseDir, String fullyQualifiedFileName, Node node, String 
uri) {
+        String id = getSafeAttribute(node, "id");
+        String lineNumber = (String) 
node.getUserData(XmlLineNumberParser.LINE_NUMBER);
+        String lineNumberEnd = (String) 
node.getUserData(XmlLineNumberParser.LINE_NUMBER_END);
+
+        // we only want the relative dir name from the resource directory, eg 
META-INF/spring/foo.xml
+        String fileName = getFileName(baseDir, fullyQualifiedFileName);
+
+        boolean consumerOnly = false;
+        boolean producerOnly = false;
+        String nodeName = node.getNodeName();
+        if (isConsumerOnly(nodeName)) {
+            consumerOnly = true;
+        } else if (isProducerOnly(nodeName)) {
+            producerOnly = true;
+        }
+
+        return toEndpointDetails(node, fileName, lineNumber, lineNumberEnd, 
id, uri, consumerOnly,
+                        producerOnly);
+    }
+
+    private static boolean isProducerOnly(String nodeName) {
+        return "to".equals(nodeName) || "enrich".equals(nodeName) || 
"wireTap".equals(nodeName);
+    }
+
+    private static boolean isConsumerOnly(String nodeName) {
+        return "from".equals(nodeName) || "pollEnrich".equals(nodeName);
+    }
+
+    private static CamelEndpointDetails toEndpointDetails(
+            Node node, String fileName, String lineNumber, String 
lineNumberEnd, String id, String uri, boolean consumerOnly,
+            boolean producerOnly) {
+        CamelEndpointDetails detail = new CamelEndpointDetails();
+        detail.setFileName(fileName);
+        detail.setLineNumber(lineNumber);
+        detail.setLineNumberEnd(lineNumberEnd);
+
+        String column = (String) 
node.getUserData(XmlLineNumberParser.COLUMN_NUMBER);
+        if (column != null) {
+            detail.setLinePosition(Integer.parseInt(column));
+        }
+
+        detail.setEndpointInstance(id);
+        detail.setEndpointUri(uri);
+        detail.setEndpointComponentName(endpointComponentName(uri));
+        detail.setConsumerOnly(consumerOnly);
+        detail.setProducerOnly(producerOnly);
+        return detail;
+    }
+
     /**
      * Parses the XML source to discover Camel simple languages.
      *
diff --git 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
index a7c9414b419..4485d4f875c 100644
--- 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
+++ 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaParserHelper.java
@@ -116,26 +116,9 @@ public final class CamelJavaParserHelper {
         if (block != null) {
             List<?> statements = block.statements();
             for (Object statement : statements) {
-                Statement stmt = (Statement) statement;
-                Expression exp = null;
-                if (stmt instanceof ReturnStatement rs) {
-                    exp = rs.getExpression();
-                } else if (stmt instanceof ExpressionStatement es) {
-                    exp = es.getExpression();
-                    if (exp instanceof MethodInvocation mi) {
-                        for (Object arg : mi.arguments()) {
-                            if (arg instanceof ClassInstanceCreation) {
-                                exp = (Expression) arg;
-                                break;
-                            }
-                        }
-                    }
-                }
+                final Expression exp = getExpression((Statement) statement);
                 if (exp instanceof ClassInstanceCreation cic) {
-                    boolean isRouteBuilder = false;
-                    if (cic.getType() instanceof SimpleType st) {
-                        isRouteBuilder = 
"RouteBuilder".equals(st.getName().toString());
-                    }
+                    final boolean isRouteBuilder = isRouteBuilderCheck(cic);
                     if (isRouteBuilder && cic.getAnonymousClassDeclaration() 
!= null) {
                         List<?> body = 
cic.getAnonymousClassDeclaration().bodyDeclarations();
                         for (Object line : body) {
@@ -153,6 +136,33 @@ public final class CamelJavaParserHelper {
         return null;
     }
 
+    private static boolean isRouteBuilderCheck(ClassInstanceCreation cic) {
+        boolean isRouteBuilder = false;
+        if (cic.getType() instanceof SimpleType st) {
+            isRouteBuilder = "RouteBuilder".equals(st.getName().toString());
+        }
+        return isRouteBuilder;
+    }
+
+    private static Expression getExpression(Statement statement) {
+        Statement stmt = statement;
+        Expression exp = null;
+        if (stmt instanceof ReturnStatement rs) {
+            exp = rs.getExpression();
+        } else if (stmt instanceof ExpressionStatement es) {
+            exp = es.getExpression();
+            if (exp instanceof MethodInvocation mi) {
+                for (Object arg : mi.arguments()) {
+                    if (arg instanceof ClassInstanceCreation) {
+                        exp = (Expression) arg;
+                        break;
+                    }
+                }
+            }
+        }
+        return exp;
+    }
+
     public static List<ParserResult> 
parseCamelRouteIds(MethodSource<JavaClassSource> method) {
         return doParseCamelUris(method, true, false, true, false, true);
     }
@@ -220,19 +230,7 @@ public final class CamelJavaParserHelper {
         if (routeIdsOnly) {
             // include route id for consumers
             if ("routeId".equals(name)) {
-                List<?> args = mi.arguments();
-                if (args != null) {
-                    for (Object arg : args) {
-                        if (isValidArgument(arg)) {
-                            String routeId = getLiteralValue(clazz, block, 
(Expression) arg);
-                            if (!Strings.isNullOrEmpty(routeId)) {
-                                int position = ((Expression) 
arg).getStartPosition();
-                                int len = ((Expression) arg).getLength();
-                                uris.add(new ParserResult(name, position, len, 
routeId));
-                            }
-                        }
-                    }
-                }
+                addRouteId(clazz, block, mi, uris, name);
             }
             // we only want route ids so return here
             return;
@@ -272,6 +270,23 @@ public final class CamelJavaParserHelper {
         }
     }
 
+    private static void addRouteId(
+            JavaClassSource clazz, Block block, MethodInvocation mi, 
List<ParserResult> uris, String name) {
+        List<?> args = mi.arguments();
+        if (args != null) {
+            for (Object arg : args) {
+                if (isValidArgument(arg)) {
+                    String routeId = getLiteralValue(clazz, block, 
(Expression) arg);
+                    if (!Strings.isNullOrEmpty(routeId)) {
+                        int position = ((Expression) arg).getStartPosition();
+                        int len = ((Expression) arg).getLength();
+                        uris.add(new ParserResult(name, position, len, 
routeId));
+                    }
+                }
+            }
+        }
+    }
+
     private static void parseFirstArgument(
             JavaClassSource clazz, Block block, MethodInvocation mi, 
List<ParserResult> uris, boolean strings, boolean fields,
             String name) {
diff --git 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
index 7f741fbe970..986dfa66ff8 100644
--- 
a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
+++ 
b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelJavaRestDslParserHelper.java
@@ -105,51 +105,64 @@ public final class CamelJavaRestDslParserHelper {
             JavaClassSource clazz, String fullyQualifiedFileName,
             MethodSource<JavaClassSource> configureMethod) {
 
-        List<RestServiceDetails> answer = new ArrayList<>();
-
-        if (configureMethod != null) {
-            MethodDeclaration md = (MethodDeclaration) 
configureMethod.getInternal();
-            Block block = md.getBody();
-            if (block != null) {
-                for (Object statement : md.getBody().statements()) {
-                    // must be a method call expression
-                    if (statement instanceof ExpressionStatement es) {
-                        Expression exp = es.getExpression();
-                        boolean valid = isRest(exp);
-                        if (valid) {
-                            RestServiceDetails node = new RestServiceDetails();
-                            answer.add(node);
-
-                            // include source code details
-                            int pos = exp.getStartPosition();
-                            int line = findLineNumber(fullyQualifiedFileName, 
pos);
-                            if (line > -1) {
-                                node.setLineNumber(Integer.toString(line));
-                            }
-                            pos = exp.getStartPosition() + exp.getLength();
-                            line = findLineNumber(fullyQualifiedFileName, pos);
-                            if (line > -1) {
-                                node.setLineNumberEnd(Integer.toString(line));
-                            }
-                            node.setFileName(fullyQualifiedFileName);
-                            node.setClassName(clazz.getQualifiedName());
-                            node.setMethodName(configureMethod.getName());
+        if (configureMethod == null) {
+            return Collections.emptyList();
+        }
 
-                            parseExpression(node, null, 
fullyQualifiedFileName, clazz, block, exp);
+        List<RestServiceDetails> answer = new ArrayList<>();
 
-                            // flip order of verbs as we parse bottom-up
-                            if (node.getVerbs() != null) {
-                                Collections.reverse(node.getVerbs());
-                            }
-                        }
+        MethodDeclaration md = (MethodDeclaration) 
configureMethod.getInternal();
+        Block block = md.getBody();
+        if (block != null) {
+            for (Object statement : md.getBody().statements()) {
+                // must be a method call expression
+                if (statement instanceof ExpressionStatement es) {
+                    Expression exp = es.getExpression();
+                    boolean valid = isRest(exp);
+                    if (valid) {
+                        final RestServiceDetails node =
+                                doParse(clazz, fullyQualifiedFileName, 
configureMethod, exp, block);
+
+                        answer.add(node);
                     }
                 }
             }
         }
 
+
         return answer;
     }
 
+    private RestServiceDetails doParse(
+            JavaClassSource clazz, String fullyQualifiedFileName, 
MethodSource<JavaClassSource> configureMethod,
+            Expression exp, Block block) {
+        RestServiceDetails node = new RestServiceDetails();
+
+        // include source code details
+        int pos = exp.getStartPosition();
+        int line = findLineNumber(fullyQualifiedFileName, pos);
+        if (line > -1) {
+            node.setLineNumber(Integer.toString(line));
+        }
+        pos = exp.getStartPosition() + exp.getLength();
+        line = findLineNumber(fullyQualifiedFileName, pos);
+        if (line > -1) {
+            node.setLineNumberEnd(Integer.toString(line));
+        }
+        node.setFileName(fullyQualifiedFileName);
+        node.setClassName(clazz.getQualifiedName());
+        node.setMethodName(configureMethod.getName());
+
+        parseExpression(node, null, fullyQualifiedFileName, clazz, block, exp);
+
+        // flip order of verbs as we parse bottom-up
+        if (node.getVerbs() != null) {
+            Collections.reverse(node.getVerbs());
+        }
+
+        return node;
+    }
+
     private boolean isRestConfiguration(Expression exp) {
         final String rootMethodName = findRootMethodName(exp);
 
@@ -522,8 +535,7 @@ public final class CamelJavaRestDslParserHelper {
                 // is the field annotated with a Camel endpoint
                 if (field.getAnnotations() != null) {
                     for (Annotation<JavaClassSource> ann : 
field.getAnnotations()) {
-                        boolean valid = 
"org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
-                                || 
"org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+                        boolean valid = isValid(ann);
                         if (valid) {
                             Expression exp = (Expression) ann.getInternal();
                             exp = ParserCommon.evalExpression(exp);
@@ -607,6 +619,11 @@ public final class CamelJavaRestDslParserHelper {
         return null;
     }
 
+    private static boolean isValid(Annotation<JavaClassSource> ann) {
+        return "org.apache.camel.EndpointInject".equals(ann.getQualifiedName())
+                || "org.apache.camel.cdi.Uri".equals(ann.getQualifiedName());
+    }
+
     private static boolean isNumericOperator(JavaClassSource clazz, Block 
block, Expression expression) {
         if (expression instanceof NumberLiteral) {
             return true;

Reply via email to