private Module createCompositeModule(ModuleDescriptor compositeDescriptor, ModuleOptions options,
			ModuleDeploymentProperties deploymentProperties) {
		List<ModuleDescriptor> children = compositeDescriptor.getChildren();
		Assert.notEmpty(children, "child module list must not be empty");
		if (log.isInfoEnabled()) {
			log.info("creating composite module " + compositeDescriptor);
		}

		List<Module> childrenModules = new ArrayList<Module>(children.size());
		for (ModuleDescriptor moduleDescriptor : children) {
			ModuleOptions moduleOptions = new PrefixNarrowingModuleOptions(options, moduleDescriptor.getModuleName());
			// due to parser results being reversed, we add each at index 0
			// todo: is it right to pass the composite deploymentProperties here?
			childrenModules
					.add(0, createAndConfigureModuleInstance(moduleDescriptor, moduleOptions, deploymentProperties));
		}
		return new CompositeModule(compositeDescriptor, deploymentProperties, childrenModules);
	}
Create a composite module based on the provided {@link ModuleDescriptor},
{@link org.springframework.xd.module.options.ModuleOptions}, and
{@link org.springframework.xd.module.ModuleDeploymentProperties}.

@param compositeDescriptor descriptor for the composed module
@param options module options for the composed module
@param deploymentProperties deployment related properties for the composed module
@return new composed module instance
@see ModuleDescriptor#isComposed
spring-xd-module/src/main/java/org/springframework/xd/module/core/ModuleFactory.java