  Previous work has shown that early resolution of issues detected by static
code analyzers can prevent major costs later on. However, developers often
ignore such issues for two main reasons. First, many issues should be
interpreted to determine if they correspond to actual flaws in the program.
Second, static analyzers often do not present the issues in a way that is
actionable. To address these problems, we present Sorald: a novel system that
devise metaprogramming templates to transform the abstract syntax trees of
programs and suggest fixes for static analysis warnings. Thus, the burden on
the developer is reduced from interpreting and fixing static issues, to
inspecting and approving full fledged solutions. Sorald fixes violations of 10
rules from SonarJava, one of the most widely used static analyzers for Java. We
evaluate Sorald on a dataset of 161 popular repositories on Github. Our
analysis shows the effectiveness of Sorald as it fixes 65% (852/1,307) of the
violations that meets the repair preconditions. Overall, our experiments show
it is possible to automatically fix notable violations of the static analysis
rules produced by the state-of-the-art static analyzer SonarJava.
