public void addIncomingDependency(final DependencyGraphNode<T> source, final boolean isAssumed, final TraceInformation origin,
final IOriginRetentionPolicy originPolicy) {
synchronized (this) {
final Map<Integer, WeightedBidirectionalDependencyGraphEdge<T>> relevantDependencies =
isAssumed ? this.assumedIncomingDependencies : this.incomingDependencies;
WeightedBidirectionalDependencyGraphEdge<T> e = relevantDependencies.get(source.getId());
if (e == null) {
e = new WeightedBidirectionalDependencyGraphEdge<T>(this, source, origin, originPolicy);
relevantDependencies.put(source.getId(), e);
} else {
originPolicy.handleOrigin(e, origin);
}
e.getSourceWeight().incrementAndGet();
}
}