From 19e33b2e29b710dda106b74dc0b08af0b1c17a01 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 28 May 2021 07:42:36 +0000 Subject: [PATCH 1/3] bump precision --- ql/src/queries/style/GetAPrimaryQlClassConsistency.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ql/src/queries/style/GetAPrimaryQlClassConsistency.ql b/ql/src/queries/style/GetAPrimaryQlClassConsistency.ql index abd528eeb58..dd5da5d78ea 100644 --- a/ql/src/queries/style/GetAPrimaryQlClassConsistency.ql +++ b/ql/src/queries/style/GetAPrimaryQlClassConsistency.ql @@ -5,7 +5,7 @@ * @problem.severity error * @id ql/primary-ql-class-consistency * @tags correctness - * @precision low + * @precision very-high */ import ql From 75d77b70cc5d6f1ef663c7f972831cc555f32d02 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 28 May 2021 08:07:44 +0000 Subject: [PATCH 2/3] implement `ql/override-swapped-name` --- ql/src/queries/style/SwappedParameterNames.ql | 33 +++++++++++++++++++ .../SwappedParameterNames.expected | 2 ++ .../SwappedParameterNames.qlref | 1 + .../style/SwappedParameterNames/Test.qll | 13 ++++++++ 4 files changed, 49 insertions(+) create mode 100644 ql/src/queries/style/SwappedParameterNames.ql create mode 100644 ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected create mode 100644 ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.qlref create mode 100644 ql/test/queries/style/SwappedParameterNames/Test.qll diff --git a/ql/src/queries/style/SwappedParameterNames.ql b/ql/src/queries/style/SwappedParameterNames.ql new file mode 100644 index 00000000000..417decb57f7 --- /dev/null +++ b/ql/src/queries/style/SwappedParameterNames.ql @@ -0,0 +1,33 @@ +/** + * @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 + * @id ql/override-swapped-name + * @tags correctness + * maintainability + * @precision high + */ + +import ql + +pragma[noinline] +private predicate getAnOverridingParameter( + ClassPredicate pred, ClassPredicate sup, VarDecl parameter, string parName, string superName, + int index +) { + pred.overrides(sup) and + parameter = pred.getParameter(index) and + parameter.getName() = parName and + sup.getParameter(index).getName() = superName +} + +from + ClassPredicate pred, ClassPredicate sup, VarDecl parameter, string parName, string superName, + 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 diff --git a/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected b/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected new file mode 100644 index 00000000000..7a0ade691c6 --- /dev/null +++ b/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected @@ -0,0 +1,2 @@ +| Test.qll:12:27:12:35 | VarDecl | succ was $@ in the super class. | Test.qll:4:27:4:35 | VarDecl | named pred | +| Test.qll:12:38:12:46 | VarDecl | pred was $@ in the super class. | Test.qll:4:38:4:46 | VarDecl | named succ | diff --git a/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.qlref b/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.qlref new file mode 100644 index 00000000000..cab8c347410 --- /dev/null +++ b/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.qlref @@ -0,0 +1 @@ +queries/style/SwappedParameterNames.ql \ No newline at end of file diff --git a/ql/test/queries/style/SwappedParameterNames/Test.qll b/ql/test/queries/style/SwappedParameterNames/Test.qll new file mode 100644 index 00000000000..5c8083d3098 --- /dev/null +++ b/ql/test/queries/style/SwappedParameterNames/Test.qll @@ -0,0 +1,13 @@ +import ql + +class Sup extends AstNode { + abstract predicate step(Expr pred, Expr succ); +} + +class Correct extends Sup { + override predicate step(Expr pred, Expr succ) { none() } +} + +class Wrong extends Sup { + override predicate step(Expr succ, Expr pred) { none() } // <- swapped parameter names +} From 2430dbfd04f237443133a6b5310aa0551d92f553 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 28 May 2021 09:16:54 +0000 Subject: [PATCH 3/3] update expected output --- .../SwappedParameterNames/SwappedParameterNames.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected b/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected index 7a0ade691c6..367ac8b8471 100644 --- a/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected +++ b/ql/test/queries/style/SwappedParameterNames/SwappedParameterNames.expected @@ -1,2 +1,2 @@ -| Test.qll:12:27:12:35 | VarDecl | succ was $@ in the super class. | Test.qll:4:27:4:35 | VarDecl | named pred | -| Test.qll:12:38:12:46 | VarDecl | pred was $@ in the super class. | Test.qll:4:38:4:46 | VarDecl | named succ | +| Test.qll:12:27:12:35 | succ | succ was $@ in the super class. | Test.qll:4:27:4:35 | pred | named pred | +| Test.qll:12:38:12:46 | pred | pred was $@ in the super class. | Test.qll:4:38:4:46 | succ | named succ |