@@ -369,7 +369,7 @@ module API {
369369
370370 final predicate isImplicit ( ) { not this .isExplicit ( _) }
371371
372- predicate isExplicit ( DataFlow:: TypeNameNode typeName ) { none ( ) }
372+ predicate isExplicit ( DataFlow:: Node node ) { none ( ) }
373373 }
374374
375375 final class TypeNameNode = AbstractTypeNameNode ;
@@ -392,8 +392,8 @@ module API {
392392 )
393393 }
394394
395- final override predicate isExplicit ( DataFlow:: TypeNameNode typeName ) {
396- Specific:: needsExplicitTypeNameNode ( typeName , prefix )
395+ final override predicate isExplicit ( DataFlow:: Node node ) {
396+ Specific:: needsExplicitTypeNameNode ( node , prefix )
397397 }
398398 }
399399
@@ -424,6 +424,18 @@ module API {
424424 }
425425 }
426426
427+ class NewObjectTypeNameNode extends AbstractTypeNameNode , Impl:: MkNewObjectTypeNameNode {
428+ NewObjectTypeNameNode ( ) { this = Impl:: MkNewObjectTypeNameNode ( prefix ) }
429+
430+ final override Node getSuccessor ( string name ) {
431+ result = Impl:: MkNewObjectTypeNameNode ( prefix + "." + name )
432+ }
433+
434+ final override predicate isExplicit ( DataFlow:: Node node ) {
435+ Specific:: needsNewObjectTypeNameNode ( node , prefix )
436+ }
437+ }
438+
427439 /**
428440 * An API entry point.
429441 *
@@ -517,6 +529,7 @@ module API {
517529 MkMethodAccessNode ( DataFlow:: CallNode call ) or
518530 MkExplicitTypeNameNode ( string prefix ) { Specific:: needsExplicitTypeNameNode ( _, prefix ) } or
519531 MkImplicitTypeNameNode ( string prefix ) { Specific:: needsImplicitTypeNameNode ( prefix ) } or
532+ MkNewObjectTypeNameNode ( string prefix ) { Specific:: needsNewObjectTypeNameNode ( _, prefix ) } or
520533 MkForwardNode ( DataFlow:: LocalSourceNode node , TypeTracker t ) { isReachable ( node , t ) } or
521534 /** Intermediate node for following backward data flow. */
522535 MkBackwardNode ( DataFlow:: LocalSourceNode node , TypeTracker t ) { isReachable ( node , t ) } or
0 commit comments