private Model merge()

in src/com/facebook/buck/maven/Pom.java [162:336]


  private Model merge(Model first, @Nullable Model second) {
    if (second == null) {
      return first;
    }

    Model model = first.clone();

    // ---- Values from ModelBase

    List<String> modules = second.getModules();
    if (modules != null) {
      for (String module : modules) {
        model.addModule(module);
      }
    }

    DistributionManagement distributionManagement = second.getDistributionManagement();
    if (distributionManagement != null) {
      model.setDistributionManagement(distributionManagement);
    }

    Properties properties = second.getProperties();
    if (properties != null) {
      for (Map.Entry<Object, Object> entry : properties.entrySet()) {
        model.addProperty((String) entry.getKey(), (String) entry.getValue());
      }
    }

    DependencyManagement dependencyManagement = second.getDependencyManagement();
    if (dependencyManagement != null) {
      model.setDependencyManagement(dependencyManagement);
    }

    List<Dependency> dependencies = second.getDependencies();
    if (dependencies != null) {
      for (Dependency dependency : dependencies) {
        model.addDependency(dependency);
      }
    }

    List<Repository> repositories = second.getRepositories();
    if (repositories != null) {
      for (Repository repository : repositories) {
        model.addRepository(repository);
      }
    }

    List<Repository> pluginRepositories = second.getPluginRepositories();
    if (pluginRepositories != null) {
      for (Repository pluginRepository : pluginRepositories) {
        model.addPluginRepository(pluginRepository);
      }
    }

    // Ignore reports, reporting, and locations

    // ----- From Model
    Parent parent = second.getParent();
    if (parent != null) {
      model.setParent(parent);
    }

    Organization organization = second.getOrganization();
    if (organization != null) {
      model.setOrganization(organization);
    }

    List<License> licenses = second.getLicenses();
    Set<String> currentLicenseUrls = new HashSet<>();
    if (model.getLicenses() != null) {
      for (License license : model.getLicenses()) {
        currentLicenseUrls.add(license.getUrl());
      }
    }
    if (licenses != null) {
      for (License license : licenses) {
        if (!currentLicenseUrls.contains(license.getUrl())) {
          model.addLicense(license);
          currentLicenseUrls.add(license.getUrl());
        }
      }
    }

    List<Developer> developers = second.getDevelopers();
    Set<String> currentDevelopers = new HashSet<>();
    if (model.getDevelopers() != null) {
      for (Developer developer : model.getDevelopers()) {
        currentDevelopers.add(developer.getName());
      }
    }
    if (developers != null) {
      for (Developer developer : developers) {
        if (!currentDevelopers.contains(developer.getName())) {
          model.addDeveloper(developer);
          currentDevelopers.add(developer.getName());
        }
      }
    }

    List<Contributor> contributors = second.getContributors();
    Set<String> currentContributors = new HashSet<>();
    if (model.getContributors() != null) {
      for (Contributor contributor : model.getContributors()) {
        currentDevelopers.add(contributor.getName());
      }
    }
    if (contributors != null) {
      for (Contributor contributor : contributors) {
        if (!currentContributors.contains(contributor.getName())) {
          model.addContributor(contributor);
          currentContributors.add(contributor.getName());
        }
      }
    }

    List<MailingList> mailingLists = second.getMailingLists();
    if (mailingLists != null) {
      for (MailingList mailingList : mailingLists) {
        model.addMailingList(mailingList);
      }
    }

    Prerequisites prerequisites = second.getPrerequisites();
    if (prerequisites != null) {
      model.setPrerequisites(prerequisites);
    }

    Scm scm = second.getScm();
    if (scm != null) {
      model.setScm(scm);
    }

    String url = second.getUrl();
    if (url != null) {
      model.setUrl(url);
    }

    String description = second.getDescription();
    if (description != null) {
      model.setDescription(description);
    }

    IssueManagement issueManagement = second.getIssueManagement();
    if (issueManagement != null) {
      model.setIssueManagement(issueManagement);
    }

    CiManagement ciManagement = second.getCiManagement();
    if (ciManagement != null) {
      model.setCiManagement(ciManagement);
    }

    Build build = second.getBuild();
    if (build != null) {
      model.setBuild(build);
    }

    List<Profile> profiles = second.getProfiles();
    Set<String> currentProfileIds = new HashSet<>();
    if (model.getProfiles() != null) {
      for (Profile profile : model.getProfiles()) {
        currentProfileIds.add(profile.getId());
      }
    }
    if (profiles != null) {
      for (Profile profile : profiles) {
        if (!currentProfileIds.contains(profile.getId())) {
          model.addProfile(profile);
          currentProfileIds.add(profile.getId());
        }
      }
    }

    return model;
  }