Program: 160447
Project: 160447
Buggy source:
private void writeObject(IdEObject object) throws IOException {
  if (((IdEObjectImpl)object).getLoadingState() != State.LOADED) {
    print("String_Node_Str");
    print("String_Node_Str" + object.getOid() + "String_Node_Str");
    print("String_Node_Str" + object.eClass().getName() + "String_Node_Str");
    print("String_Node_Str");
    print("String_Node_Str");
  }
 else {
    print("String_Node_Str");
    print("String_Node_Str" + object.getOid() + "String_Node_Str");
    print("String_Node_Str" + object.eClass().getName() + "String_Node_Str");
    print("String_Node_Str");
    for (    EStructuralFeature eStructuralFeature : object.eClass().getEAllStructuralFeatures()) {
      if (eStructuralFeature.getEAnnotation("String_Node_Str") == null && (eStructuralFeature.getEAnnotation("String_Node_Str") == null | includeHidden)) {
        if (eStructuralFeature instanceof EReference) {
          Object value=object.eGet(eStructuralFeature);
          if (value != null) {
            if (eStructuralFeature.isMany()) {
              List<?> list=(List<?>)value;
              if (SERIALIZE_EMPTY_LISTS || !list.isEmpty()) {
                print("String_Node_Str");
                int wrapped=0;
                int referred=0;
                for (                Object o : list) {
                  if (((IdEObject)o).eClass().getEAnnotation("String_Node_Str") != null) {
                    wrapped++;
                  }
 else {
                    referred++;
                  }
                }
                if (wrapped == 0 && referred != 0) {
                  print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                }
 else                 if (wrapped != 0 && referred == 0) {
                  print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                }
 else                 if (wrapped == 0 && referred == 0) {
                }
 else {
                  print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                }
                boolean f=true;
                for (                Object o : list) {
                  if (!f) {
                    print("String_Node_Str");
                  }
 else {
                    f=false;
                  }
                  IdEObject ref=(IdEObject)o;
                  EClass eClass=((IdEObject)o).eClass();
                  if (ref.getOid() < 0 || eClass.getEAnnotation("String_Node_Str") != null || eStructuralFeature.getEAnnotation("String_Node_Str") != null) {
                    write(ref);
                  }
 else {
                    if (wrapped != 0 && referred != 0) {
                      print("String_Node_Str");
                      print("String_Node_Str");
                      print("String_Node_Str" + ref.getOid());
                      print("String_Node_Str");
                    }
 else {
                      print("String_Node_Str" + ref.getOid());
                    }
                  }
                }
                print("String_Node_Str");
              }
            }
 else {
              print("String_Node_Str");
              IdEObject ref=(IdEObject)value;
              if (ref instanceof IfcGloballyUniqueId) {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                writePrimitive(eStructuralFeature,((IfcGloballyUniqueId)ref).getWrappedValue());
              }
 else               if (((IdEObject)ref).eClass().getEAnnotation("String_Node_Str") != null) {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                write(ref);
              }
 else               if (eStructuralFeature.getEAnnotation("String_Node_Str") != null) {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                writeEmbedded(ref);
              }
 else {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str"+ ref.getOid());
              }
            }
          }
        }
 else {
          Object value=object.eGet(eStructuralFeature);
          if (value != null) {
            if (eStructuralFeature.isMany()) {
              List<?> list=(List<?>)value;
              if (SERIALIZE_EMPTY_LISTS || !list.isEmpty()) {
                print("String_Node_Str");
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                boolean f=true;
                for (                Object o : list) {
                  if (!f) {
                    print("String_Node_Str");
                  }
 else {
                    f=false;
                  }
                  writePrimitive(eStructuralFeature,o);
                }
                print("String_Node_Str");
              }
            }
 else {
              print("String_Node_Str");
              print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
              writePrimitive(eStructuralFeature,value);
            }
          }
        }
      }
    }
    print("String_Node_Str");
  }
}

