@@ -57,7 +57,7 @@ private class KeyPathComponentNodeImpl extends TKeyPathComponentNode, NodeImpl {
57
57
KeyPathComponent getComponent ( ) { result = component }
58
58
}
59
59
60
- private class KeyPathComponentPostUpdateNode extends TKeyPathComponentPostUpdateNode , NodeImpl {
60
+ private class KeyPathComponentPostUpdateNode extends TKeyPathComponentPostUpdateNode , NodeImpl , PostUpdateNodeImpl {
61
61
KeyPathComponent component ;
62
62
63
63
KeyPathComponentPostUpdateNode ( ) { this = TKeyPathComponentPostUpdateNode ( component ) }
@@ -70,6 +70,10 @@ private class KeyPathComponentPostUpdateNode extends TKeyPathComponentPostUpdate
70
70
result .asSourceCallable ( ) = component .getKeyPathExpr ( )
71
71
}
72
72
73
+ override KeyPathComponentNodeImpl getPreUpdateNode ( ) {
74
+ result .getComponent ( ) = this .getComponent ( )
75
+ }
76
+
73
77
KeyPathComponent getComponent ( ) { result = component }
74
78
}
75
79
@@ -448,7 +452,7 @@ class KeyPathReturnPostUpdateNode extends NodeImpl, ParameterNodeImpl, PostUpdat
448
452
449
453
KeyPathReturnPostUpdateNode ( ) { this = TKeyPathReturnPostUpdateNode ( exit ) }
450
454
451
- override KeyPathParameterNode getPreUpdateNode ( ) {
455
+ override KeyPathReturnNodeImpl getPreUpdateNode ( ) {
452
456
result .getKeyPathExpr ( ) = this .getKeyPathExpr ( )
453
457
}
454
458
@@ -831,24 +835,6 @@ predicate storeStep(Node node1, ContentSet c, Node node2) {
831
835
c instanceof OptionalSomeContentSet
832
836
)
833
837
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
852
838
FlowSummaryImpl:: Private:: Steps:: summaryStoreStep ( node1 .( FlowSummaryNode ) .getSummaryNode ( ) , c ,
853
839
node2 .( FlowSummaryNode ) .getSummaryNode ( ) )
854
840
}
0 commit comments