Affects Version/s: 8.0-M0
Fix Version/s: None
Okay reviewing now:
These show a really tough problem where code reuse in our implementation wreck what should be a simple instance of check.
BinaryLogicalOperator > BinaryLogicalAbstract > LogicFilterImpl > (AndImpl, NotImpl, OrImpl)
Make BinaryLogicalAbstract not implement BinaryLogicalOperator (replying on AndIml and OrIml to get BinraryLogicalOperator via their interface only).
Trying out the solution now.
This worked out fine; the above two methods are no longer needed the result can now be accomplished cleanly using instance of checks.
a) filter instanceof BinaryLogicalOperator || filter instanceof Not
b) filter instance BinaryLogicalOperator