@@ -539,46 +539,32 @@ module NestJS {
539
539
)
540
540
}
541
541
542
- private DataFlow:: Node getConcreteClassFromProviderTuple ( DataFlow:: SourceNode tuple ) {
543
- result = tuple .getAPropertyWrite ( "useClass" ) .getRhs ( )
542
+ private DataFlow:: ClassNode getConcreteClassFromProviderTuple ( DataFlow:: SourceNode tuple ) {
543
+ result = tuple .getAPropertyWrite ( "useClass" ) .getRhs ( ) . asExpr ( ) . getNameBinding ( ) . getClassNode ( )
544
544
or
545
545
exists ( DataFlow:: FunctionNode f |
546
546
f = tuple .getAPropertyWrite ( "useFactory" ) .getRhs ( ) .getAFunctionValue ( ) and
547
- result . getAstNode ( ) = f .getFunction ( ) .getAReturnedExpr ( ) .getType ( ) .( ClassType ) . getClass ( )
547
+ result = f .getFunction ( ) .getAReturnedExpr ( ) .getTypeBinding ( ) .getAnUnderlyingClass ( )
548
548
)
549
549
or
550
- result . getAstNode ( ) =
551
- tuple .getAPropertyWrite ( "useValue" ) .getRhs ( ) .asExpr ( ) .getType ( ) .( ClassType ) . getClass ( )
550
+ result =
551
+ tuple .getAPropertyWrite ( "useValue" ) .getRhs ( ) .asExpr ( ) .getTypeBinding ( ) .getAnUnderlyingClass ( )
552
552
}
553
553
554
- private predicate providerPair ( DataFlow:: Node interface , DataFlow:: Node concreteClass ) {
554
+ private predicate providerPair ( DataFlow:: ClassNode interface , DataFlow:: ClassNode concreteClass ) {
555
555
exists ( DataFlow:: SourceNode tuple |
556
556
tuple = providerTuple ( ) .getALocalSource ( ) and
557
- interface = tuple .getAPropertyWrite ( "provide" ) .getRhs ( ) and
557
+ interface =
558
+ tuple .getAPropertyWrite ( "provide" ) .getRhs ( ) .asExpr ( ) .getNameBinding ( ) .getClassNode ( ) and
558
559
concreteClass = getConcreteClassFromProviderTuple ( tuple )
559
560
)
560
561
}
561
562
562
- /** Gets the class being referenced at `node` without relying on the call graph. */
563
- private DataFlow:: ClassNode getClassFromNode ( DataFlow:: Node node ) {
564
- result = node .asExpr ( ) .getNameBinding ( ) .getClassNode ( )
565
- }
566
-
567
- private predicate providerClassPair (
568
- DataFlow:: ClassNode interface , DataFlow:: ClassNode concreteClass
569
- ) {
570
- exists ( DataFlow:: Node interfaceNode , DataFlow:: Node concreteClassNode |
571
- providerPair ( interfaceNode , concreteClassNode ) and
572
- interface = getClassFromNode ( interfaceNode ) and
573
- concreteClass = getClassFromNode ( concreteClassNode )
574
- )
575
- }
576
-
577
563
private class DependencyInjectionStep extends PreCallGraphStep {
578
564
override predicate classInstanceSource ( DataFlow:: ClassNode cls , DataFlow:: Node node ) {
579
565
exists ( DataFlow:: ClassNode interfaceClass |
580
566
node .asExpr ( ) .getTypeBinding ( ) .getTypeDefinition ( ) = interfaceClass .getAstNode ( ) and
581
- providerClassPair ( interfaceClass , cls )
567
+ providerPair ( interfaceClass , cls )
582
568
)
583
569
}
584
570
}
0 commit comments