File tree Expand file tree Collapse file tree
src/codeql_ql/ast/internal Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -95,15 +95,24 @@ private module Cached {
9595 )
9696 or
9797 // super calls - and `this.method()` calls in charpreds. (Basically: in charpreds there is no difference between super and this.)
98- exists ( AstNode sup , ClassType type , Type supertype |
98+ exists ( AstNode sup , Type supertype |
9999 sup instanceof Super
100100 or
101101 sup .( ThisAccess ) .getEnclosingPredicate ( ) instanceof CharPred
102102 |
103103 mc .getBase ( ) = sup and
104- sup .getEnclosingPredicate ( ) .getParent ( ) .( Class ) .getType ( ) = type and
105- supertype in [ type .getASuperType ( ) , type .getAnInstanceofType ( ) ] and
106- p = supertype .getClassPredicate ( mc .getMemberName ( ) , mc .getNumberOfArguments ( ) )
104+ p = supertype .getClassPredicate ( mc .getMemberName ( ) , mc .getNumberOfArguments ( ) ) and
105+ (
106+ // super.method()
107+ not exists ( mc .getSuperType ( ) ) and
108+ exists ( ClassType type |
109+ sup .getEnclosingPredicate ( ) .getParent ( ) .( Class ) .getType ( ) = type and
110+ supertype in [ type .getASuperType ( ) , type .getAnInstanceofType ( ) ]
111+ )
112+ or
113+ // Class.super.method()
114+ supertype = mc .getSuperType ( ) .getResolvedType ( )
115+ )
107116 )
108117 }
109118
Original file line number Diff line number Diff line change @@ -24,3 +24,19 @@ module MyMod {
2424 }
2525 }
2626}
27+
28+ class Super1 extends int {
29+ Super1 ( ) { this = 42 }
30+
31+ predicate foo ( ) { any ( ) }
32+ }
33+
34+ class Super2 extends int {
35+ Super2 ( ) { this = 42 }
36+
37+ predicate foo ( ) { none ( ) }
38+ }
39+
40+ class Sub extends Super1 , Super2 {
41+ override predicate foo ( ) { Super1 .super .foo ( ) } // <- should resolve to Super1::foo()
42+ }
Original file line number Diff line number Diff line change @@ -16,7 +16,8 @@ getTarget
1616| Foo.qll:38:39:38:67 | MemberCall | file://:0:0:0:0 | regexpCapture |
1717| MultiResolve.qll:14:25:14:35 | PredicateCall | MultiResolve.qll:1:1:4:1 | ClasslessPredicate foo |
1818| MultiResolve.qll:14:25:14:35 | PredicateCall | MultiResolve.qll:12:1:12:24 | ClasslessPredicate myFoo |
19- | MultiResolve.qll:25:7:25:18 | PredicateCall | MultiResolve.qll:17:3:19:3 | ClasslessPredicate bar |
19+ | MultiResolve.qll:23:7:23:18 | PredicateCall | MultiResolve.qll:17:3:17:27 | ClasslessPredicate bar |
20+ | MultiResolve.qll:41:30:41:47 | MemberCall | MultiResolve.qll:31:3:31:27 | ClassPredicate foo |
2021| Overrides.qll:8:30:8:39 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
2122| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
2223| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:14:12:14:43 | ClassPredicate bar |
You can’t perform that action at this time.
0 commit comments