MetadataCollector Class — spring-boot Architecture
Architecture documentation for the MetadataCollector class in MetadataCollector.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
configuration-metadata/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/MetadataCollector.java lines 38–123
class MetadataCollector {
private final Predicate<ItemMetadata> mergeRequired;
private final ConfigurationMetadata previousMetadata;
private final Set<ItemMetadata> metadataItems = new LinkedHashSet<>();
private final Set<ItemHint> metadataHints = new LinkedHashSet<>();
/**
* Creates a new {@code MetadataProcessor} instance.
* @param mergeRequired specify whether an item can be merged
* @param previousMetadata any previous metadata or {@code null}
*/
MetadataCollector(Predicate<ItemMetadata> mergeRequired, ConfigurationMetadata previousMetadata) {
this.mergeRequired = mergeRequired;
this.previousMetadata = previousMetadata;
}
void add(ItemMetadata metadata) {
this.metadataItems.add(metadata);
}
void add(ItemMetadata metadata, Consumer<ItemMetadata> onConflict) {
ItemMetadata existing = find(metadata.getName());
if (existing != null) {
onConflict.accept(existing);
return;
}
add(metadata);
}
boolean addIfAbsent(ItemMetadata metadata) {
ItemMetadata existing = find(metadata.getName());
if (existing != null) {
return false;
}
add(metadata);
return true;
}
void add(ItemHint itemHint) {
this.metadataHints.add(itemHint);
}
boolean hasSimilarGroup(ItemMetadata metadata) {
if (!metadata.isOfItemType(ItemMetadata.ItemType.GROUP)) {
throw new IllegalStateException("item " + metadata + " must be a group");
}
for (ItemMetadata existing : this.metadataItems) {
if (existing.isOfItemType(ItemMetadata.ItemType.GROUP) && existing.getName().equals(metadata.getName())
&& existing.getType().equals(metadata.getType())) {
return true;
}
}
return false;
}
ConfigurationMetadata getMetadata() {
ConfigurationMetadata metadata = new ConfigurationMetadata();
for (ItemMetadata item : this.metadataItems) {
metadata.add(item);
}
for (ItemHint metadataHint : this.metadataHints) {
metadata.add(metadataHint);
}
if (this.previousMetadata != null) {
List<ItemMetadata> items = this.previousMetadata.getItems();
for (ItemMetadata item : items) {
if (this.mergeRequired.test(item)) {
metadata.addIfMissing(item);
}
}
}
return metadata;
}
private ItemMetadata find(String name) {
return this.metadataItems.stream()
.filter((candidate) -> name.equals(candidate.getName()))
.findFirst()
.orElse(null);
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free