in extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelRegistryProcessor.java [184:228]
void processBindToRegistryAnnotations(
Capabilities capabilities,
CombinedIndexBuildItem combinedIndex,
ContainerBeansBuildItem containerBeans,
List<CamelRoutesBuilderClassBuildItem> camelRoutes,
CamelContextBuildItem camelContextBuildItem,
CamelRecorder recorder) {
// java-joor-dsl has its own discovery mechanism for @BindToRegistry annotations
if (!capabilities.isPresent(CamelCapabilities.JAVA_JOOR_DSL)) {
// Process all classes containing occurrences of BindToRegistry, excluding existing known beans
combinedIndex.getIndex()
.getAnnotations(DotName.createSimple(BindToRegistry.class))
.stream()
.map(annotationInstance -> {
AnnotationTarget target = annotationInstance.target();
ClassInfo classInfo = null;
if (target.kind().equals(AnnotationTarget.Kind.CLASS)) {
classInfo = target.asClass();
}
if (target.kind().equals(AnnotationTarget.Kind.FIELD)) {
classInfo = target.asField().declaringClass();
}
if (target.kind().equals(AnnotationTarget.Kind.METHOD)) {
classInfo = target.asMethod().declaringClass();
}
return classInfo;
})
.filter(Objects::nonNull)
.filter(classInfo -> camelRoutes.stream()
.noneMatch(routeBuilder -> !classInfo.nestingType().equals(NestingType.TOP_LEVEL)
&& routeBuilder.getDotName().equals(classInfo.enclosingClass())))
.map(ClassInfo::name)
.filter(name -> containerBeans.getClasses().stream()
.noneMatch(containerBean -> containerBean.equals(name)))
.map(DotName::toString)
.distinct()
.forEach(beanClassName -> {
recorder.postProcessBeanAndBindToRegistry(camelContextBuildItem.getCamelContext(),
CamelSupport.loadClass(beanClassName, Thread.currentThread().getContextClassLoader()));
});
}
}