@@ -5,6 +5,7 @@ private import codeql_ql.ast.internal.Predicate
55import codeql_ql.ast.internal.Type
66private import codeql_ql.ast.internal.Variable
77private import codeql_ql.ast.internal.Builtins
8+ private import internal.AstMocks as Mocks
89
910bindingset [ name]
1011private string directMember ( string name ) { result = name + "()" }
@@ -779,34 +780,44 @@ class TypeExpr extends TType, TypeRef {
779780 * A QL module.
780781 */
781782class Module extends TModule , ModuleDeclaration {
782- QL :: Module mod ;
783+ Mocks :: ModuleOrMock mod ;
783784
784785 Module ( ) { this = TModule ( mod ) }
785786
786- override Location getLocation ( ) { result = mod .getName ( ) .getLocation ( ) }
787+ override Location getLocation ( ) { result = mod .asLeft ( ) . getName ( ) .getLocation ( ) }
787788
788789 override string getAPrimaryQlClass ( ) { result = "Module" }
789790
790- override string getName ( ) { result = mod .getName ( ) .getChild ( ) .getValue ( ) }
791+ override string getName ( ) {
792+ result = mod .asLeft ( ) .getName ( ) .getChild ( ) .getValue ( )
793+ or
794+ result = mod .asRight ( ) .getName ( )
795+ }
791796
792797 /**
793798 * Gets a member of the module.
794799 */
795- AstNode getAMember ( ) { toQL ( result ) = mod . getChild ( _ ) . ( QL :: ModuleMember ) . getChild ( _) }
800+ AstNode getAMember ( ) { result = getMember ( _) }
796801
797- AstNode getMember ( int i ) { toQL ( result ) = mod .getChild ( i ) .( QL:: ModuleMember ) .getChild ( _) }
802+ AstNode getMember ( int i ) {
803+ toQL ( result ) = mod .asLeft ( ) .getChild ( i ) .( QL:: ModuleMember ) .getChild ( _)
804+ or
805+ toMock ( result ) = mod .asRight ( ) .getMember ( i )
806+ }
798807
799808 QLDoc getQLDocFor ( AstNode m ) {
800809 exists ( int i | result = this .getMember ( i ) and m = this .getMember ( i + 1 ) )
801810 }
802811
803812 /** Gets a ref to the module that this module implements. */
804813 TypeRef getImplements ( int i ) {
805- exists ( SignatureExpr sig | sig .toQL ( ) = mod .getImplements ( i ) | result = sig .asType ( ) )
814+ exists ( SignatureExpr sig | sig .toQL ( ) = mod .asLeft ( ) . getImplements ( i ) | result = sig .asType ( ) )
806815 }
807816
808817 /** Gets the module expression that this module is an alias for, if any. */
809- ModuleExpr getAlias ( ) { toQL ( result ) = mod .getAFieldOrChild ( ) .( QL:: ModuleAliasBody ) .getChild ( ) }
818+ ModuleExpr getAlias ( ) {
819+ toQL ( result ) = mod .asLeft ( ) .getAFieldOrChild ( ) .( QL:: ModuleAliasBody ) .getChild ( )
820+ }
810821
811822 override AstNode getAChild ( string pred ) {
812823 result = super .getAChild ( pred )
@@ -823,10 +834,12 @@ class Module extends TModule, ModuleDeclaration {
823834 /** Holds if the `i`th parameter of this module has `name` and type `sig`. */
824835 predicate hasParameter ( int i , string name , SignatureExpr sig ) {
825836 exists ( QL:: ModuleParam param |
826- param = mod .getParameter ( i ) and
837+ param = mod .asLeft ( ) . getParameter ( i ) and
827838 name = param .getParameter ( ) .getValue ( ) and
828839 sig .toQL ( ) = param .getSignature ( )
829840 )
841+ or
842+ mod .asRight ( ) .hasTypeParam ( i , toMock ( sig ) , name )
830843 }
831844}
832845
0 commit comments