I would put `return out` inside the `if (source.constru...`, and remove all `else`.