Skip to content

Commit

Permalink
fix: make dependency resolution more faster
Browse files Browse the repository at this point in the history
  • Loading branch information
teletha committed Sep 12, 2024
1 parent a72d93d commit de86898
Showing 1 changed file with 39 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -215,51 +215,49 @@ private void processDependency(Args args, List<RemoteRepository> repositories, D
boolean noDescriptor = isLackingDescriptor(dependency.getArtifact());
boolean traverse = !noDescriptor && (depTraverser == null || depTraverser.traverseDependency(dependency));

List<? extends Version> versions;
VersionRangeResult rangeResult;
try {
VersionRangeRequest rangeRequest = createVersionRangeRequest(args, repositories, dependency);

rangeResult = cachedResolveRangeResult(rangeRequest, args.pool, args.session);

versions = filterVersions(dependency, rangeResult, verFilter, args.versionContext);
} catch (VersionRangeResolutionException e) {
return;
}

for (Version version : versions) {
Artifact originalArtifact = dependency.getArtifact().setVersion(version.toString());
Dependency d = dependency.setArtifact(originalArtifact);

ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest(args, repositories, d);
ArtifactDescriptorResult descriptorResult = getArtifactDescriptorResult(args, noDescriptor, d, descriptorRequest);
if (descriptorResult != null) {
d = d.setArtifact(descriptorResult.getArtifact());
List<Artifact> subRelocations = descriptorResult.getRelocations();

if (!subRelocations.isEmpty()) {
processDependency(args, repositories, depSelector, depManager, depTraverser, verFilter, d, subRelocations, node);
} else {
d = args.pool.intern(d.setArtifact(args.pool.intern(d.getArtifact())));

DefaultDependencyNode child = createDependencyNode(relocations, rangeResult, version, d, descriptorResult
.getAliases(), repositories, args);

synchronized (node) {
node.getChildren().add(child);
}

boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty();
if (recurse) {
doRecurse(args, repositories, depSelector, depManager, depTraverser, verFilter, d, descriptorResult, child);
VersionRangeResult rangeResult = cachedResolveRangeResult(rangeRequest, args.pool, args.session);

for (Version version : filterVersions(dependency, rangeResult, verFilter, args.versionContext)) {
args.fork.submit(() -> {

Artifact originalArtifact = dependency.getArtifact().setVersion(version.toString());
Dependency d = dependency.setArtifact(originalArtifact);

ArtifactDescriptorRequest descriptorRequest = createArtifactDescriptorRequest(args, repositories, d);
ArtifactDescriptorResult descriptorResult = getArtifactDescriptorResult(args, noDescriptor, d, descriptorRequest);
if (descriptorResult != null) {
d = d.setArtifact(descriptorResult.getArtifact());
List<Artifact> subRelocations = descriptorResult.getRelocations();

if (!subRelocations.isEmpty()) {
processDependency(args, repositories, depSelector, depManager, depTraverser, verFilter, d, subRelocations, node);
} else {
d = args.pool.intern(d.setArtifact(args.pool.intern(d.getArtifact())));

DefaultDependencyNode child = createDependencyNode(relocations, rangeResult, version, d, descriptorResult
.getAliases(), repositories, args);

synchronized (node) {
node.getChildren().add(child);
}

boolean recurse = traverse && !descriptorResult.getDependencies().isEmpty();
if (recurse) {
doRecurse(args, repositories, depSelector, depManager, depTraverser, verFilter, d, descriptorResult, child);
}
}
} else {
DefaultDependencyNode child = createDependencyNode(relocations, rangeResult, version, d, null, repositories, args);
synchronized (node) {
node.getChildren().add(child);
}
}
}
} else {
DefaultDependencyNode child = createDependencyNode(relocations, rangeResult, version, d, null, repositories, args);
synchronized (node) {
node.getChildren().add(child);
}
});
}
} catch (VersionRangeResolutionException e) {
return;
}
}

Expand Down

0 comments on commit de86898

Please sign in to comment.