  Behavioural models are a valuable tool for software verification, testing,
monitoring, publishing etc. However, they are rarely provided by the software
developers and have to be extracted either from the source or from the compiled
code. In the context of Java programs, a number of approaches exist for
building behavioural models. Most of these approaches rely on the analysis of
the compiled bytecode. Instead, we are looking to extract behavioural models in
the form of Finite State Machines (FSMs) from the Java source code to ensure
that the obtained FSMs can be easily understood by the software developers and,
if necessary, updated or integrated into the original source code, e.g. in the
form of annotations. Modern software systems are huge, rely on external
libraries and interact with their environment. Hence, extracting useful
behavioural models requires abstraction. In this paper, we present an initial
approach to this problem by focusing on the extraction of FSMs modelling
library APIs. We focus on the analysis of Java code involving the use of
collections. To this end, we encode the operational semantics of collection
operations using patterns of Boolean predicates. These patterns are
instantiated based on the analysis of the source code of API implementation
methods to form an encoding of the possible FSM transitions. A SAT solver is
then used to determine the enabledness conditions (guards) of these
transitions.
