@@ -456,6 +456,11 @@ module DataFlow {
456456 prop = getPropertyName ( ) and
457457 rhs = getRhs ( )
458458 }
459+
460+ /**
461+ * Gets the node where the property write happens in the control flow graph.
462+ */
463+ abstract ControlFlowNode getWriteNode ( ) ;
459464 }
460465
461466 /**
@@ -481,6 +486,10 @@ module DataFlow {
481486 override Node getRhs ( ) {
482487 result = valueNode ( astNode .( LValue ) .getRhs ( ) )
483488 }
489+
490+ override ControlFlowNode getWriteNode ( ) {
491+ result = astNode .( LValue ) .getDefNode ( )
492+ }
484493 }
485494
486495 /**
@@ -505,6 +514,10 @@ module DataFlow {
505514 override Node getRhs ( ) {
506515 result = valueNode ( prop .( ValueProperty ) .getInit ( ) )
507516 }
517+
518+ override ControlFlowNode getWriteNode ( ) {
519+ result = prop
520+ }
508521 }
509522
510523 /**
@@ -534,6 +547,10 @@ module DataFlow {
534547 propdesc .hasPropertyWrite ( "value" , result )
535548 )
536549 }
550+
551+ override ControlFlowNode getWriteNode ( ) {
552+ result = odp .getAstNode ( )
553+ }
537554 }
538555
539556 /**
@@ -560,6 +577,10 @@ module DataFlow {
560577 not prop instanceof AccessorMethodDefinition and
561578 result = valueNode ( prop .getInit ( ) )
562579 }
580+
581+ override ControlFlowNode getWriteNode ( ) {
582+ result = prop
583+ }
563584 }
564585
565586 /**
@@ -584,6 +605,10 @@ module DataFlow {
584605 override Node getRhs ( ) {
585606 result = valueNode ( prop .getValue ( ) )
586607 }
608+
609+ override ControlFlowNode getWriteNode ( ) {
610+ result = prop
611+ }
587612 }
588613
589614 /**
@@ -835,6 +860,11 @@ module DataFlow {
835860 override Node getBase ( ) {
836861 result = valueNode ( arr )
837862 }
863+
864+ override ControlFlowNode getWriteNode ( ) {
865+ result = arr
866+ }
867+
838868 }
839869
840870 /**
0 commit comments