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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e3473d93c3bb7e24b2a0046cc3bc231230821bf6
Author: Otavio R. Piske <angusyo...@gmail.com>
AuthorDate: Sat Jan 8 17:53:16 2022 -0300

    (chores) camel-package-maven-plugin: additional updates to make it
    slightly faster
---
 .../packaging/AbstractGenerateConfigurerMojo.java  |   7 +-
 .../packaging/EndpointSchemaGeneratorMojo.java     |  23 ++-
 .../packaging/EndpointUriFactoryGenerator.java     |   2 -
 .../packaging/PropertyConfigurerGenerator.java     | 203 +++++++++++----------
 4 files changed, 122 insertions(+), 113 deletions(-)

diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
index 21affac..2846049 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java
@@ -432,11 +432,8 @@ public abstract class AbstractGenerateConfigurerMojo 
extends AbstractGeneratorMo
         String pfqn = fqn;
         String psn = 
"org.apache.camel.support.component.PropertyConfigurerSupport";
 
-        StringWriter sw = new StringWriter();
-        PropertyConfigurerGenerator.generatePropertyConfigurer(pn, cn, en, 
pfqn, psn,
-                false, false, extended, bootstrap, options, null, sw);
-
-        String source = sw.toString();
+        String source = 
PropertyConfigurerGenerator.generatePropertyConfigurer(pn, cn, en, pfqn, psn,
+                false, false, extended, bootstrap, options, null);
 
         String fileName = pn.replace('.', '/') + "/" + cn + ".java";
         outputDir.mkdirs();
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
index dbec27f..db6b4d3 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointSchemaGeneratorMojo.java
@@ -32,6 +32,8 @@ import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.Duration;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -179,7 +181,9 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
         }
     }
 
