mirror of
https://github.com/github/codeql.git
synced 2026-02-08 03:01:10 +01:00
Merge pull request #29 from github/fourth-query
add `ql/override-parameter-name`
This commit is contained in:
@@ -32,6 +32,7 @@ class AstNode extends TAstNode {
|
||||
/**
|
||||
* Gets the location of the AST node.
|
||||
*/
|
||||
cached
|
||||
Location getLocation() {
|
||||
exists(Generated::AstNode node | not node instanceof Generated::ParExpr |
|
||||
node = toGenerated(this) and
|
||||
|
||||
31
ql/src/queries/style/OverridingParameterName.ql
Normal file
31
ql/src/queries/style/OverridingParameterName.ql
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* @name Using a different paramater name than used in the super-predicate.
|
||||
* @description Using another parameter can be an indication of copy-pasted code, or a mistake.
|
||||
* @kind problem
|
||||
* @problem.severity warning
|
||||
* @id ql/override-parameter-name
|
||||
* @tags correctness
|
||||
* maintainability
|
||||
* @precision medium
|
||||
*/
|
||||
|
||||
import ql
|
||||
|
||||
pragma[noinline]
|
||||
private predicate getAnOverridingParameter(
|
||||
ClassPredicate pred, ClassPredicate sup, VarDecl parameter, int index
|
||||
) {
|
||||
pred.overrides(sup) and
|
||||
parameter = pred.getParameter(index)
|
||||
}
|
||||
|
||||
from ClassPredicate pred, ClassPredicate sup, VarDecl parameter, int index
|
||||
where
|
||||
getAnOverridingParameter(pred, sup, parameter, index) and
|
||||
sup.getParameter(index).getName() != pred.getParameter(index).getName() and
|
||||
// avoid duplicated alerts with `ql/override-swapped-name`
|
||||
not exists(int other | other != index |
|
||||
sup.getParameter(other).getName() = pred.getParameter(index).getName()
|
||||
)
|
||||
select parameter, pred.getParameter(index).getName() + " was $@ in the super class.",
|
||||
sup.getParameter(index), "named " + sup.getParameter(index).getName()
|
||||
@@ -2,7 +2,7 @@
|
||||
* @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
|
||||
* @problem.severity error
|
||||
* @id ql/override-swapped-name
|
||||
* @tags correctness
|
||||
* maintainability
|
||||
@@ -13,21 +13,18 @@ import ql
|
||||
|
||||
pragma[noinline]
|
||||
private predicate getAnOverridingParameter(
|
||||
ClassPredicate pred, ClassPredicate sup, VarDecl parameter, string parName, string superName,
|
||||
int index
|
||||
ClassPredicate pred, ClassPredicate sup, VarDecl parameter, int index
|
||||
) {
|
||||
pred.overrides(sup) and
|
||||
parameter = pred.getParameter(index) and
|
||||
parameter.getName() = parName and
|
||||
sup.getParameter(index).getName() = superName
|
||||
parameter = pred.getParameter(index)
|
||||
}
|
||||
|
||||
from
|
||||
ClassPredicate pred, ClassPredicate sup, VarDecl parameter, string parName, string superName,
|
||||
int index
|
||||
from ClassPredicate pred, ClassPredicate sup, VarDecl parameter, 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
|
||||
getAnOverridingParameter(pred, sup, parameter, index) and
|
||||
sup.getParameter(index).getName() != pred.getParameter(index).getName() and
|
||||
exists(int other | other != index |
|
||||
sup.getParameter(other).getName() = pred.getParameter(index).getName()
|
||||
)
|
||||
select parameter, pred.getParameter(index).getName() + " was $@ in the super class.",
|
||||
sup.getParameter(index), "named " + sup.getParameter(index).getName()
|
||||
|
||||
Reference in New Issue
Block a user