Merge pull request #18 from github/second-query

implement `ql/override-swapped-name`
This commit is contained in:
Erik Krogh Kristensen
2021-05-28 11:19:33 +02:00
committed by GitHub
5 changed files with 50 additions and 1 deletions

View File

@@ -5,7 +5,7 @@
* @problem.severity error
* @id ql/primary-ql-class-consistency
* @tags correctness
* @precision low
* @precision very-high
*/
import ql

View File

@@ -0,0 +1,33 @@
/**
* @name Swapped parameter names in overriding predicate.
* @description Swapping the parameter names in an overriding method indicates an implementation mistake.
* @kind problem
* @problem.severity warning
* @id ql/override-swapped-name
* @tags correctness
* maintainability
* @precision high
*/
import ql
pragma[noinline]
private predicate getAnOverridingParameter(
ClassPredicate pred, ClassPredicate sup, VarDecl parameter, string parName, string superName,
int index
) {
pred.overrides(sup) and
parameter = pred.getParameter(index) and
parameter.getName() = parName and
sup.getParameter(index).getName() = superName
}
from
ClassPredicate pred, ClassPredicate sup, VarDecl parameter, string parName, string superName,
int index
where
getAnOverridingParameter(pred, sup, parameter, parName, superName, index) and
superName != parName and
exists(int other | other != index | sup.getParameter(other).getName() = parName)
select parameter, parName + " was $@ in the super class.", sup.getParameter(index),
"named " + superName

View File

@@ -0,0 +1,2 @@
| Test.qll:12:27:12:35 | succ | succ was $@ in the super class. | Test.qll:4:27:4:35 | pred | named pred |
| Test.qll:12:38:12:46 | pred | pred was $@ in the super class. | Test.qll:4:38:4:46 | succ | named succ |

View File

@@ -0,0 +1 @@
queries/style/SwappedParameterNames.ql

View File

@@ -0,0 +1,13 @@
import ql
class Sup extends AstNode {
abstract predicate step(Expr pred, Expr succ);
}
class Correct extends Sup {
override predicate step(Expr pred, Expr succ) { none() }
}
class Wrong extends Sup {
override predicate step(Expr succ, Expr pred) { none() } // <- swapped parameter names
}