-    private void processSchemas(Map<Class, ComponentModel> models, Class<?> 
classElement, UriEndpoint uriEndpoint, String label, String[] schemes, String[] 
titles, String[] extendsSchemes) {
+    private void processSchemas(
+            Map<Class, ComponentModel> models, Class<?> classElement, 
UriEndpoint uriEndpoint, String label, String[] schemes,
+            String[] titles, String[] extendsSchemes) {
         for (int i = 0; i < schemes.length; i++) {
             final String alias = schemes[i];
             final String extendsAlias = i < extendsSchemes.length ? 
extendsSchemes[i] : extendsSchemes[0];
@@ -1327,11 +1331,20 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
             String pfqn, String psn, String scheme, boolean hasSuper, boolean 
component,
             Collection<? extends BaseOptionModel> options, ComponentModel 
model) {
 
-        try (Writer w = new StringWriter()) {
+        Instant start = Instant.now();
+        try {
             boolean extended = model.isApi(); // if the component is api then 
the generated configurer should be an extended configurer
-            PropertyConfigurerGenerator.generatePropertyConfigurer(pn, cn, en, 
pfqn, psn, hasSuper, component, extended, false,
-                    options, model, w);
-            updateResource(sourcesOutputDir.toPath(), fqn.replace('.', '/') + 
".java", w.toString());
+            String source = 
PropertyConfigurerGenerator.generatePropertyConfigurer(pn, cn, en, pfqn, psn, 
hasSuper, component,
+                    extended, false,
+                    options, model);
+
+            Instant end = Instant.now();
+
+            Duration duration = Duration.between(start, end);
+
+            getLog().info("Generated code 1 in: " + duration.toMillis());
+
+            updateResource(sourcesOutputDir.toPath(), fqn.replace('.', '/') + 
".java", source);
         } catch (Exception e) {
             throw new RuntimeException("Unable to generate source code file: " 
+ fqn + ": " + e.getMessage(), e);
         }
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriFactoryGenerator.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriFactoryGenerator.java
index cd4e95b..24e2aa8 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriFactoryGenerator.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriFactoryGenerator.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.maven.packaging;
 
-import java.io.IOException;
-import java.io.Writer;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.StringJoiner;
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
index 5f6f005..b0a3257 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.maven.packaging;
 
-import java.io.IOException;
-import java.io.Writer;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.LinkedHashSet;
@@ -32,38 +30,38 @@ public final class PropertyConfigurerGenerator {
     private PropertyConfigurerGenerator() {
     }
 
-    public static void generatePropertyConfigurer(
+    public static String generatePropertyConfigurer(
             String pn, String cn, String en,
             String pfqn, String psn, boolean hasSuper, boolean component, 
boolean extended, boolean bootstrap,
-            Collection<? extends BaseOptionModel> options, ComponentModel 
model, Writer w)
-            throws IOException {
+            Collection<? extends BaseOptionModel> options, ComponentModel 
model) {
 
-        w.write("/* " + AbstractGeneratorMojo.GENERATED_MSG + " */\n");
-        w.write("package " + pn + ";\n");
-        w.write("\n");
-        w.write("import java.util.Map;\n");
-        w.write("\n");
-        w.write("import org.apache.camel.CamelContext;\n");
-        w.write("import 
org.apache.camel.spi.ExtendedPropertyConfigurerGetter;\n");
-        w.write("import org.apache.camel.spi.PropertyConfigurerGetter;\n");
-        w.write("import org.apache.camel.spi.ConfigurerStrategy;\n");
-        w.write("import org.apache.camel.spi.GeneratedPropertyConfigurer;\n");
-        w.write("import org.apache.camel.util.CaseInsensitiveMap;\n");
-        w.write("import " + pfqn + ";\n");
-        w.write("\n");
-        w.write("/**\n");
-        w.write(" * " + AbstractGeneratorMojo.GENERATED_MSG + "\n");
-        w.write(" */\n");
-        w.write("@SuppressWarnings(\"unchecked\")\n");
-        w.write("public class " + cn + " extends " + psn
-                + " implements GeneratedPropertyConfigurer");
+        StringBuilder w = new StringBuilder();
+
+        w.append("/* ").append(AbstractGeneratorMojo.GENERATED_MSG + " */\n");
+        w.append("package ").append(pn).append(";\n");
+        w.append('\n');
+        w.append("import java.util.Map;\n");
+        w.append("\n");
+        w.append("import org.apache.camel.CamelContext;\n");
+        w.append("import 
org.apache.camel.spi.ExtendedPropertyConfigurerGetter;\n");
+        w.append("import org.apache.camel.spi.PropertyConfigurerGetter;\n");
+        w.append("import org.apache.camel.spi.ConfigurerStrategy;\n");
+        w.append("import org.apache.camel.spi.GeneratedPropertyConfigurer;\n");
+        w.append("import org.apache.camel.util.CaseInsensitiveMap;\n");
+        w.append("import ").append(pfqn).append(";\n");
+        w.append('\n');
+        w.append("/**\n");
+        w.append(" * 
").append(AbstractGeneratorMojo.GENERATED_MSG).append('\n');
+        w.append(" */\n");
+        w.append("@SuppressWarnings(\"unchecked\")\n");
+        w.append("public class ").append(cn).append(" extends 
").append(psn).append(" implements GeneratedPropertyConfigurer");
         if (extended) {
-            w.write(", ExtendedPropertyConfigurerGetter");
+            w.append(", ExtendedPropertyConfigurerGetter");
         } else {
-            w.write(", PropertyConfigurerGetter");
+            w.append(", PropertyConfigurerGetter");
         }
-        w.write(" {\n");
-        w.write("\n");
+        w.append(" {\n");
+        w.append('\n');
 
         // sort options A..Z so they always have same order
         if (!options.isEmpty()) {
@@ -74,13 +72,13 @@ public final class PropertyConfigurerGenerator {
         if (extended) {
             if (model != null || !hasSuper) {
                 // static block for all options which is immutable information
-                w.write("    private static final Map<String, Object> 
ALL_OPTIONS;\n");
+                w.append("    private static final Map<String, Object> 
ALL_OPTIONS;\n");
                 if (model != null) {
-                    w.write(generateAllOptions(cn, bootstrap, component, 
model));
+                    w.append(generateAllOptions(cn, bootstrap, component, 
model));
                 } else {
-                    w.write(generateAllOptions(cn, bootstrap, options));
+                    w.append(generateAllOptions(cn, bootstrap, options));
                 }
-                w.write("\n");
+                w.append('\n');
             }
         }
 
@@ -89,48 +87,49 @@ public final class PropertyConfigurerGenerator {
                 // if its a component configurer then configuration classes 
are optional and we need
                 // to generate a method that can lazy create a new 
configuration if it was null
                 for (BaseOptionModel bo : findConfigurations(options)) {
-                    w.write(createGetOrCreateConfiguration(en, 
bo.getConfigurationClass(),
+                    w.append(createGetOrCreateConfiguration(en, 
bo.getConfigurationClass(),
                             bo.getConfigurationField()));
-                    w.write("\n");
+                    w.append('\n');
                 }
             }
 
-            w.write("    @Override\n");
-            w.write("    public boolean configure(CamelContext camelContext, 
Object obj, String name, Object value, boolean ignoreCase) {\n");
+            w.append("    @Override\n");
+            w.append(
+                    "    public boolean configure(CamelContext camelContext, 
Object obj, String name, Object value, boolean ignoreCase) {\n");
             if (!options.isEmpty()) {
-                w.write("        " + en + " target = (" + en + ") obj;\n");
-                w.write("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
+                w.append("        ").append(en).append(" target = 
(").append(en).append(") obj;\n");
+                w.append("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
                 for (BaseOptionModel option : options) {
                     String getOrSet = option.getName();
                     getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
                     String setterLambda = setterLambda(getOrSet, 
option.getJavaType(), option.getSetterMethod(),
                             option.getConfigurationField(), component, 
option.getType());
                     if 
(!option.getName().toLowerCase().equals(option.getName())) {
-                        w.write(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
+                        w.append(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
                     }
-                    w.write(String.format("        case \"%s\": %s; return 
true;\n", option.getName(), setterLambda));
+                    w.append(String.format("        case \"%s\": %s; return 
true;\n", option.getName(), setterLambda));
                 }
                 if (hasSuper) {
-                    w.write("        default: return 
super.configure(camelContext, obj, name, value, ignoreCase);\n");
+                    w.append("        default: return 
super.configure(camelContext, obj, name, value, ignoreCase);\n");
                 } else {
-                    w.write("        default: return false;\n");
+                    w.append("        default: return false;\n");
                 }
-                w.write("        }\n");
+                w.append("        }\n");
             } else {
-                w.write("        return false;\n");
+                w.append("        return false;\n");
             }
-            w.write("    }\n");
+            w.append("    }\n");
 
             if (extended) {
                 // generate method that returns all the options
-                w.write("\n");
-                w.write("    @Override\n");
-                w.write("    public Map<String, Object> getAllOptions(Object 
target) {\n");
+                w.append('\n');
+                w.append("    @Override\n");
+                w.append("    public Map<String, Object> getAllOptions(Object 
target) {\n");
                 if (model != null || !hasSuper) {
-                    w.write("        return ALL_OPTIONS;\n");
-                    w.write("    }\n");
+                    w.append("        return ALL_OPTIONS;\n");
+                    w.append("    }\n");
                 } else {
-                    w.write("        Map<String, Object> answer = 
super.getAllOptions(target);\n");
+                    w.append("        Map<String, Object> answer = 
super.getAllOptions(target);\n");
                     if (!options.isEmpty()) {
                         for (BaseOptionModel option : options) {
                             // type may contain generics so remove those
@@ -139,42 +138,42 @@ public final class PropertyConfigurerGenerator {
                                 type = type.substring(0, type.indexOf('<'));
                             }
                             type = type.replace('$', '.');
-                            w.write(String.format("        answer.put(\"%s\", 
%s.class);\n", option.getName(), type));
+                            w.append(String.format("        answer.put(\"%s\", 
%s.class);\n", option.getName(), type));
                         }
-                        w.write("        return answer;\n");
-                        w.write("    }\n");
+                        w.append("        return answer;\n");
+                        w.append("    }\n");
                     }
                 }
             }
             if (bootstrap && extended) {
-                w.write("\n");
-                w.write("    public static void clearBootstrapConfigurers() 
{\n");
-                w.write("        ALL_OPTIONS.clear();\n");
-                w.write("    }\n");
+                w.append('\n');
+                w.append("    public static void clearBootstrapConfigurers() 
{\n");
+                w.append("        ALL_OPTIONS.clear();\n");
+                w.append("    }\n");
             }
 
             // generate method for autowired
             if (options.stream().anyMatch(BaseOptionModel::isAutowired)) {
-                w.write("\n");
-                w.write("    @Override\n");
-                w.write("    public String[] getAutowiredNames() {\n");
+                w.append('\n');
+                w.append("    @Override\n");
+                w.append("    public String[] getAutowiredNames() {\n");
                 String names = options.stream()
                         .filter(BaseOptionModel::isAutowired)
                         .map(BaseOptionModel::getName)
                         .map(PropertyConfigurerGenerator::quote)
                         .collect(Collectors.joining(","));
-                w.write("        return new String[]{");
-                w.write(names);
-                w.write("};\n");
-                w.write("    }\n");
+                w.append("        return new String[]{");
+                w.append(names);
+                w.append("};\n");
+                w.append("    }\n");
             }
 
             // generate method for getting a property type
-            w.write("\n");
-            w.write("    @Override\n");
-            w.write("    public Class<?> getOptionType(String name, boolean 
ignoreCase) {\n");
+            w.append('\n');
+            w.append("    @Override\n");
+            w.append("    public Class<?> getOptionType(String name, boolean 
ignoreCase) {\n");
             if (!options.isEmpty()) {
-                w.write("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
+                w.append("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
                 for (BaseOptionModel option : options) {
                     // type may contain generics so remove those
                     String type = option.getJavaType();
@@ -183,84 +182,86 @@ public final class PropertyConfigurerGenerator {
                     }
                     type = type.replace('$', '.');
                     if 
(!option.getName().toLowerCase().equals(option.getName())) {
-                        w.write(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
+                        w.append(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
                     }
-                    w.write(String.format("        case \"%s\": return 
%s.class;\n", option.getName(), type));
+                    w.append(String.format("        case \"%s\": return 
%s.class;\n", option.getName(), type));
                 }
                 if (hasSuper) {
-                    w.write("        default: return super.getOptionType(name, 
ignoreCase);\n");
+                    w.append("        default: return 
super.getOptionType(name, ignoreCase);\n");
                 } else {
-                    w.write("        default: return null;\n");
+                    w.append("        default: return null;\n");
                 }
-                w.write("        }\n");
+                w.append("        }\n");
             } else {
-                w.write("        return null;\n");
+                w.append("        return null;\n");
             }
-            w.write("    }\n");
+            w.append("    }\n");
 
             // generate method for getting a property
-            w.write("\n");
-            w.write("    @Override\n");
-            w.write("    public Object getOptionValue(Object obj, String name, 
boolean ignoreCase) {\n");
+            w.append('\n');
+            w.append("    @Override\n");
+            w.append("    public Object getOptionValue(Object obj, String 
name, boolean ignoreCase) {\n");
             if (!options.isEmpty()) {
-                w.write("        " + en + " target = (" + en + ") obj;\n");
-                w.write("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
+                w.append("        ").append(en).append(" target = 
(").append(en).append(") obj;\n");
+                w.append("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
                 for (BaseOptionModel option : options) {
                     String getOrSet = option.getName();
                     getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
                     String getterLambda = getterLambda(getOrSet, 
option.getJavaType(), option.getGetterMethod(),
                             option.getConfigurationField(), component);
                     if 
(!option.getName().toLowerCase().equals(option.getName())) {
-                        w.write(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
+                        w.append(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
                     }
-                    w.write(String.format("        case \"%s\": return %s;\n", 
option.getName(), getterLambda));
+                    w.append(String.format("        case \"%s\": return 
%s;\n", option.getName(), getterLambda));
                 }
                 if (hasSuper) {
-                    w.write("        default: return super.getOptionValue(obj, 
name, ignoreCase);\n");
+                    w.append("        default: return 
super.getOptionValue(obj, name, ignoreCase);\n");
                 } else {
-                    w.write("        default: return null;\n");
+                    w.append("        default: return null;\n");
                 }
-                w.write("        }\n");
+                w.append("        }\n");
             } else {
-                w.write("        return null;\n");
+                w.append("        return null;\n");
 
             }
-            w.write("    }\n");
+            w.append("    }\n");
 
             // nested type was stored in extra as we use BaseOptionModel to 
hold the option data
             boolean hasNestedTypes
                     = 
options.stream().map(BaseOptionModel::getNestedType).anyMatch(s -> s != null && 
!s.trim().isEmpty());
             if (hasNestedTypes) {
-                w.write("\n");
-                w.write("    @Override\n");
-                w.write("    public Object getCollectionValueType(Object 
target, String name, boolean ignoreCase) {\n");
+                w.append('\n');
+                w.append("    @Override\n");
+                w.append("    public Object getCollectionValueType(Object 
target, String name, boolean ignoreCase) {\n");
                 if (!options.isEmpty()) {
-                    w.write("        switch (ignoreCase ? name.toLowerCase() : 
name) {\n");
+                    w.append("        switch (ignoreCase ? name.toLowerCase() 
: name) {\n");
                     for (BaseOptionModel option : options) {
                         String nestedType = option.getNestedType();
                         if (nestedType != null && !nestedType.isEmpty()) {
                             nestedType = nestedType.replace('$', '.');
                             if 
(!option.getName().toLowerCase().equals(option.getName())) {
-                                w.write(String.format("        case 
\"%s\":\n", option.getName().toLowerCase()));
+                                w.append(String.format("        case 
\"%s\":\n", option.getName().toLowerCase()));
                             }
-                            w.write(String.format("        case \"%s\": return 
%s.class;\n", option.getName(), nestedType));
+                            w.append(String.format("        case \"%s\": 
return %s.class;\n", option.getName(), nestedType));
                         }
                     }
                     if (hasSuper) {
-                        w.write("        default: return 
super.getCollectionValueType(target, name, ignoreCase);\n");
+                        w.append("        default: return 
super.getCollectionValueType(target, name, ignoreCase);\n");
                     } else {
-                        w.write("        default: return null;\n");
+                        w.append("        default: return null;\n");
                     }
-                    w.write("        }\n");
+                    w.append("        }\n");
                 } else {
-                    w.write("        return null;\n");
+                    w.append("        return null;\n");
                 }
-                w.write("    }\n");
+                w.append("    }\n");
             }
         }
 
-        w.write("}\n");
-        w.write("\n");
+        w.append("}\n");
+        w.append('\n');
+
+        return w.toString();
     }
 
     private static String generateAllOptions(String className, boolean 
bootstrap, boolean component, ComponentModel model) {

Reply via email to