private <
InputT extends PInput,
OutputT extends POutput,
TransformT extends PTransform<? super InputT, OutputT>>
void applyReplacement(
Node original,
PTransformOverrideFactory<InputT, OutputT, TransformT> replacementFactory) {
PTransformReplacement<InputT, OutputT> replacement =
replacementFactory.getReplacementTransform(
(AppliedPTransform<InputT, OutputT, TransformT>) original.toAppliedPTransform(this));
if (replacement.getTransform() == original.getTransform()) {
return;
}
InputT originalInput = replacement.getInput();
LOG.debug("Replacing {} with {}", original, replacement);
transforms.replaceNode(original, originalInput, replacement.getTransform());
try {
OutputT newOutput = replacement.getTransform().expand(originalInput);
Map<PValue, ReplacementOutput> originalToReplacement =
replacementFactory.mapOutputs(original.getOutputs(), newOutput);
transforms.setOutput(newOutput);
transforms.replaceOutputs(originalToReplacement);
} finally {
transforms.popNode();
}
}