private <A2, B2> boolean addStep(Class<A2> from, Class<B2> to, Transform<A2, B2> step) {
        requireNonNull(from);
        requireNonNull(to);
        requireNonNull(step);
        
        if (end == null || from.equals(end)) {
            if (steps.contains(step)) {
                return false;
            } else {
                steps.add(step);
                end = to;
                return true;
            }
        } else {
            throw new IllegalArgumentException("Transform " + step + " has a different entry class (" + from + ") than the last class in the current build (" + end + ").");
        }
    }
Attempts to add a new step to the bridge. If the step is already part of
the bridge, it will not be added. Returns true if the step was added.

@param <A2>  the initial type of the step
@param <B2>  the output type of the step
@param from  the initial type of the step
@param to    the output type of the step
@param step  the step to attempt to add
@return      true if the step was added
common-parent/codegen/src/main/java/com/speedment/common/codegen/internal/BridgeTransform.java