mirror of
https://github.com/github/codeql.git
synced 2026-02-08 03:01:10 +01:00
Merge pull request #18 from github/second-query
implement `ql/override-swapped-name`
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
* @problem.severity error
|
||||
* @id ql/primary-ql-class-consistency
|
||||
* @tags correctness
|
||||
* @precision low
|
||||
* @precision very-high
|
||||
*/
|
||||
|
||||
import ql
|
||||
|
||||
33
ql/src/queries/style/SwappedParameterNames.ql
Normal file
33
ql/src/queries/style/SwappedParameterNames.ql
Normal 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
|
||||
@@ -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 |
|
||||
@@ -0,0 +1 @@
|
||||
queries/style/SwappedParameterNames.ql
|
||||
13
ql/test/queries/style/SwappedParameterNames/Test.qll
Normal file
13
ql/test/queries/style/SwappedParameterNames/Test.qll
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user