File tree Expand file tree Collapse file tree 4 files changed +35
-3
lines changed
test/library-tests/dataflow/api-graphs Expand file tree Collapse file tree 4 files changed +35
-3
lines changed Original file line number Diff line number Diff line change @@ -88,12 +88,14 @@ module API {
88
88
* This predicate may have multiple results when there are multiple constructor calls invoking this API component.
89
89
* Consider using `getAnInstantiation()` if there is a need to distinguish between individual constructor calls.
90
90
*/
91
- Node getInstance ( ) { result = this .getASuccessor ( Label:: instance ( ) ) }
91
+ Node getInstance ( ) { result = this .getASubclass ( ) . getASuccessor ( Label:: instance ( ) ) }
92
92
93
93
/**
94
94
* Gets a node representing the result of calling a method on the receiver represented by this node.
95
95
*/
96
- Node getReturn ( string method ) { result = this .getASuccessor ( Label:: return ( method ) ) }
96
+ Node getReturn ( string method ) {
97
+ result = this .getASubclass ( ) .getASuccessor ( Label:: return ( method ) )
98
+ }
97
99
98
100
/**
99
101
* Gets a `new` call to the function represented by this API component.
Original file line number Diff line number Diff line change
1
+ classMethodCalls
2
+ | test1.rb:58:1:58:8 | Use getMember("M1").getMember("C1").getReturn("m") |
3
+ | test1.rb:59:1:59:8 | Use getMember("M2").getMember("C3").getReturn("m") |
4
+ instanceMethodCalls
5
+ | test1.rb:61:1:61:12 | Use getMember("M1").getMember("C1").instance.getReturn("m") |
6
+ | test1.rb:62:1:62:12 | Use getMember("M2").getMember("C3").instance.getReturn("m") |
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Tests of the public API of API Graphs
3
+ */
4
+
5
+ import codeql.ruby.ApiGraphs
6
+
7
+ query predicate classMethodCalls ( API:: Node node ) {
8
+ node = API:: getTopLevelMember ( "M1" ) .getMember ( "C1" ) .getReturn ( "m" )
9
+ }
10
+
11
+ query predicate instanceMethodCalls ( API:: Node node ) {
12
+ node = API:: getTopLevelMember ( "M1" ) .getMember ( "C1" ) .getInstance ( ) .getReturn ( "m" )
13
+ }
Original file line number Diff line number Diff line change @@ -32,6 +32,11 @@ module Inner
32
32
33
33
module M1
34
34
class C1
35
+ def self . m
36
+ end
37
+
38
+ def m
39
+ end
35
40
end
36
41
end
37
42
@@ -48,4 +53,10 @@ class C4 < C2 #$ use=getMember("C2")
48
53
49
54
C2 #$ use=getMember("C2") use=getMember("M1").getMember("C1").getASubclass()
50
55
M2 ::C3 #$ use=getMember("M2").getMember("C3") use=getMember("M1").getMember("C1").getASubclass()
51
- M2 ::C4 #$ use=getMember("M2").getMember("C4") use=getMember("C2").getASubclass() use=getMember("M1").getMember("C1").getASubclass().getASubclass()
56
+ M2 ::C4 #$ use=getMember("M2").getMember("C4") use=getMember("C2").getASubclass() use=getMember("M1").getMember("C1").getASubclass().getASubclass()
57
+
58
+ M1 ::C1 . m #$ use=getMember("M1").getMember("C1").getReturn("m")
59
+ M2 ::C3 . m #$ use=getMember("M2").getMember("C3").getReturn("m") use=getMember("M1").getMember("C1").getASubclass().getReturn("m")
60
+
61
+ M1 ::C1 . new . m #$ use=getMember("M1").getMember("C1").instance.getReturn("m")
62
+ M2 ::C3 . new . m #$ use=getMember("M2").getMember("C3").instance.getReturn("m")
You can’t perform that action at this time.
0 commit comments