mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Contrary to what the QLDoc says, this predicate was way too large to be
evaluated on the 'quick-lint/quick-lint-js' project.
Before:
```
Most expensive predicates for completed query RuleOfTwo.ql:
time | evals | max @ iter | predicate
------|-------|--------------|----------
25m9s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#ffff@8a38e2tm
17m1s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#fffb@0796c497
3.5s | 130 | 116ms @ 3 | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff@926a68j9
3.3s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#fffb_1230#join_rhs@25e9ffj8
1.7s | 3 | 1.7s @ 1 | Element#496c7fc2::ElementBase::toString#0#dispred#ff@fcd81c49
1.3s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#fffb_0132#join_rhs@9c2065t1
1.3s | | | Declaration#4bfb53be::DirectAccessHolder::thisCouldAccessMember#3#dispred#ffff_0132#join_rhs@672330eh
1.1s | | | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff_102#join_rhs@f7d5464o
829ms | 336 | 85ms @ 6 | Enclosing#c50c5fbf::exprEnclosingElement#1#ff@e34d9wq1
615ms | | | Expr#ef463c5d::Expr::getType#ff@e265e79q
```
After:
```
Most expensive predicates for completed query RuleOfTwo.ql:
time | evals | max @ iter | predicate
------|-------|-------------|----------
11.8s | | | _#Class#bacd9b46::Class::getADerivedClass#0#dispredPlus#ff_#Declaration#4bfb53be::AccessHolder::getE__#antijoin_rhs#1@fb0627h8
4.8s | | | _#Class#bacd9b46::Class::getADerivedClass#0#dispredPlus#ff_#Declaration#4bfb53be::AccessHolder::getE__#antijoin_rhs#4@c43dbeia
3.8s | | | _#Class#bacd9b46::Class::getADerivedClass#0#dispredPlus#ff_#Declaration#4bfb53be::AccessHolder::getE__#antijoin_rhs#3@313e5963
3.4s | 130 | 93ms @ 3 | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff@a0289bfg
1.5s | 3 | 1.5s @ 1 | Element#496c7fc2::ElementBase::toString#0#dispred#ff@fcd81c49
806ms | | | Declaration#4bfb53be::DirectAccessHolder::thisCanAccessClassTrans#fff_021#join_rhs@cc1b76s7
721ms | 336 | 61ms @ 5 | Enclosing#c50c5fbf::exprEnclosingElement#1#ff@e34d9wq1
489ms | | | Expr#ef463c5d::Expr::getType#ff@e265e79q
337ms | 130 | 62ms @ 5 | Class#bacd9b46::Class::accessOfBaseMemberMulti#ffff@0165b0dr
329ms | | | Variable#7a968d4e::ParameterDeclarationEntry::getAnonymousParameterDescription#0#dispred#ff@0f12bdvq
211ms | | | exprs_10#join_rhs@5481143i
```
This commit is contained in:
@@ -619,11 +619,10 @@ private class DirectAccessHolder extends Element {
|
||||
/**
|
||||
* Like `couldAccessMember` but only contains derivations in which either
|
||||
* (5.2), (5.3) or (5.4) must be invoked. In other words, the `this`
|
||||
* parameter is not ignored. This restriction makes it feasible to fully
|
||||
* enumerate this predicate even on large code bases. We check for 11.4 as
|
||||
* part of (5.3), since this further limits the number of tuples produced by
|
||||
* this predicate.
|
||||
* parameter is not ignored. We check for 11.4 as part of (5.3), since
|
||||
* this further limits the number of tuples produced by this predicate.
|
||||
*/
|
||||
pragma[inline]
|
||||
predicate thisCouldAccessMember(Class memberClass, AccessSpecifier memberAccess, Class derived) {
|
||||
// Only (5.4) is recursive, and chains of invocations of (5.4) can always
|
||||
// be collapsed to one invocation by the transitivity of 11.2/4.
|
||||
|
||||
Reference in New Issue
Block a user