}
@Override
public MavenPlugin merge(final MavenPlugin dominant, final MavenPlugin recessive)
{
MavenPluginAdapter merged = new MavenPluginAdapter(dominant);
if (Dependencies.areEquivalent(dominant.getCoordinate(), recessive.getCoordinate()))
{
MavenPluginAdapter recessiveAdaptater = new MavenPluginAdapter(recessive);
// Merge the configurations
Xpp3Dom mergedDomConfig = Xpp3Dom.mergeXpp3Dom((Xpp3Dom) merged.getConfiguration(),
(Xpp3Dom) recessiveAdaptater.getConfiguration());
merged.setConfiguration(mergedDomConfig);
// Merge the executions
List<PluginExecution> mergedExecutions = mergePluginsExecutions(merged.getExecutionsAsMap(),
recessiveAdaptater.getExecutionsAsMap());
merged.setExecutions(mergedExecutions);
// Merge dependencies; only version required, we already know that groupId and artifactId are equals
if (Strings.isNullOrEmpty(merged.getVersion()))
{
merged.setVersion(recessiveAdaptater.getVersion());
}
// Extension flag
if (Strings.isNullOrEmpty(merged.getExtensions()))
{
merged.setExtensions(recessiveAdaptater.getExtensions());
}
// Inherited flag
if (Strings.isNullOrEmpty(merged.getInherited()))
{
merged.setExtensions(recessiveAdaptater.getInherited());
}
}
return merged;
}