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;
