You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2022/04/14 16:52:01 UTC
[camel] 04/04: CAMEL-17984: enable class caching for all other classes
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 <an...@gmail.com>
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;