Skip to content

Commit

Permalink
fix: copy configurations into separate collection to avoid concurrent…
Browse files Browse the repository at this point in the history
… modifications

Signed-off-by: Gordon <gordon_rousselle@hotmail.com>
  • Loading branch information
gordonrousselle authored and skhokhlov committed Feb 4, 2025
1 parent 03f2bbd commit 955c785
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/main/java/org/cyclonedx/gradle/SbomGraphProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
Expand All @@ -43,6 +44,8 @@
class SbomGraphProvider implements Callable<SbomGraph> {

private static final String MESSAGE_RESOLVING_DEPS = "CycloneDX: Resolving Dependencies";
private static final Configuration[] CONFIG_TYPE = new Configuration[0];
private static final ResolvedArtifactResult[] ARTIFACT_TYPE = new ResolvedArtifactResult[0];

private final Project project;
private final CycloneDxTask task;
Expand Down Expand Up @@ -113,7 +116,7 @@ private Stream<Map<SbomComponentId, SbomComponent>> traverseProject(final Projec
final DependencyGraphTraverser traverser =
new DependencyGraphTraverser(project.getLogger(), getArtifacts(), mavenLookup, task);

return project.getConfigurations().stream()
return Arrays.stream(project.getConfigurations().toArray(CONFIG_TYPE))
.filter(configuration -> shouldIncludeConfiguration(configuration)
&& !shouldSkipConfiguration(configuration)
&& configuration.isCanBeResolved())
Expand All @@ -124,18 +127,17 @@ private Stream<Map<SbomComponentId, SbomComponent>> traverseProject(final Projec
private Map<ComponentIdentifier, File> getArtifacts() {
return Stream.concat(Stream.of(project), project.getSubprojects().stream())
.filter(project -> !shouldSkipProject(project))
.flatMap(project -> project.getConfigurations().stream())
.flatMap(project -> Arrays.stream(project.getConfigurations().toArray(CONFIG_TYPE)))
.filter(configuration -> shouldIncludeConfiguration(configuration)
&& !shouldSkipConfiguration(configuration)
&& configuration.isCanBeResolved())
.flatMap(config -> config
.getIncoming()
.flatMap(config -> Arrays.stream(config.getIncoming()
.artifactView(view -> {
view.lenient(true);
})
.getArtifacts()
.getArtifacts()
.stream())
.toArray(ARTIFACT_TYPE)))
.collect(Collectors.toMap(
artifact -> artifact.getId().getComponentIdentifier(),
ResolvedArtifactResult::getFile,
Expand Down

0 comments on commit 955c785

Please sign in to comment.