\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}