|
12 | 12 |
|
13 | 13 | import csharp |
14 | 14 |
|
15 | | -predicate nontrivialLogicalOperator(BinaryLogicalOperation e) { |
16 | | - not exists(BinaryLogicalOperation parent | |
| 15 | +abstract class RelevantBinaryOperations extends Operation { } |
| 16 | + |
| 17 | +private class AddBinaryLogicalOperationRelevantBinaryOperations extends RelevantBinaryOperations, |
| 18 | + BinaryLogicalOperation |
| 19 | +{ } |
| 20 | + |
| 21 | +private class AddAssignCoalesceExprRelevantBinaryOperations extends RelevantBinaryOperations, |
| 22 | + AssignCoalesceExpr |
| 23 | +{ } |
| 24 | + |
| 25 | +abstract class RelevantOperations extends Operation { } |
| 26 | + |
| 27 | +private class AddLogicalOperationRelevantOperations extends RelevantOperations, LogicalOperation { } |
| 28 | + |
| 29 | +private class AddAssignCoalesceExprRelevantOperations extends RelevantOperations, AssignCoalesceExpr |
| 30 | +{ } |
| 31 | + |
| 32 | +predicate nontrivialLogicalOperator(RelevantBinaryOperations e) { |
| 33 | + not exists(RelevantBinaryOperations parent | |
17 | 34 | parent = e.getParent() and |
18 | 35 | parent.getOperator() = e.getOperator() |
19 | 36 | ) |
20 | 37 | } |
21 | 38 |
|
22 | | -predicate logicalParent(LogicalOperation op, LogicalOperation parent) { parent = op.getParent() } |
| 39 | +predicate logicalParent(RelevantOperations op, RelevantOperations parent) { |
| 40 | + parent = op.getParent() |
| 41 | +} |
23 | 42 |
|
24 | 43 | from Expr e, int operators |
25 | 44 | where |
26 | | - not e.getParent() instanceof LogicalOperation and |
| 45 | + not e.getParent() instanceof RelevantOperations and |
27 | 46 | operators = |
28 | | - count(BinaryLogicalOperation op | logicalParent*(op, e) and nontrivialLogicalOperator(op)) and |
| 47 | + count(RelevantBinaryOperations op | logicalParent*(op, e) and nontrivialLogicalOperator(op)) and |
29 | 48 | operators > 3 |
30 | 49 | select e, "Complex condition: too many logical operations in this expression." |
0 commit comments