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/04/07 07:02:50 UTC
[camel] branch master updated: CAMEL-14626 : api maven plugin -
Cannot load class (#3706)
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
The following commit(s) were added to refs/heads/master by this push:
new 7fefaf9 CAMEL-14626 : api maven plugin - Cannot load <T> class (#3706)
7fefaf9 is described below
commit 7fefaf9feaaff48c3f9285a221aea1c50cedbde4
Author: Kirill Yankov <my...@gmail.com>
AuthorDate: Tue Apr 7 16:02:36 2020 +0900
CAMEL-14626 : api maven plugin - Cannot load <T> class (#3706)
* CAMEL-14626 : api maven plugin - Cannot load <T> class
* improved parser to handle multiple generic args, fixed ignoring
---
.../camel/support/component/ApiMethodParser.java | 4 ++--
.../maven/AbstractApiMethodGeneratorMojo.java | 22 ++++++++++------------
.../org/apache/camel/component/test/TestProxy.java | 5 +++++
.../src/test/resources/test-proxy-signatures.txt | 2 ++
4 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodParser.java b/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodParser.java
index 522a602..bfa4fe1 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodParser.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/component/ApiMethodParser.java
@@ -38,7 +38,7 @@ public abstract class ApiMethodParser<T> {
// also used by JavadocApiMethodGeneratorMojo
public static final Pattern ARGS_PATTERN = Pattern.compile("\\s*([^<\\s]+)\\s*(<[^>]+>)?\\s+([^\\s,]+)\\s*,?");
- private static final String METHOD_PREFIX = "^(\\s*(public|final|synchronized|native)\\s+)*(\\s*<[^>]>)?\\s*(\\S+)\\s+([^\\(]+\\s*)\\(";
+ private static final String METHOD_PREFIX = "^(\\s*(public|final|synchronized|native)\\s+)*(\\s*<((?!\\sextends\\s)[^>])+>)?\\s*(\\S+)\\s+([^\\(]+\\s*)\\(";
private static final Pattern METHOD_PATTERN = Pattern.compile("\\s*([^<\\s]+)?\\s*(<[^>]+>)?(<(?<genericTypeParameterName>\\S+)\\s+extends\\s+"
+ "(?<genericTypeParameterUpperBound>\\S+)>\\s+(?<returnType>\\S+))?\\s+(\\S+)\\s*\\(\\s*(?<signature>[\\S\\s,]*)\\)\\s*;?\\s*");
@@ -105,7 +105,7 @@ public abstract class ApiMethodParser<T> {
}
// remove all modifiers and type parameters for method
- signature = signature.replaceAll(METHOD_PREFIX, "$4 $5(");
+ signature = signature.replaceAll(METHOD_PREFIX, "$5 $6(");
// remove all final modifiers for arguments
signature = signature.replaceAll("(\\(|,\\s*)final\\s+", "$1");
// remove all redundant spaces in generic parameters
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 90e509a..a043d2d 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
@@ -326,7 +326,6 @@ public abstract class AbstractApiMethodGeneratorMojo extends AbstractApiMethodBa
// Note: its ok to split, since we don't support parsing nested type arguments
final String[] argTypes = typeArgs.split(",");
- boolean ignore = false;
final int nTypes = argTypes.length;
int i = 0;
for (String argType : argTypes) {
@@ -344,24 +343,23 @@ public abstract class AbstractApiMethodGeneratorMojo extends AbstractApiMethodBa
parameterizedType.append(
getCanonicalName(getProjectClassLoader().loadClass("java.lang." + argType)));
} catch (ClassNotFoundException e1) {
- log.warn("Ignoring type parameters <" + typeArgs + "> for argument " + argument.getName()
- + ", unable to load parametric type argument " + argType, e1);
- ignore = true;
+ 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);
+ }
}
}
- if (ignore) {
- // give up
- break;
- } else if (++i < nTypes) {
+ if (++i < nTypes) {
parameterizedType.append(",");
}
}
- if (!ignore) {
- parameterizedType.append('>');
- canonicalName = parameterizedType.toString();
- }
+ parameterizedType.append('>');
+ canonicalName = parameterizedType.toString();
}
return canonicalName;
diff --git a/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/component/test/TestProxy.java b/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/component/test/TestProxy.java
index 6fb1af9..47bedde 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/component/test/TestProxy.java
+++ b/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/component/test/TestProxy.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.test;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class TestProxy {
public String sayHi() {
@@ -58,6 +59,10 @@ public class TestProxy {
return builder.toString();
}
+ public final <K, V> String greetAll(Map<K, V> peopleMap) {
+ return null;
+ }
+
public final String[] greetTimes(String name, int times) {
final List<String> result = new ArrayList<>();
for (int i = 0; i < times; i++) {
diff --git a/tooling/maven/camel-api-component-maven-plugin/src/test/resources/test-proxy-signatures.txt b/tooling/maven/camel-api-component-maven-plugin/src/test/resources/test-proxy-signatures.txt
index d9214f0..1d1b926 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/test/resources/test-proxy-signatures.txt
+++ b/tooling/maven/camel-api-component-maven-plugin/src/test/resources/test-proxy-signatures.txt
@@ -5,5 +5,7 @@ public final String greetMe(final String name);
public final String greetUs(final String name1, String name2);
public final String greetAll(String[] names);
public final String greetAll(java.util.List<String> names);
+public final <T> String greetAll(java.util.List<T> people);
+public final <K, Vv> String greetAll(java.util.Map<K, Vv> peopleMap);
public final String[] greetTimes(String name, int times);
public final String greetInnerChild(org.apache.camel.component.test.TestProxy.InnerChild child);