Skip to content

Commit

Permalink
P2ResolverFactoryImpl: Improve calculateDependencyFragments performance
Browse files Browse the repository at this point in the history
Change-Id: I4416aec8dd12faeacb2bf1f84cf3608bbd8c308a
  • Loading branch information
sratz committed Mar 7, 2022
1 parent adad5c4 commit eec7918
Showing 1 changed file with 19 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
Expand Down Expand Up @@ -134,25 +132,26 @@ public Set<IInstallableUnit> calculateDependencyFragments(ResolutionData data,
if (fragmentsList.isEmpty()) {
return Collections.emptySet();
}
Set<IInstallableUnit> dependencyFragments = new HashSet<>();
for (Iterator<IInstallableUnit> iterator = resolvedUnits.iterator(); iterator.hasNext()
&& !fragmentsList.isEmpty();) {
IInstallableUnit resolvedUnit = iterator.next();
addMatchingFragments(fragmentsList, dependencyFragments, resolvedUnit);
}
return dependencyFragments;
}

private static void addMatchingFragments(List<Entry<IInstallableUnit, IRequiredCapability>> fragmentsList,
Set<IInstallableUnit> dependencyFragments, IInstallableUnit unitToMatch) {
Iterator<Entry<IInstallableUnit, IRequiredCapability>> iterator = fragmentsList.iterator();
while (iterator.hasNext()) {
Entry<IInstallableUnit, IRequiredCapability> fragment = iterator.next();
if (fragment.getValue().isMatch(unitToMatch)) {
dependencyFragments.add(fragment.getKey());
iterator.remove();
}
}
Map<String, List<IInstallableUnit>> availableIUsById = availableIUs.stream()//
.collect(Collectors.groupingBy(iu -> iu.getId()));

return fragmentsList.stream()//
.filter(entry -> {
IRequiredCapability hostRequirement = entry.getValue();
List<IInstallableUnit> potentialHosts = availableIUsById.get(entry.getValue().getName());
if (potentialHosts == null) { // quick lookup by ID
return false;
}
for (IInstallableUnit potentialHost : potentialHosts) {
if (hostRequirement.isMatch(potentialHost)) { // precise match
return true;
}
}
return false;
})//
.map(entry -> entry.getKey())//
.collect(Collectors.toSet());
}

private static Optional<Entry<IInstallableUnit, IRequiredCapability>> findFragmentHostRequirement(
Expand Down

0 comments on commit eec7918

Please sign in to comment.