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 2020/09/08 06:07:33 UTC

[camel] 01/03: CAMEL-15478: class resolving for inner classes is more complex

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 1012451f1d204397f05943947af450eaaf6b5a5c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Sep 8 08:05:43 2020 +0200

     CAMEL-15478: class resolving for inner classes is more complex
---
 .../org/apache/camel/maven/JavaSourceParser.java   | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java
index 17de8ef..643d98c 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java
+++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java
@@ -28,7 +28,6 @@ import org.jboss.forge.roaster.Roaster;
 import org.jboss.forge.roaster.model.JavaDocTag;
 import org.jboss.forge.roaster.model.Type;
 import org.jboss.forge.roaster.model.source.JavaClassSource;
-import org.jboss.forge.roaster.model.source.JavaSource;
 import org.jboss.forge.roaster.model.source.MethodSource;
 import org.jboss.forge.roaster.model.source.ParameterSource;
 import org.jboss.forge.roaster.model.source.TypeVariableSource;
@@ -51,11 +50,8 @@ public class JavaSourceParser {
 
         if (innerClass != null) {
             // we want the inner class from the parent class
-            JavaSource nested = clazz.getNestedType(innerClass);
-            if (nested instanceof JavaClassSource) {
-                clazz = (JavaClassSource) nested;
-            }
-            if (nested == null) {
+            clazz = findInnerClass(rootClazz, innerClass);
+            if (clazz == null) {
                 errorMessage = "Cannot find inner class " + innerClass + " in class: " + rootClazz.getQualifiedName();
                 return;
             }
@@ -123,6 +119,20 @@ public class JavaSourceParser {
         }
     }
 
+    private static JavaClassSource findInnerClass(JavaClassSource rootClazz, String innerClass) {
+        String[] parts = innerClass.split("\\$");
+        for (int i = 0; i < parts.length; i++) {
+            String part = parts[i];
+            JavaClassSource nested = (JavaClassSource) rootClazz.getNestedType(part);
+            if (nested != null && i < parts.length - 1) {
+                rootClazz = nested;
+            } else {
+                return nested;
+            }
+        }
+        return null;
+    }
+
     private static String resolveType(JavaClassSource rootClazz, JavaClassSource clazz, MethodSource ms, Type type) {
         String name = type.getName();
         // if the type is from a type variable (eg T extends Foo generic style)