Fixed version (ground truth):
private void writeObject(IdEObject object) throws IOException {
  if (((IdEObjectImpl)object).getLoadingState() != State.LOADED) {
    print("String_Node_Str");
    print("String_Node_Str" + object.getOid() + "String_Node_Str");
    print("String_Node_Str" + object.eClass().getName() + "String_Node_Str");
    print("String_Node_Str");
    print("String_Node_Str");
  }
 else {
    print("String_Node_Str");
    print("String_Node_Str" + object.getOid() + "String_Node_Str");
    print("String_Node_Str" + object.eClass().getName() + "String_Node_Str");
    print("String_Node_Str");
    for (    EStructuralFeature eStructuralFeature : object.eClass().getEAllStructuralFeatures()) {
      if (eStructuralFeature.getEAnnotation("String_Node_Str") == null && (eStructuralFeature.getEAnnotation("String_Node_Str") == null || includeHidden)) {
        if (eStructuralFeature instanceof EReference) {
          Object value=object.eGet(eStructuralFeature);
          if (value != null) {
            if (eStructuralFeature.isMany()) {
              List<?> list=(List<?>)value;
              if (SERIALIZE_EMPTY_LISTS || !list.isEmpty()) {
                print("String_Node_Str");
                int wrapped=0;
                int referred=0;
                for (                Object o : list) {
                  if (((IdEObject)o).eClass().getEAnnotation("String_Node_Str") != null) {
                    wrapped++;
                  }
 else {
                    referred++;
                  }
                }
                if (wrapped == 0 && referred != 0) {
                  print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                }
 else                 if (wrapped != 0 && referred == 0) {
                  print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                }
 else                 if (wrapped == 0 && referred == 0) {
                }
 else {
                  print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                }
                boolean f=true;
                for (                Object o : list) {
                  if (!f) {
                    print("String_Node_Str");
                  }
 else {
                    f=false;
                  }
                  IdEObject ref=(IdEObject)o;
                  EClass eClass=((IdEObject)o).eClass();
                  if (ref.getOid() < 0 || eClass.getEAnnotation("String_Node_Str") != null || eStructuralFeature.getEAnnotation("String_Node_Str") != null) {
                    write(ref);
                  }
 else {
                    if (wrapped != 0 && referred != 0) {
                      print("String_Node_Str");
                      print("String_Node_Str");
                      print("String_Node_Str" + ref.getOid());
                      print("String_Node_Str");
                    }
 else {
                      print("String_Node_Str" + ref.getOid());
                    }
                  }
                }
                print("String_Node_Str");
              }
            }
 else {
              print("String_Node_Str");
              IdEObject ref=(IdEObject)value;
              if (ref instanceof IfcGloballyUniqueId) {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                writePrimitive(eStructuralFeature,((IfcGloballyUniqueId)ref).getWrappedValue());
              }
 else               if (((IdEObject)ref).eClass().getEAnnotation("String_Node_Str") != null) {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                write(ref);
              }
 else               if (eStructuralFeature.getEAnnotation("String_Node_Str") != null) {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                writeEmbedded(ref);
              }
 else {
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str"+ ref.getOid());
              }
            }
          }
        }
 else {
          Object value=object.eGet(eStructuralFeature);
          if (value != null) {
            if (eStructuralFeature.isMany()) {
              List<?> list=(List<?>)value;
              if (SERIALIZE_EMPTY_LISTS || !list.isEmpty()) {
                print("String_Node_Str");
                print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
                boolean f=true;
                for (                Object o : list) {
                  if (!f) {
                    print("String_Node_Str");
                  }
 else {
                    f=false;
                  }
                  writePrimitive(eStructuralFeature,o);
                }
                print("String_Node_Str");
              }
            }
 else {
              print("String_Node_Str");
              print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
              writePrimitive(eStructuralFeature,value);
            }
          }
        }
      }
    }
    print("String_Node_Str");
  }
}