@@ -57,7 +57,7 @@ private class KeyPathComponentNodeImpl extends TKeyPathComponentNode, NodeImpl {
5757 KeyPathComponent getComponent ( ) { result = component }
5858}
5959
60- private class KeyPathComponentPostUpdateNode extends TKeyPathComponentPostUpdateNode , NodeImpl {
60+ private class KeyPathComponentPostUpdateNode extends TKeyPathComponentPostUpdateNode , NodeImpl , PostUpdateNodeImpl {
6161 KeyPathComponent component ;
6262
6363 KeyPathComponentPostUpdateNode ( ) { this = TKeyPathComponentPostUpdateNode ( component ) }
@@ -70,6 +70,10 @@ private class KeyPathComponentPostUpdateNode extends TKeyPathComponentPostUpdate
7070 result .asSourceCallable ( ) = component .getKeyPathExpr ( )
7171 }
7272
73+ override KeyPathComponentNodeImpl getPreUpdateNode ( ) {
74+ result .getComponent ( ) = this .getComponent ( )
75+ }
76+
7377 KeyPathComponent getComponent ( ) { result = component }
7478}
7579
@@ -448,7 +452,7 @@ class KeyPathReturnPostUpdateNode extends NodeImpl, ParameterNodeImpl, PostUpdat
448452
449453 KeyPathReturnPostUpdateNode ( ) { this = TKeyPathReturnPostUpdateNode ( exit ) }
450454
451- override KeyPathParameterNode getPreUpdateNode ( ) {
455+ override KeyPathReturnNodeImpl getPreUpdateNode ( ) {
452456 result .getKeyPathExpr ( ) = this .getKeyPathExpr ( )
453457 }
454458
@@ -831,24 +835,6 @@ predicate storeStep(Node node1, ContentSet c, Node node2) {
831835 c instanceof OptionalSomeContentSet
832836 )
833837 or
834- // store through a component in a key-path expression chain
835- exists ( KeyPathComponent component |
836- component = node2 .( KeyPathComponentPostUpdateNode ) .getComponent ( ) and
837- (
838- c .isSingleton ( any ( Content:: FieldContent ct | ct .getField ( ) = component .getDeclRef ( ) ) )
839- or
840- c .isSingleton ( any ( Content:: ArrayContent ac ) ) and
841- component .isSubscript ( )
842- )
843- |
844- // the previous node is either the next element in the chain
845- node1 .( KeyPathComponentPostUpdateNode ) .getComponent ( ) = component .getNextComponent ( )
846- or
847- // or the return node, if this is the last component in the chain
848- not exists ( component .getNextComponent ( ) ) and
849- node1 .( KeyPathReturnPostUpdateNode ) .getKeyPathExpr ( ) = component .getKeyPathExpr ( )
850- )
851- or
852838 FlowSummaryImpl:: Private:: Steps:: summaryStoreStep ( node1 .( FlowSummaryNode ) .getSummaryNode ( ) , c ,
853839 node2 .( FlowSummaryNode ) .getSummaryNode ( ) )
854840}
0 commit comments