Program: 93555
Project: 93555
Buggy source:
/** 
 * See   {@link #setUp007()} for the description of this use case, except that we reverse the changes madeto file1 and file2 so that the "leaf" of the logical model is found before its root in the tree, making sure that this case will not fail to merge properly.
 * @see #setUp007()
 * @throws Exception
 */
private void setUp007_reverse() throws Exception {
  final EPackage root1=createPackage(null,"String_Node_Str");
  EClass class1=createClass(root1,"String_Node_Str");
  createClass(root1,"String_Node_Str");
  resource1.getContents().add(root1);
  final EPackage root2=createPackage(null,"String_Node_Str");
  createClass(root2,"String_Node_Str");
  createClass(root2,"String_Node_Str");
  resource2.getContents().add(root2);
  save(resource1,resource2);
  repository.addAllAndCommit("String_Node_Str");
  repository.createBranch(MASTER,BRANCH);
  root1.getEClassifiers().remove(class1);
  save(resource1);
  repository.addAndCommit(project,"String_Node_Str",file1);
  repository.checkoutBranch(BRANCH);
  reload(resource1,resource2);
  final EClass class3=(EClass)findObject(resource2,"String_Node_Str");
  class1=(EClass)findObject(resource1,"String_Node_Str");
  class3.getESuperTypes().add(class1);
  save(resource2);
  repository.addAndCommit(project,"String_Node_Str",file2);
  repository.checkoutBranch(MASTER);
  final Status status=repository.status();
  assertFalse(status.hasUncommittedChanges());
  compareBothDirectionsAndCheck(iFile1,MASTER,BRANCH,0,1,0);
  compareBothDirectionsAndCheck(iFile2,MASTER,BRANCH,1,1,1);
}

Fixed version (ground truth):
/** 
 * See   {@link #setUp007()} for the description of this use case, except that we reverse the changes madeto file1 and file2 so that the "leaf" of the logical model is found before its root in the tree, making sure that this case will not fail to merge properly.
 * @see #setUp007()
 * @throws Exception
 */
private void setUp007_reverse() throws Exception {
  final EPackage root1=createPackage(null,"String_Node_Str");
  EClass class1=createClass(root1,"String_Node_Str");
  createClass(root1,"String_Node_Str");
  resource1.getContents().add(root1);
  final EPackage root2=createPackage(null,"String_Node_Str");
  createClass(root2,"String_Node_Str");
  createClass(root2,"String_Node_Str");
  resource2.getContents().add(root2);
  save(resource1,resource2);
  repository.addAllAndCommit("String_Node_Str");
  repository.createBranch(MASTER,BRANCH);
  root1.getEClassifiers().remove(class1);
  save(resource1);
  repository.addAndCommit(project,"String_Node_Str",file1);
  repository.checkoutBranch(BRANCH);
  reload(resource1,resource2);
  final EClass class3=(EClass)findObject(resource2,"String_Node_Str");
  class1=(EClass)findObject(resource1,"String_Node_Str");
  class3.getESuperTypes().add(class1);
  save(resource2);
  repository.addAndCommit(project,"String_Node_Str",file2);
  repository.checkoutBranch(MASTER);
  final Status status=repository.status();
  assertFalse(status.hasUncommittedChanges());
  compareADirectionAndCheck(iFile1,MASTER,BRANCH,0,1,0);
  compareADirectionAndCheck(iFile1,BRANCH,MASTER,1,1,1);
  compareBothDirectionsAndCheck(iFile2,MASTER,BRANCH,1,1,1);
}