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 079a19a55d1102e4b0bf944542070290d7c532c5
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Thu Apr 14 17:20:22 2022 +0200

    CAMEL-17984: enable class caching for all other classes
---
 .../maven/packaging/AbstractGeneratorMojo.java     | 11 ++---
 .../packaging/EndpointSchemaGeneratorMojo.java     | 51 +++++++++++++---------
 2 files changed, 34 insertions(+), 28 deletions(-)

diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
index 07e00ce7e95..aeb36f8189a 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGeneratorMojo.java
@@ -25,8 +25,8 @@ import java.nio.file.attribute.BasicFileAttributes;
 import java.time.Duration;
 import java.util.Collections;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Supplier;
 
 import org.apache.camel.tooling.util.FileUtil;
@@ -48,7 +48,7 @@ public abstract class AbstractGeneratorMojo extends 
AbstractMojo {
     public static final String GENERATED_MSG = "Generated by camel build tools 
- do NOT edit this file!";
     public static final String NL = "\n";
 
-    private static final Map<String, Class<?>> KNOWN_CLASSES_CACHE = new 
HashMap<>();
+    private static final Map<String, Class<?>> KNOWN_CLASSES_CACHE = new 
ConcurrentHashMap<>();
 
     /**
      * The maven project.
@@ -188,12 +188,7 @@ public abstract class AbstractGeneratorMojo extends 
AbstractMojo {
     }
 
     protected Class<?> loadClass(String loadClassName) {
-        final Class<?> ret = KNOWN_CLASSES_CACHE.get(loadClassName);
-        if (ret != null) {
-            return ret;
-        }
-
-        return doLoadClass(loadClassName);
+        return KNOWN_CLASSES_CACHE.computeIfAbsent(loadClassName, k -> 
doLoadClass(loadClassName));
     }
 
     private Class<?> doLoadClass(String loadClassName) {
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 72eb4265594..dfcbbc88466 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
@@ -199,22 +199,7 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
             }
             final String aliasTitle = aTitle;
 
-            ComponentModel parentData = null;
-            Class<?> superclass = classElement.getSuperclass();
-            if (superclass != null) {
-                parentData = models.get(superclass);
-                if (parentData == null) {
-                    UriEndpoint parentUriEndpoint = 
superclass.getAnnotation(UriEndpoint.class);
-                    if (parentUriEndpoint != null) {
-                        String parentScheme = 
parentUriEndpoint.scheme().split(",")[0];
-                        String superClassName = superclass.getName();
-                        String packageName = superClassName.substring(0, 
superClassName.lastIndexOf('.'));
-                        String fileName = packageName.replace('.', '/') + "/" 
+ parentScheme + ".json";
-                        String json = loadResource(fileName);
-                        parentData = JsonMapper.generateComponentModel(json);
-                    }
-                }
-            }
+            ComponentModel parentData = collectParentData(models, 
classElement);
 
             ComponentModel model = 
writeJSonSchemeAndPropertyConfigurer(classElement, uriEndpoint, aliasTitle, 
alias,
                     extendsAlias, label, schemes, parentData);
@@ -222,6 +207,28 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
         }
     }
 
+    private ComponentModel collectParentData(Map<Class, ComponentModel> 
models, Class<?> classElement) {
+        ComponentModel parentData = null;
+        final Class<?> superclass = classElement.getSuperclass();
+
+        if (superclass != null) {
+            parentData = models.get(superclass);
+            if (parentData == null) {
+                UriEndpoint parentUriEndpoint = 
superclass.getAnnotation(UriEndpoint.class);
+                if (parentUriEndpoint != null) {
+                    String parentScheme = 
parentUriEndpoint.scheme().split(",")[0];
+                    String superClassName = superclass.getName();
+                    String packageName = superClassName.substring(0, 
superClassName.lastIndexOf('.'));
+                    String fileName = packageName.replace('.', '/') + "/" + 
parentScheme + ".json";
+                    String json = loadResource(fileName);
+                    parentData = JsonMapper.generateComponentModel(json);
+                }
+            }
+        }
+
+        return parentData;
+    }
+
     private int compareClasses(Class<?> c1, Class<?> c2) {
         if (c1.isAssignableFrom(c2)) {
             return -1;
@@ -676,6 +683,7 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
     private void generateComponentConfigurer(
             UriEndpoint uriEndpoint, String scheme, String[] schemes, 
ComponentModel componentModel,
             ComponentModel parentData) {
+
         if (!uriEndpoint.generateConfigurer()) {
             return;
         }
@@ -685,8 +693,9 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
         }
         String pfqn;
         boolean hasSuper;
-        if (parentData != null
-                && loadClass(componentModel.getJavaType()).getSuperclass() == 
loadClass(parentData.getJavaType())) {
+
+        Class<?> superClazz = 
loadClass(componentModel.getJavaType()).getSuperclass();
+        if (parentData != null && 
superClazz.getName().equals(parentData.getJavaType())) {
             // special for activemq and amqp scheme which should reuse jms
             pfqn = parentData.getJavaType() + "Configurer";
             hasSuper = true;
@@ -734,10 +743,12 @@ public class EndpointSchemaGeneratorMojo extends 
AbstractGeneratorMojo {
         if (isFirstScheme(scheme, schemes)) {
             return;
         }
+
+        Class<?> superClazz = 
loadClass(componentModel.getJavaType()).getSuperclass();
+
         String pfqn;
         boolean hasSuper;
-        if (parentData != null
-                && loadClass(componentModel.getJavaType()).getSuperclass() == 
loadClass(parentData.getJavaType())) {
+        if (parentData != null && 
superClazz.getName().equals(parentData.getJavaType())) {
             try {
                 pfqn = classElement.getSuperclass().getName() + "Configurer";
                 hasSuper = true;

Reply via email to