EventChainNode createParentEventChainCallback(VirtualFrame frame, EventBinding.Source<?> binding, RootNode rootNode, Set<Class<?>> providedTags) {
EventChainNode parent = findParentChain(frame, binding);
if (!(parent instanceof EventProviderWithInputChainNode)) {
return null;
}
EventContext parentContext = parent.findProbe().getContext();
EventProviderWithInputChainNode parentChain = (EventProviderWithInputChainNode) parent;
int index = indexOfChild(binding, rootNode, providedTags, parentContext.getInstrumentedNode(), parentContext.getInstrumentedSourceSection(), context.getInstrumentedNode());
if (index < 0 || index >= parentChain.inputCount) {
assert throwIllegalASTAssertion(parentChain, parentContext, binding, rootNode, providedTags, index);
return null;
}
ProbeNode probe = parent.findProbe();
return new InputValueChainNode(binding, probe, context, index);
}