Add Missing Override query

This commit is contained in:
Joe Farebrother
2021-05-28 10:26:40 +01:00
parent ac35f348c4
commit 26d0e9df5d
5 changed files with 41 additions and 2 deletions

View File

@@ -228,10 +228,14 @@ class ClassPredicate extends TClassPredicate, Predicate {
override string getAPrimaryQlClass() { result = "ClassPredicate" }
predicate isPrivate() {
override Class getParent() { result.getAClassPredicate() = this }
predicate isPrivate() { hasAnnotation("private") }
predicate hasAnnotation(string name) {
exists(Generated::ClassMember member |
pred = member.getChild(_) and
member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private"
member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = name
)
}

View File

@@ -0,0 +1,20 @@
/**
* @name Missing override annotation
* @description Predicates that overide another predicate should have an `override` annotation.
* @kind problem
* @problem.severity warning
* @precision very-high
* @id ql/missing-override
* @tags maintainability
*/
import ql
string getQualifiedName(ClassPredicate p) {
result = p.getDeclaringType().getName() + "." + p.getName()
}
from ClassPredicate pred, ClassPredicate sup
where pred.overrides(sup) and not pred.hasAnnotation("override")
select pred, getQualifiedName(pred) + "overrides $@ but does not have an override annotation.", sup,
getQualifiedName(sup)

View File

@@ -0,0 +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 |

View File

@@ -0,0 +1 @@
queries/style/MissingOverride.ql

View File

@@ -0,0 +1,13 @@
import ql
class Super extends AstNode {
predicate test(int i) { i = [1 .. 5] }
}
class Correct extends Super {
override predicate test(int i) { i = 3 }
}
class Wrong extends Super {
predicate test(int i) { i = 2 }
}