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/07 14:46:55 UTC

[camel] 04/07: CAMEL-15478: javasource parser can parse inner classes

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 ee17e951cd4703fbc457ec10a199ded4032cbbfe
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Sep 7 11:24:29 2020 +0200

    CAMEL-15478: javasource parser can parse inner classes
---
 .../org/apache/camel/maven/JavaSourceParser.java   | 24 ++++++++++++++++++++++
 1 file changed, 24 insertions(+)

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 fad784d..d1b39a5 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
@@ -166,6 +166,30 @@ public class JavaSourceParser {
         if (inner) {
             return clazz.getQualifiedName() + "$" + type;
         }
+        int dot = type.indexOf('.');
+        if (Character.isUpperCase(type.charAt(0)) && dot != -1) {
+            // okay its likely a inner class with a nested sub type, so resolving is even more complex
+            String parent = type.substring(0, dot);
+            String child = type.substring(dot + 1);
+            inner = rootClazz.getNestedType(parent) != null;
+            if (inner) {
+                return rootClazz.getQualifiedName() + "$" + type.replace('.', '$');
+            }
+            inner = clazz.getNestedType(type) != null;
+            if (inner) {
+                return clazz.getQualifiedName() + "$" + type.replace('.', '$');
+            }
+            if (parent.equals(rootClazz.getName())) {
+                inner = rootClazz.getNestedType(child) != null;
+                if (inner) {
+                    return rootClazz.getQualifiedName() + "$" + child.replace('.', '$');
+                }
+                inner = clazz.getNestedType(child) != null;
+                if (inner) {
+                    return clazz.getQualifiedName() + "$" + child.replace('.', '$');
+                }
+            }
+        }
 
         // okay attempt to resolve the type
         String resolvedType = clazz.resolveType(type);