void processBindToRegistryAnnotations()

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()));
                    });
        }
    }