def _propagate_shared_texts()

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
        )