|
9 | 9 | * readability |
10 | 10 | * external/jsf |
11 | 11 | */ |
| 12 | + |
12 | 13 | import cpp |
13 | 14 |
|
14 | | -from Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, string subValue, string superValue |
15 | | -where p.hasInitializer() |
16 | | - and subF.getParameter(i) = p |
17 | | - and superP.hasInitializer() |
18 | | - and subF.overrides(superF) |
19 | | - and superF.getParameter(i) = superP |
20 | | - and subValue = p.getInitializer().getExpr().getValue() |
21 | | - and superValue = superP.getInitializer().getExpr().getValue() |
22 | | - and subValue != superValue |
23 | | -select p.getInitializer().getExpr(), |
24 | | - "Parameter " + p.getName() + |
25 | | - " redefines its default value to " + subValue + |
26 | | - " from the inherited default value " + superValue + |
27 | | - " (in " + superF.getDeclaringType().getName() + |
28 | | - ").\nThe default value will be resolved statically, not by dispatch, so this can cause confusion." |
| 15 | +predicate memberParameterWithDefault( |
| 16 | + MemberFunction f, int ix, Parameter p, Expr initExpr, string initValue |
| 17 | +) { |
| 18 | + f.getParameter(ix) = p and |
| 19 | + initExpr = p.getInitializer().getExpr() and |
| 20 | + initValue = initExpr.getValue() |
| 21 | +} |
| 22 | + |
| 23 | +from |
| 24 | + Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, Expr subExpr, |
| 25 | + string subValue, string superValue |
| 26 | +where |
| 27 | + memberParameterWithDefault(subF, i, p, subExpr, subValue) and |
| 28 | + subF.overrides(superF) and |
| 29 | + memberParameterWithDefault(superF, i, superP, _, superValue) and |
| 30 | + subValue != superValue |
| 31 | +select subExpr, |
| 32 | + "Parameter " + p.getName() + " redefines its default value to " + subValue + |
| 33 | + " from the inherited default value " + superValue + " (in " + |
| 34 | + superF.getDeclaringType().getName() + |
| 35 | + ").\nThe default value will be resolved statically, not by dispatch, so this can cause confusion." |
0 commit comments