Skip to content

Commit d0a274c

Browse files
committed
Use API graph subclassing in GraphQL modelling
This simplifies some of the code.
1 parent 5e7a29a commit d0a274c

File tree

1 file changed

+7
-59
lines changed

1 file changed

+7
-59
lines changed

ruby/ql/lib/codeql/ruby/frameworks/GraphQL.qll

Lines changed: 7 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -10,44 +10,7 @@ private import codeql.ruby.dataflow.RemoteFlowSources
1010
private import codeql.ruby.ast.internal.Module
1111
private import codeql.ruby.ApiGraphs
1212

13-
private class GraphqlRelayClassicMutationAccess extends ConstantReadAccess {
14-
//GraphQL::Schema::RelayClassicMutation
15-
GraphqlRelayClassicMutationAccess() {
16-
this =
17-
API::getTopLevelMember("GraphQL")
18-
.getMember("Schema")
19-
.getMember("RelayClassicMutation")
20-
.getAUse()
21-
.asExpr()
22-
.getExpr()
23-
}
24-
}
25-
26-
private class GraphqlSchemaResolverAccess extends ConstantReadAccess {
27-
//GraphQL::Schema::Resolver
28-
GraphqlSchemaResolverAccess() {
29-
this =
30-
API::getTopLevelMember("GraphQL")
31-
.getMember("Schema")
32-
.getMember("Resolver")
33-
.getAUse()
34-
.asExpr()
35-
.getExpr()
36-
}
37-
}
38-
39-
private class GraphqlSchemaObjectAccess extends ConstantReadAccess {
40-
//GraphQL::Schema::Object
41-
GraphqlSchemaObjectAccess() {
42-
this =
43-
API::getTopLevelMember("GraphQL")
44-
.getMember("Schema")
45-
.getMember("Object")
46-
.getAUse()
47-
.asExpr()
48-
.getExpr()
49-
}
50-
}
13+
private API::Node graphQlSchema() { result = API::getTopLevelMember("GraphQL").getMember("Schema") }
5114

5215
/**
5316
* A `ClassDeclaration` for a class that extends `GraphQL::Schema::RelayClassicMutation`.
@@ -77,13 +40,8 @@ private class GraphqlSchemaObjectAccess extends ConstantReadAccess {
7740
*/
7841
private class GraphqlRelayClassicMutationClass extends ClassDeclaration {
7942
GraphqlRelayClassicMutationClass() {
80-
// class BaseMutation < GraphQL::Schema::RelayClassicMutation
81-
this.getSuperclassExpr() instanceof GraphqlRelayClassicMutationAccess
82-
or
83-
// class MyMutation < BaseMutation
84-
exists(GraphqlRelayClassicMutationClass other |
85-
other.getModule() = resolveConstantReadAccess(this.getSuperclassExpr())
86-
)
43+
this.getSuperclassExpr() =
44+
graphQlSchema().getMember("RelayClassicMutation").getASubclass*().getAUse().asExpr().getExpr()
8745
}
8846
}
8947

@@ -112,13 +70,8 @@ private class GraphqlRelayClassicMutationClass extends ClassDeclaration {
11270
*/
11371
private class GraphqlSchemaResolverClass extends ClassDeclaration {
11472
GraphqlSchemaResolverClass() {
115-
// class BaseResolver < GraphQL::Schema::Resolver
116-
this.getSuperclassExpr() instanceof GraphqlSchemaResolverAccess
117-
or
118-
// class MyResolver < BaseResolver
119-
exists(GraphqlSchemaResolverClass other |
120-
other.getModule() = resolveConstantReadAccess(this.getSuperclassExpr())
121-
)
73+
this.getSuperclassExpr() =
74+
graphQlSchema().getMember("Resolver").getASubclass*().getAUse().asExpr().getExpr()
12275
}
12376
}
12477

@@ -138,13 +91,8 @@ private class GraphqlSchemaResolverClass extends ClassDeclaration {
13891
*/
13992
class GraphqlSchemaObjectClass extends ClassDeclaration {
14093
GraphqlSchemaObjectClass() {
141-
// class BaseObject < GraphQL::Schema::Object
142-
this.getSuperclassExpr() instanceof GraphqlSchemaObjectAccess
143-
or
144-
// class MyObject < BaseObject
145-
exists(GraphqlSchemaObjectClass other |
146-
other.getModule() = resolveConstantReadAccess(this.getSuperclassExpr())
147-
)
94+
this.getSuperclassExpr() =
95+
graphQlSchema().getMember("Object").getASubclass*().getAUse().asExpr().getExpr()
14896
}
14997

15098
/** Gets a `GraphqlFieldDefinitionMethodCall` called in this class. */

0 commit comments

Comments
 (0)