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)