Baseline commit
void process(data) { log(data.id); save(data); return data.result; }
Modified user
void process(input) { log(input.id); save(input); return input.result; }
Patched ACR
void process(data) { if (data == null) throw new Error(); log(data.id); save(data); return data.result; }
Git would flag the entire method as a conflict: every line differs because of the parameter rename. The null-check insertion is lost in the noise.
GumTree AST three-way merge
Merged result
void process(input) { rename from user if (input == null) null-check from ACR throw new Error(); log(input.id); save(input); return input.result; }
Renamed (user)
Inserted (ACR)
ACR's null-check adapts to the renamed parameter