I'm sorry this is a bit abstract as I couldn't figure out a repro yet, but I can describe what is breaking, and exactly what code path causes the exception to occur.
This is in gradle 5.2.1.
Should never get ConcurrentModificationException.
Getting a ConcurrentModificationException here while resolving a configuration:
Caused by:
java.util.ConcurrentModificationException
:
(No message provided)
Close stacktrace
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.removeOutgoingEdges(NodeState.java:486)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitOutgoingDependencies(NodeState.java:230)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:169)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:131)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:121)
at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:171)
at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:86)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
Upon debugging, the place where the exception is _caused_ is as shown in the stacktrace below. This line NodeState.java:564 removes an item from the NodeState's outgoingEdges list that is being iterated on in removeOutgoingEdges, and so when the for-each loop calls next() on that iterator, it gets the exception.
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.clearConstraintEdges(NodeState.java:564)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.ModuleResolveState.decreaseHardEdgeCount(ModuleResolveState.java:367)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.EdgeState.maybeDecreaseHardEdgeCount(EdgeState.java:286)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.removeOutgoingEdges(NodeState.java:489)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.NodeState.visitOutgoingDependencies(NodeState.java:230)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:169)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:131)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:121)
at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:171)
at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:86)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
Build scan URL:
I found a way to reproduce this, working on a fix.
Most helpful comment
I found a way to reproduce this, working on a fix.