class IsleBeansEndpoint extends BeansEndpoint {

    private final ApplicationRuntimeModel applicationRuntimeModel;

    /**
     * Creates a new {@code BeansEndpoint} that will describe the beans in the given
     * {@code context} and all of its ancestors.
     *
     * @param context the application context
     * @param applicationRuntimeModel the application runtime model
     * @see ConfigurableApplicationContext#getParent()
     */
    public IsleBeansEndpoint(ConfigurableApplicationContext context,
                             ApplicationRuntimeModel applicationRuntimeModel) {
        super(context);
        this.applicationRuntimeModel = applicationRuntimeModel;
    }

    @ReadOperation
    @Override
    public BeansEndpoint.BeansDescriptor beans() {
        BeansEndpoint.BeansDescriptor beansDescriptor = super.beans();
        Map<String, BeansEndpoint.ContextBeansDescriptor> moduleApplicationContexts = getModuleApplicationContexts(applicationRuntimeModel);
        beansDescriptor.getContexts().putAll(moduleApplicationContexts);
        return beansDescriptor;
    }

    private Map<String, BeansEndpoint.ContextBeansDescriptor> getModuleApplicationContexts(ApplicationRuntimeModel applicationRuntimeModel) {<FILL_FUNCTION_BODY>}

    private BeansEndpoint.ContextBeansDescriptor describing(ConfigurableApplicationContext context,
                                                            String parentModuleName) {
        Map<String, BeanDescriptor> beanDescriptorMap = callContextBeansDescribeBeans(context
            .getBeanFactory());
        return createContextBeans(beanDescriptorMap, parentModuleName);
    }

    // FIXME only can use reflect now
    private Map<String, BeanDescriptor> callContextBeansDescribeBeans(ConfigurableListableBeanFactory beanFactory) {
        try {
            Class<?> clazz = BeansEndpoint.ContextBeansDescriptor.class;
            Method method = clazz.getDeclaredMethod("describeBeans",
                ConfigurableListableBeanFactory.class);
            method.setAccessible(true);
            Object result = method.invoke(null, beanFactory);
            return (Map<String, BeanDescriptor>) result;
        } catch (Throwable e) {
            // ignore
            return new HashMap<>();
        }
    }

    // FIXME only can use reflect now
    private BeansEndpoint.ContextBeansDescriptor createContextBeans(Map<String, BeanDescriptor> beans,
                                                                    String parentId) {
        try {
            Class<?> clazz = BeansEndpoint.ContextBeansDescriptor.class;
            Constructor<?> constructor = clazz.getDeclaredConstructor(Map.class, String.class);
            constructor.setAccessible(true);
            return (BeansEndpoint.ContextBeansDescriptor) constructor.newInstance(beans, parentId);
        } catch (Throwable e) {
            // ignore
            return null;
        }
    }

}

        Map<String, BeansEndpoint.ContextBeansDescriptor> contexts = new HashMap<>();
        List<DeploymentDescriptor> installedModules = applicationRuntimeModel.getInstalled();
        installedModules.forEach(descriptor -> {
            ApplicationContext applicationContext = descriptor.getApplicationContext();
            if (applicationContext instanceof ConfigurableApplicationContext) {
                BeansEndpoint.ContextBeansDescriptor contextBeans = describing((ConfigurableApplicationContext) applicationContext,
                        descriptor.getSpringParent());
                if (contextBeans != null) {
                    contexts.put(descriptor.getModuleName(), contextBeans);
                }
            }
        });
        return contexts;
    
<no_super_class>