private void discoverSeriviceComponents()

in atomos.substrate.config/src/main/java/org/apache/felix/atomos/substrate/config/ReflectConfig.java [169:217]


    private void discoverSeriviceComponents(Map<String, ClassConfig> classes)
    {
        for (Bundle b : context.getBundles())
        {
            if (b.equals(context.getBundle()))
            {
                continue;
            }
            runtime.getComponentDescriptionDTOs(b).forEach((c) -> {
                Class<?> clazz;
                try
                {
                    clazz = b.loadClass(c.implementationClass);
                }
                catch (ClassNotFoundException e)
                {
                    return;
                }
                ClassConfig config = classes.computeIfAbsent(clazz.getName(),
                    (n) -> new ClassConfig(n));
                config.constructor = COMPONENT_CONSTRUCTOR;

                Optional.ofNullable(c.activate).ifPresent(
                    (m) -> addMethod(m, clazz, classes));
                Optional.ofNullable(c.modified).ifPresent(
                    (m) -> addMethod(m, clazz, classes));
                Optional.ofNullable(c.deactivate).ifPresent(
                    (m) -> addMethod(m, clazz, classes));
                for (String fName : c.activationFields)
                {
                    addField(fName, clazz, classes);
                }

                for (ReferenceDTO r : c.references)
                {
                    Optional.ofNullable(r.field).ifPresent(
                        (f) -> addField(f, clazz, classes));
                    Optional.ofNullable(r.bind).ifPresent(
                        (m) -> addMethod(m, clazz, classes));
                    Optional.ofNullable(r.updated).ifPresent(
                        (m) -> addMethod(m, clazz, classes));
                    Optional.ofNullable(r.unbind).ifPresent(
                        (m) -> addMethod(m, clazz, classes));
                    Optional.ofNullable(r.interfaceName).ifPresent(
                        (i) -> classes.computeIfAbsent(i, (n) -> new ClassConfig(n)));
                }
            });
        }
    }