class DefaultDependencyMetadataProvider implements DependencyMetadataProvider {

	@Override
	@Cacheable(cacheNames = "initializr.dependency-metadata", key = "#p1")
	public DependencyMetadata get(InitializrMetadata metadata, Version bootVersion) {<FILL_FUNCTION_BODY>}

}

		Map<String, Dependency> dependencies = new LinkedHashMap<>();
		for (Dependency dependency : metadata.getDependencies().getAll()) {
			if (dependency.match(bootVersion)) {
				dependencies.put(dependency.getId(), dependency.resolve(bootVersion));
			}
		}

		Map<String, Repository> repositories = new LinkedHashMap<>();
		for (Dependency dependency : dependencies.values()) {
			if (dependency.getRepository() != null) {
				repositories.put(dependency.getRepository(),
						metadata.getConfiguration().getEnv().getRepositories().get(dependency.getRepository()));
			}
		}

		Map<String, BillOfMaterials> boms = new LinkedHashMap<>();
		for (Dependency dependency : dependencies.values()) {
			if (dependency.getBom() != null) {
				boms.put(dependency.getBom(),
						metadata.getConfiguration().getEnv().getBoms().get(dependency.getBom()).resolve(bootVersion));
			}
		}
		// Each resolved bom may require additional repositories
		for (BillOfMaterials bom : boms.values()) {
			for (String id : bom.getRepositories()) {
				repositories.put(id, metadata.getConfiguration().getEnv().getRepositories().get(id));
			}
		}

		return new DependencyMetadata(bootVersion, dependencies, repositories, boms);
	
<no_super_class>