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 <claus.ib...@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)

Reply via email to