I created a BermudanSwaption product class and ideally I would have wanted to derive it from Swaption but it is marked as final so I can’t. Also I will need to create a swap with embedded optionality and will need to create stand-alone CancellableSwap, CallableSwap etc since Swap is also marked final. This results in a lot of boilerplate coding. Is there a reason for making products final?
With regard to a Cancellable swap I could structure it with a swap and european swaption in the same trade. However it seems only 1 product per trade is supported?