mirror of
https://github.com/github/codeql.git
synced 2025-12-19 10:23:15 +01:00
40 lines
1.4 KiB
Plaintext
40 lines
1.4 KiB
Plaintext
/**
|
|
* @name Mismatch between signature and use of an overridden method
|
|
* @description Method has a signature that differs from both the signature of its overriding methods and
|
|
* the arguments with which it is called, and if it were called, would be likely to cause an error.
|
|
* @kind problem
|
|
* @tags quality
|
|
* reliability
|
|
* correctness
|
|
* @problem.severity recommendation
|
|
* @sub-severity high
|
|
* @precision high
|
|
* @id py/inheritance/incorrect-overridden-signature
|
|
*/
|
|
|
|
import python
|
|
import Expressions.CallArgs
|
|
|
|
from Call call, FunctionValue func, FunctionValue overriding, string problem
|
|
where
|
|
not func.getName() = "__init__" and
|
|
overriding.overrides(func) and
|
|
call = overriding.getAMethodCall().getNode() and
|
|
correct_args_if_called_as_method(call, overriding) and
|
|
(
|
|
arg_count(call) + 1 < func.minParameters() and problem = "too few arguments"
|
|
or
|
|
arg_count(call) >= func.maxParameters() and problem = "too many arguments"
|
|
or
|
|
exists(string name |
|
|
call.getAKeyword().getArg() = name and
|
|
overriding.getScope().getAnArg().(Name).getId() = name and
|
|
not func.getScope().getAnArg().(Name).getId() = name and
|
|
problem = "an argument named '" + name + "'"
|
|
)
|
|
)
|
|
select func,
|
|
"Overridden method signature does not match $@, where it is passed " + problem +
|
|
". Overriding method $@ matches the call.", call, "call", overriding,
|
|
overriding.descriptiveString()
|