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)