[GERONIMO-6840] GraalVM 22.2 reflection model
diff --git a/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/model/ClassReflectionModel.java b/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/model/ClassReflectionModel.java
index 90a1381..3e83103 100644
--- a/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/model/ClassReflectionModel.java
+++ b/arthur-spi/src/main/java/org/apache/geronimo/arthur/spi/model/ClassReflectionModel.java
@@ -21,12 +21,17 @@
import lombok.NoArgsConstructor;
import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.toList;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ClassReflectionModel {
private String name;
+ private Condition condition; // >= GraalVM 22.2
private Boolean allDeclaredConstructors;
private Boolean allPublicConstructors;
private Boolean allDeclaredMethods;
@@ -35,23 +40,38 @@
private Boolean allPublicClasses;
private Boolean allDeclaredFields;
private Boolean allPublicFields;
+ private Boolean queryAllDeclaredMethods;
+ private Boolean queryAllDeclaredConstructors;
+ private Boolean queryAllPublicMethods;
+ private Boolean queryAllPublicConstructors;
+ private Boolean unsafeAllocated;
private Collection<FieldReflectionModel> fields;
private Collection<MethodReflectionModel> methods;
+ private Collection<MethodReflectionModel> queriedMethods;
+
+ public ClassReflectionModel(final String name,
+ final Boolean allDeclaredConstructors, final Boolean allPublicConstructors,
+ final Boolean allDeclaredMethods, final Boolean allPublicMethods,
+ final Boolean allDeclaredClasses, final Boolean allPublicClasses,
+ final Boolean allDeclaredFields, final Boolean allPublicFields,
+ final Collection<FieldReflectionModel> fields, final Collection<MethodReflectionModel> methods) {
+ this(name, null, allDeclaredConstructors, allPublicConstructors, allDeclaredMethods, allPublicMethods, allDeclaredClasses, allPublicClasses, allDeclaredFields, allPublicFields, null, null, null, null, null, fields, methods, null);
+ }
public ClassReflectionModel allPublic(final String name) {
- return new ClassReflectionModel(name, null, true, null, true, null, null, null, true, null, null);
+ return new ClassReflectionModel(name, null, null, true, null, true, null, null, null, true, null, null, null, null, null, null, null, null);
}
public ClassReflectionModel allPublicConstructors(final String name) {
- return new ClassReflectionModel(name, null, true, null, null, null, null, null, null, null, null);
+ return new ClassReflectionModel(name, null, null, true, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
}
public ClassReflectionModel allDeclaredConstructors(final String name) {
- return new ClassReflectionModel(name, null, null, true, null, null, null, null, null, null, null);
+ return new ClassReflectionModel(name, null, null, null, true, null, null, null, null, null, null, null, null, null, null, null, null, null);
}
public ClassReflectionModel allDeclared(final String name) {
- return new ClassReflectionModel(name, true, null, true, null, null, null, true, null, null, null);
+ return new ClassReflectionModel(name, null, true, null, true, null, null, null, true, null, null, null, null, null, null, null, null, null);
}
public void merge(final ClassReflectionModel other) {
@@ -79,6 +99,31 @@
if (other.getAllPublicClasses() != null && other.getAllPublicClasses()) {
setAllPublicClasses(true);
}
+ if (other.getQueryAllDeclaredMethods() != null && other.getQueryAllDeclaredMethods()) {
+ setQueryAllDeclaredMethods(true);
+ }
+ if (other.getQueryAllDeclaredConstructors() != null && other.getQueryAllDeclaredConstructors()) {
+ setQueryAllDeclaredConstructors(true);
+ }
+ if (other.getQueryAllPublicMethods() != null && other.getQueryAllPublicMethods()) {
+ setQueryAllPublicMethods(true);
+ }
+ if (other.getQueryAllPublicConstructors() != null && other.getQueryAllPublicConstructors()) {
+ setQueryAllPublicConstructors(true);
+ }
+ if (other.getUnsafeAllocated() != null && other.getUnsafeAllocated()) {
+ setUnsafeAllocated(true);
+ }
+ setFields(merge(other.getFields(), getFields()));
+ setMethods(merge(other.getMethods(), getMethods()));
+ setQueriedMethods(merge(other.getQueriedMethods(), getQueriedMethods()));
+ }
+
+ private <T> Collection<T> merge(final Collection<T> v1, final Collection<T> v2) {
+ if (v1 == null && v2 == null) {
+ return null;
+ }
+ return Stream.of(v1, v2).filter(Objects::nonNull).flatMap(Collection::stream).distinct().collect(toList());
}
@Data
@@ -102,4 +147,11 @@
private String name;
private Collection<Class<?>> parameterTypes;
}
+
+ @Data
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class Condition {
+ private String typeReachable;
+ }
}