mirror of
https://github.com/github/codeql.git
synced 2025-12-24 20:56:33 +01:00
41 lines
1.4 KiB
Plaintext
41 lines
1.4 KiB
Plaintext
/**
|
|
* @name Dead method
|
|
* @description Dead methods add unnecessary complexity.
|
|
* @kind problem
|
|
* @problem.severity recommendation
|
|
* @precision medium
|
|
* @id java/dead-function
|
|
* @tags maintainability
|
|
* useless-code
|
|
* external/cwe/cwe-561
|
|
*/
|
|
|
|
import java
|
|
import semmle.code.java.deadcode.DeadCode
|
|
|
|
from DeadMethod c, Callable origin, string reason
|
|
where
|
|
not c.getFile().isKotlinSourceFile() and
|
|
not origin.getFile().isKotlinSourceFile() and
|
|
not c.isInDeadScope() and
|
|
if exists(DeadRoot deadRoot | deadRoot = getADeadRoot(c) | deadRoot.getSourceDeclaration() != c)
|
|
then (
|
|
// We've found a dead root that is not this callable (or an instantiation thereof).
|
|
origin = getADeadRoot(c).getSourceDeclaration() and
|
|
reason = " is only used from dead code originating at $@."
|
|
) else (
|
|
origin = c and
|
|
if
|
|
exists(Callable cause | cause = possibleLivenessCause(c) and not cause instanceof DeadRoot |
|
|
cause.getSourceDeclaration() = c
|
|
implies
|
|
possibleLivenessCause(cause).getSourceDeclaration() != c
|
|
)
|
|
then
|
|
// There are no dead roots that are not this callable (or an instantiation thereof), and at least one
|
|
// liveness cause (ignoring trivial cycles between a parameterized callable and its source declaration).
|
|
reason = " is only used from, or in, a dead-code cycle."
|
|
else reason = " is entirely unused."
|
|
)
|
|
select c, "The method " + c.getName() + reason, origin, origin.getName()
|