Skip to content

Commit 9335932

Browse files
QL: Add Missing Override query
1 parent f46dab6 commit 9335932

5 files changed

Lines changed: 41 additions & 2 deletions

File tree

ql/src/codeql_ql/ast/Ast.qll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,14 @@ class ClassPredicate extends TClassPredicate, Predicate {
228228

229229
override string getAPrimaryQlClass() { result = "ClassPredicate" }
230230

231-
predicate isPrivate() {
231+
override Class getParent() { result.getAClassPredicate() = this }
232+
233+
predicate isPrivate() { hasAnnotation("private") }
234+
235+
predicate hasAnnotation(string name) {
232236
exists(Generated::ClassMember member |
233237
pred = member.getChild(_) and
234-
member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private"
238+
member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = name
235239
)
236240
}
237241

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @name Missing override annotation
3+
* @description Predicates that overide another predicate should have an `override` annotation.
4+
* @kind problem
5+
* @problem.severity warning
6+
* @precision very-high
7+
* @id ql/missing-override
8+
* @tags maintainability
9+
*/
10+
11+
import ql
12+
13+
string getQualifiedName(ClassPredicate p) {
14+
result = p.getDeclaringType().getName() + "." + p.getName()
15+
}
16+
17+
from ClassPredicate pred, ClassPredicate sup
18+
where pred.overrides(sup) and not pred.hasAnnotation("override")
19+
select pred, getQualifiedName(pred) + "overrides $@ but does not have an override annotation.", sup,
20+
getQualifiedName(sup)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| Test.qll:12:3:12:33 | ClassPredicate | Wrong.testoverrides $@ but does not have an override annotation. | Test.qll:4:3:4:40 | ClassPredicate | Super.test |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
queries/style/MissingOverride.ql
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import ql
2+
3+
class Super extends AstNode {
4+
predicate test(int i) { i = [1 .. 5] }
5+
}
6+
7+
class Correct extends Super {
8+
override predicate test(int i) { i = 3 }
9+
}
10+
11+
class Wrong extends Super {
12+
predicate test(int i) { i = 2 }
13+
}

0 commit comments

Comments
 (0)