InstantiatingNodeProcessor(Function<DAGNode<Component,Dependency>,Object> inst) {
instantiator = inst;
}
public DAGNode<Component, Dependency> processNode(@Nonnull DAGNode<Component, Dependency> node, @Nonnull DAGNode<Component, Dependency> original) {
Component label = node.getLabel();
Satisfaction satisfaction = label.getSatisfaction();
if (satisfaction.hasInstance()) {
return node;
}
Object obj = instantiator.apply(node);
Satisfaction instanceSat;
if (obj == null) {
instanceSat = Satisfactions.nullOfType(satisfaction.getErasedType());
} else {
instanceSat = Satisfactions.instance(obj);
}
Component newLabel = Component.create(instanceSat, label.getCachePolicy());
// build new node with replacement label
DAGNodeBuilder<Component,Dependency> bld = DAGNode.newBuilder(newLabel);
// retain all non-transient edges
for (DAGEdge<Component, Dependency> edge: node.getOutgoingEdges()) {
if (!GraphtUtils.edgeIsTransient(edge)) {