/** * @name Complex condition * @description Very complex conditions are difficult to read and may include defects. * @kind problem * @problem.severity recommendation * @precision low * @id java/complex-condition * @tags testability * readability */ import java predicate nontrivialLogicalOperator(BinaryExpr e) { e instanceof LogicExpr and ( not e.getParent().(Expr).getKind() = e.getKind() or e.isParenthesized() ) } Expr getSimpleParent(Expr e) { result = e.getParent() and not result instanceof MethodAccess } from Expr e where not e.getParent() instanceof Expr and strictcount(BinaryExpr op | getSimpleParent*(op) = e and nontrivialLogicalOperator(op)) > 5 select e, "Complex condition: too many logical operations in this expression."