in extensions/groovy-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/groovy/deployment/GroovyDslProcessor.java [138:178]
void registerReflectiveClasses(
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
CombinedIndexBuildItem combinedIndexBuildItem) {
IndexView view = combinedIndexBuildItem.getIndex();
for (Class<?> type : CAMEL_REFLECTIVE_CLASSES) {
DotName name = DotName.createSimple(type.getName());
if (type.isInterface()) {
for (ClassInfo info : view.getAllKnownImplementors(name)) {
reflectiveClass.produce(ReflectiveClassBuildItem.builder(info.name().toString()).methods().build());
}
} else {
for (ClassInfo info : view.getAllKnownSubclasses(name)) {
reflectiveClass.produce(ReflectiveClassBuildItem.builder(info.name().toString()).methods().build());
}
}
reflectiveClass.produce(ReflectiveClassBuildItem.builder(type).methods().fields(type.isEnum()).build());
}
Set<Class<?>> types = new HashSet<>();
// Register all the Camel return types of public methods of the camel reflective classes for reflection to
// be accessible in native mode from a Groovy resource
for (Class<?> c : CAMEL_REFLECTIVE_CLASSES) {
for (Method method : c.getMethods()) {
if (!method.getDeclaringClass().equals(Object.class)) {
Class<?> returnType = method.getReturnType();
if (returnType.getPackageName().startsWith("org.apache.camel.")
&& !CAMEL_REFLECTIVE_CLASSES.contains(returnType)) {
types.add(returnType);
}
}
}
}
// Allow access to methods by reflection to be accessible in native mode from a Groovy resource
reflectiveClass.produce(
ReflectiveClassBuildItem.builder(types.toArray(new Class<?>[0])).constructors(false).methods().build());
}