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/04 13:52:21 UTC

[camel] 01/03: CAMEL-15478: camel-api maven plugin fix javasource parser with generic type classloading warning

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 44c4339c49be076678693fe235120366062b98e1
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 4 15:40:45 2020 +0200

    CAMEL-15478: camel-api maven plugin fix javasource parser with generic type classloading warning
---
 .../maven/AbstractApiMethodGeneratorMojo.java      | 43 ++++++++++++----------
 .../org/apache/camel/maven/JavaSourceParser.java   |  4 ++
 2 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java
index 9365b04..adff960 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java
+++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java
@@ -404,26 +404,31 @@ public abstract class AbstractApiMethodGeneratorMojo extends AbstractApiMethodBa
                     argType = argType.substring(1);
                 }
 
-                // try loading as is first
-                try {
-                    parameterizedType.append(getCanonicalName(getProjectClassLoader().loadClass(argType)));
-                } catch (ClassNotFoundException e) {
-
-                    // try loading with default java.lang package prefix
+                if ("URL".equals(argType)) {
+                    parameterizedType.append("java.net.URL");
+                } else if ("URI".equals(argType)) {
+                    parameterizedType.append("java.net.URI");
+                } else {
+                    // try loading as is first
                     try {
-                        if (log.isDebugEnabled()) {
-                            log.debug("Could not load " + argType + ", trying to load java.lang." + argType);
-                        }
-                        parameterizedType.append(
-                                getCanonicalName(getProjectClassLoader().loadClass("java.lang." + argType)));
-                    } catch (ClassNotFoundException e1) {
-                        parameterizedType.append("?");
-                        // if the length of the artType is 1, we think that it's variable type parameter (like T in List<T>)
-                        // not perfect solution, but should work in most of the cases
-                        if (argType.trim().length() > 1) {
-                            log.warn("Ignoring type parameters <" + typeArgs + "> for argument " + argument.getName()
-                                     + ", unable to load parametric type argument " + argType,
-                                    e1);
+                        parameterizedType.append(getCanonicalName(getProjectClassLoader().loadClass(argType)));
+                    } catch (ClassNotFoundException e) {
+                        // try loading with default java.lang package prefix
+                        try {
+                            if (log.isDebugEnabled()) {
+                                log.debug("Could not load " + argType + ", trying to load java.lang." + argType);
+                            }
+                            parameterizedType.append(
+                                    getCanonicalName(getProjectClassLoader().loadClass("java.lang." + argType)));
+                        } catch (ClassNotFoundException e1) {
+                            parameterizedType.append("?");
+                            // if the length of the artType is 1, we think that it's variable type parameter (like T in List<T>)
+                            // not perfect solution, but should work in most of the cases
+                            if (argType.trim().length() > 1) {
+                                log.warn("Ignoring type parameters <" + typeArgs + "> for argument " + argument.getName()
+                                         + ", unable to load parametric type argument " + argType,
+                                        e1);
+                            }
                         }
                     }
                 }
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 5694dda..5c46a7f 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
@@ -72,6 +72,10 @@ public class JavaSourceParser {
                     ParameterSource ps = list.get(i);
                     String name = ps.getName();
                     String type = ps.getType().getQualifiedNameWithGenerics();
+                    if (Character.isUpperCase(type.charAt(0))) {
+                        // okay no package name so its a local inner class
+                        type = clazz.getPackage() + "." + type;
+                    }
                     if (type.startsWith("java.lang.")) {
                         type = type.substring(10);
                     }