File tree Expand file tree Collapse file tree 3 files changed +31
-5
lines changed
src/codeql_ql/ast/internal Expand file tree Collapse file tree 3 files changed +31
-5
lines changed Original file line number Diff line number Diff line change @@ -95,15 +95,24 @@ private module Cached {
95
95
)
96
96
or
97
97
// 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 |
99
99
sup instanceof Super
100
100
or
101
101
sup .( ThisAccess ) .getEnclosingPredicate ( ) instanceof CharPred
102
102
|
103
103
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
+ )
107
116
)
108
117
}
109
118
Original file line number Diff line number Diff line change @@ -24,3 +24,19 @@ module MyMod {
24
24
}
25
25
}
26
26
}
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
16
16
| Foo.qll:38:39:38:67 | MemberCall | file://:0:0:0:0 | regexpCapture |
17
17
| MultiResolve.qll:14:25:14:35 | PredicateCall | MultiResolve.qll:1:1:4:1 | ClasslessPredicate foo |
18
18
| 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 |
20
21
| Overrides.qll:8:30:8:39 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
21
22
| Overrides.qll:16:39:16:48 | MemberCall | Overrides.qll:6:3:6:29 | ClassPredicate bar |
22
23
| 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