in sapp/pipeline/propagate_shared_texts.py [0:0]
def _propagate_shared_texts(self, instance: IssueInstance) -> None:
"""Propagate the source kinds and features of this issue instance to all
reachable sink traces."""
graph = self.graph
features = {
text.id.local_id
for text in graph.get_issue_instance_shared_texts(
instance.id.local_id, SharedTextKind.FEATURE
)
}
initial_frames = graph.get_issue_instance_trace_frames(instance)
initial_source_frames = [
frame for frame in initial_frames if frame.kind == TraceKind.POSTCONDITION
]
initial_sink_frames = [
frame for frame in initial_frames if frame.kind == TraceKind.PRECONDITION
]
source_kind_list = [
graph.get_caller_leaf_kinds_of_frame(frame)
for frame in initial_source_frames
]
shared_text_kinds = set.union(*source_kind_list).union(features)
if len(shared_text_kinds) == 0:
return
initial_trace_length = instance.min_trace_length_to_sources or 0
self._propagate_kinds_along_traces(
initial_sink_frames, shared_text_kinds, initial_trace_length
)