This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch endpoint-dsl
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d66a05629ff07f2068dc4350401a58a31d8c159d
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Thu Jun 6 09:02:08 2019 +0200

    Hack a bit to allow chaining between the base and the derived class
    
    We are at the limit of what the source generation library can do here ;-)
---
 .../apache/camel/maven/packaging/EndpointDslMojo.java  | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
index 14adb80..af905e2 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
@@ -210,20 +210,22 @@ public class EndpointDslMojo extends AbstractMojo {
         Map<String, JavaClass> enumClasses = new HashMap<>();
 
         JavaClass commonClass = 
javaClass.addNestedType().setPublic().setStatic(true);
-        commonClass.setName(name.replace("Endpoint", "Common"));
-        commonClass.extendSuperType("EndpointConfiguration");
+        commonClass.setName(name.replace("Endpoint", "Common") + "<T extends 
EndpointConfiguration>");
+        commonClass.extendSuperType("EndpointConfiguration<T>");
         generateDummyClass(commonClass.getCanonicalName());
 
         JavaClass consumerClass = 
javaClass.addNestedType().setPublic().setStatic(true);
         consumerClass.setName(name.replace("Endpoint", "Consumer"));
-        consumerClass.extendSuperType(name.replace("Endpoint", "Common"));
+        consumerClass.extendSuperType(name.replace("Endpoint", "Common") + "<" 
+ name.replace("Endpoint", "Consumer") + ">");
         generateDummyClass(consumerClass.getCanonicalName());
 
         JavaClass producerClass = 
javaClass.addNestedType().setPublic().setStatic(true);
         producerClass.setName(name.replace("Endpoint", "Producer"));
-        producerClass.extendSuperType(name.replace("Endpoint", "Common"));
+        producerClass.extendSuperType(name.replace("Endpoint", "Common") + "<" 
+ name.replace("Endpoint", "Producer") + ">");
         generateDummyClass(producerClass.getCanonicalName());
 
+        generateDummyClass(packageName + ".T");
+
         String doc = "Generated by camel-package-maven-plugin - do not edit 
this file!";
         if (!Strings.isBlank(model.getDescription())) {
             doc = model.getDescription() + "\n\n" + doc;
@@ -256,11 +258,13 @@ public class EndpointDslMojo extends AbstractMojo {
 
 
             Property prop = target.addProperty(gtype, option.getName());
+            String fluentBuilderTypeName = target == commonClass ? packageName 
+ ".T" : target.getCanonicalName();
+            String fluentBuilderTypeShortName = target == commonClass ? "T" : 
target.getName();
             Method fluent = 
target.addMethod().setPublic().setName(option.getName())
-                    .setReturnType(new 
GenericType(loadClass(target.getCanonicalName())))
+                    .setReturnType(new 
GenericType(loadClass(fluentBuilderTypeName)) )
                     .addParameter(PRIMITIVEMAP.containsKey(ogtype.toString()) 
? ogtype : gtype, option.getName())
                     .setBody("this." + option.getName() + " = " + 
option.getName() + ";\n" +
-                             "return (" + target.getName() + ") this;\n");
+                             "return (" + fluentBuilderTypeShortName + ") 
this;\n");
             if ("true".equals(option.getDeprecated())) {
                 prop.getField().addAnnotation(Deprecated.class);
                 prop.getAccessor().addAnnotation(Deprecated.class);
@@ -277,6 +281,8 @@ public class EndpointDslMojo extends AbstractMojo {
             }
         }
 
+        javaClass.removeImport("T");
+
         String fileName = packageName.replaceAll("\\.", "\\/") + "/" + name + 
".java";
         writeSourceIfChanged(javaClass, fileName, false);
     }

Reply via email to