for (String exportedPackage : exportedPackages)
{
Module otherModule = modulesByPackage.get(exportedPackage);
if (otherModule != null)
{
PackageCapability exportCapability = module.getExportCapability(exportedPackage);
if (exportCapability.getSplitPackagePolicy() == SplitPackagePolicy.Error)
{
// TODO JBCL-22 ERRORS
throw new IllegalStateException(module + " cannot be added because it is exports package " + exportedPackage + " which conflicts with " + otherModule);
}
}
}
}
// Check our requirements are consistent with the other requirements
List<RequirementDependencyItem> moduleDependencies = module.getDependencies();
if (requirements.isEmpty() == false)
{
if (moduleDependencies != null && moduleDependencies.isEmpty() == false)
{
for (RequirementDependencyItem dependency : moduleDependencies)
{
Requirement requirement = dependency.getRequirement();
for (Entry<Module, List<RequirementDependencyItem>> entry : requirements.entrySet())
{
Module otherModule = entry.getKey();
List<RequirementDependencyItem> dependencies = entry.getValue();
for (RequirementDependencyItem otherDependency : dependencies)
{
Requirement otherRequirement = otherDependency.getRequirement();
// TODO JBCL-22 ERRORS
if (requirement.isConsistent(otherRequirement) == false)
throw new IllegalStateException(module + " has a requirement " + requirement + " which is inconsistent with " + otherRequirement + " from " + otherModule);
}
}
}
}
}
// Update the exported packages
if (exportedPackages != null && exportedPackages.isEmpty() == false)
{
for (String exportedPackage : exportedPackages)
{
Module firstModule = modulesByPackage.get(exportedPackage);
PackageCapability exportCapability = module.getExportCapability(exportedPackage);
if (firstModule == null || exportCapability.getSplitPackagePolicy() == SplitPackagePolicy.Last)
modulesByPackage.put(exportedPackage, module);
}
}
// Remember the module requirements