Merge pull request #95 from github/tausbn/add-override-test

Add test for `override`
This commit is contained in:
Taus
2021-10-15 16:00:15 +02:00
committed by GitHub
3 changed files with 40 additions and 1 deletions

View File

@@ -153,7 +153,9 @@ module PredConsistency {
strictcount(PredicateOrBuiltin p0 |
resolveCall(call, p0) and
// aliases are expected to resolve to multiple.
not exists(p0.(ClasslessPredicate).getAlias())
not exists(p0.(ClasslessPredicate).getAlias()) and
// overridden predicates may have multiple targets
not p0.(ClassPredicate).isOverride()
) and
c > 1 and
resolveCall(call, p)

View File

@@ -0,0 +1,30 @@
import ql
class Foo extends int {
Foo() { this in [1, 2, 3] }
int bar() { result = this }
predicate baz(int i) { i = this.bar() }
}
class Bar extends Foo {
Bar() { this = [1, 2] }
override int bar() { result = 10 * this }
override predicate baz(int i) { i = this.bar() }
}
class Baz extends Foo {
Baz() { this = 1 }
override int bar() { result = 100 * this }
override predicate baz(int i) { i = this.bar() }
}
query predicate test(Foo f, int i, int j) {
f.bar() = i and
f.baz(j)
}

View File

@@ -9,6 +9,13 @@ getTarget
| Foo.qll:31:5:31:12 | PredicateCall | Foo.qll:24:3:24:32 | ClasslessPredicate alias0 |
| Foo.qll:36:36:36:65 | MemberCall | file://:0:0:0:0 | replaceAll |
| Foo.qll:38:39:38:67 | MemberCall | file://:0:0:0:0 | regexpCapture |
| Overrides.qll:8:30:8:39 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:14:12:14:43 | ClassPredicate bar |
| Overrides.qll:24:39:24:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
| Overrides.qll:24:39:24:48 | MemberCall | Overrides.qll:22:12:22:44 | ClassPredicate bar |
| Overrides.qll:28:3:28:9 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
| Overrides.qll:29:3:29:10 | MemberCall | Overrides.qll:8:3:8:41 | ClassPredicate baz |
| packs/src/SrcThing.qll:4:3:4:8 | PredicateCall | packs/lib/LibThing/Foo.qll:1:1:1:30 | ClasslessPredicate foo |
| packs/src/SrcThing.qll:5:3:5:8 | PredicateCall | packs/src/SrcThing.qll:8:1:8:30 | ClasslessPredicate bar |
dependsOn