  This work is motivated by the pervasive use of method invocations in
object-oriented (OO) programs, and indeed their prevalence in patches of
OO-program bugs. We propose a generate-and-validate repair technique, called
ELIXIR designed to be able to generate such patches. ELIXIR aggressively uses
method calls, on par with local variables, fields, or constants, to construct
more expressive repair-expressions, that go into synthesizing patches. The
ensuing enlargement of the repair space, on account of the wider use of method
calls, is effectively tackled by using a machine-learnt model to rank concrete
repairs. The machine-learnt model relies on four features derived from the
program context, i.e., the code surrounding the potential repair location, and
the bug report. We implement ELIXIR and evaluate it on two datasets, the
popular Defects4J dataset and a new dataset Bugs.jar created by us, and against
2 baseline versions of our technique, and 5 other techniques representing the
state of the art in program repair. Our evaluation shows that ELIXIR is able to
increase the number of correctly repaired bugs in Defects4J by 85% (from 14 to
26) and by 57% in Bugs.jar (from 14 to 22), while also significantly
out-performing other state-of-the-art repair techniques including ACS,
HD-Repair, NOPOL, PAR, and jGenProg.
