in src/main/java/org/apache/maven/plugin/resources/remote/ModelInheritanceAssembler.java [384:438]
public static void mergeReportPluginDefinitions(
ReportPlugin child, ReportPlugin parent, boolean handleAsInheritance) {
if ((child == null) || (parent == null)) {
// nothing to do.
return;
}
if ((child.getVersion() == null) && (parent.getVersion() != null)) {
child.setVersion(parent.getVersion());
}
// from here to the end of the method is dealing with merging of the <executions/> section.
String parentInherited = parent.getInherited();
boolean parentIsInherited = (parentInherited == null) || Boolean.parseBoolean(parentInherited);
List<ReportSet> parentReportSets = parent.getReportSets();
if ((parentReportSets != null) && !parentReportSets.isEmpty()) {
Map<String, ReportSet> assembledReportSets = new TreeMap<>();
Map<String, ReportSet> childReportSets = child.getReportSetsAsMap();
for (ReportSet parentReportSet : parentReportSets) {
if (!handleAsInheritance || parentIsInherited) {
ReportSet assembledReportSet = parentReportSet;
ReportSet childReportSet = childReportSets.get(parentReportSet.getId());
if (childReportSet != null) {
mergeReportSetDefinitions(childReportSet, parentReportSet);
assembledReportSet = childReportSet;
} else if (handleAsInheritance && (parentInherited == null)) {
parentReportSet.unsetInheritanceApplied();
}
assembledReportSets.put(assembledReportSet.getId(), assembledReportSet);
}
}
for (Map.Entry<String, ReportSet> entry : childReportSets.entrySet()) {
String id = entry.getKey();
if (!assembledReportSets.containsKey(id)) {
assembledReportSets.put(id, entry.getValue());
}
}
child.setReportSets(new ArrayList<>(assembledReportSets.values()));
child.flushReportSetMap();
}
}