\begin{algorithm}
        \caption{Call-Graph-Construction}
        \begin{algorithmic}
        \INPUT Signature of entry methods $m^{entry}$.
        \OUTPUT Call Graph CG, a set of call edges.
        \PROCEDURE{BuildCallGraph}{$m^{entry}$}
            \STATE $WL = [m^{entry}]$ \COMMENT{Work List, containing the methods to be processed}
            \STATE $CG = \{\}$ \COMMENT{Call Graph, a set of call edges}
            \STATE $RM = \{\}$ \COMMENT{A set of reachable methods}
            \WHILE{$WL$ \textbf{is} \NOT empty}
                \STATE remove $m$ from $WL$ \COMMENT{$m$ is a method}
                \IF{$m \notin RM$}
                    \STATE add $m$ to $RM$
                    \FOR{\textbf{each} call site $cs$ \textbf{in} $m$}
                        \STATE $T :=$ \CALL{Resolve}{$cs$} \COMMENT{Resolve target methods, probably via CHA}
                        \FOR{\textbf{each} target method $m'$ \textbf{in} $T$}
                            \STATE add $cs \to m'$ to $CG$
                            \STATE add $m'$ to $WL$
                        \ENDFOR
                    \ENDFOR
                \ENDIF
            \ENDWHILE
            \RETURN $CG$
        \ENDPROCEDURE
        \end{algorithmic}
        \end{algorithm}