This is an automated email from the ASF dual-hosted git repository. nfilotto pushed a commit to branch 4447/java-joor-improve-test-coverage in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 6929bd5f668757a79ade3ac7882be65d94d23da9 Author: Nicolas Filotto <[email protected]> AuthorDate: Mon Apr 3 15:43:09 2023 +0200 Ref #4716: java-joor-dsl - Support RegisterForReflection for the current class --- .../java/joor/deployment/JavaJoorDslProcessor.java | 36 ++++++++++++++-------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java b/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java index 433391cfb3..b149b67cbe 100644 --- a/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java +++ b/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java @@ -101,12 +101,14 @@ public class JavaJoorDslProcessor { .produce(new JavaJoorGeneratedClassBuildItem(className, nameToResource.get(className).getLocation(), result.getByteCode(className))); Class<?> aClass = result.getClass(className); + // Inner classes for (Class<?> clazz : aClass.getDeclaredClasses()) { String name = clazz.getName(); generatedClass .produce(new JavaJoorGeneratedClassBuildItem(name, nameToResource.get(className).getLocation(), result.getByteCode(name))); } + // Anonymous classes for (int i = 1;; i++) { String name = String.format("%s$%d", className, i); byte[] content = result.getByteCode(name); @@ -117,14 +119,13 @@ public class JavaJoorDslProcessor { .produce(new JavaJoorGeneratedClassBuildItem(name, nameToResource.get(className).getLocation(), content)); } - registerForReflection(reflectiveClass, lambdaCapturingTypeProducer, - aClass.getAnnotation(RegisterForReflection.class)); + registerForReflection(reflectiveClass, lambdaCapturingTypeProducer, aClass); } } private void registerForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass, - BuildProducer<LambdaCapturingTypeBuildItem> lambdaCapturingTypeProducer, - RegisterForReflection annotation) { + BuildProducer<LambdaCapturingTypeBuildItem> lambdaCapturingTypeProducer, Class<?> aClass) { + RegisterForReflection annotation = aClass.getAnnotation(RegisterForReflection.class); if (annotation == null) { return; } @@ -142,18 +143,28 @@ public class JavaJoorDslProcessor { LOG.warn( "The element 'registerFullHierarchy' of the annotation 'RegisterForReflection' is not supported by the extension Camel Java jOOR DSL"); } - for (Class<?> type : annotation.targets()) { - registerClass(type.getName(), methods, fields, ignoreNested, serialization, + Class<?>[] targets = annotation.targets(); + String[] classNames = annotation.classNames(); + if (targets.length == 0 && classNames.length == 0) { + // No target and classname set, the target is then the class itself + registerClass(aClass, aClass.getName(), methods, fields, ignoreNested, serialization, + unsafeAllocated, reflectiveClass); + return; + } + + for (Class<?> type : targets) { + registerClass(type, type.getName(), methods, fields, ignoreNested, serialization, unsafeAllocated, reflectiveClass); } - for (String className : annotation.classNames()) { - registerClass(className, methods, fields, ignoreNested, serialization, unsafeAllocated, + for (String className : classNames) { + registerClass(null, className, methods, fields, ignoreNested, serialization, unsafeAllocated, reflectiveClass); } } - private void registerClass(String className, boolean methods, boolean fields, boolean ignoreNested, boolean serialization, + private void registerClass(Class<?> type, String className, boolean methods, boolean fields, boolean ignoreNested, + boolean serialization, boolean unsafeAllocated, BuildProducer<ReflectiveClassBuildItem> reflectiveClass) { reflectiveClass.produce(serialization ? ReflectiveClassBuildItem.builder(className).serialization().unsafeAllocated(unsafeAllocated).build() @@ -165,10 +176,9 @@ public class JavaJoorDslProcessor { } try { - Class<?>[] declaredClasses = Thread.currentThread().getContextClassLoader().loadClass(className) - .getDeclaredClasses(); - for (Class<?> clazz : declaredClasses) { - registerClass(clazz.getName(), methods, fields, false, serialization, unsafeAllocated, + Class<?> aClass = type == null ? Thread.currentThread().getContextClassLoader().loadClass(className) : type; + for (Class<?> clazz : aClass.getDeclaredClasses()) { + registerClass(clazz, clazz.getName(), methods, fields, false, serialization, unsafeAllocated, reflectiveClass); } } catch (ClassNotFoundException e) {
