public static void mergeReportPluginDefinitions()

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();
        }
    }