Program: 160448
Project: 160448
Buggy source:
private void writeObject(HashMapVirtualObject object) throws IOException {
  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 (o instanceof Long) {
                  referred++;
                }
 else                 if (o instanceof HashMapWrappedVirtualObject) {
                  wrapped++;
                }
              }
              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 (o == null) {
                  LOGGER.info("String_Node_Str" + object.eClass().getName() + "String_Node_Str"+ object.getOid()+ "String_Node_Str"+ eStructuralFeature.getName());
                }
 else {
                  if (!f) {
                    print("String_Node_Str");
                  }
 else {
                    f=false;
                  }
                  if (o instanceof Long) {
                    long ref=(Long)o;
                    if (wrapped != 0 && referred != 0) {
                      print("String_Node_Str");
                      print("String_Node_Str");
                      print("String_Node_Str" + ref);
                      print("String_Node_Str");
                    }
 else {
                      print("String_Node_Str" + ref);
                    }
                  }
 else                   if (o instanceof HashMapWrappedVirtualObject) {
                    write((HashMapWrappedVirtualObject)o);
                  }
 else {
                    LOGGER.info("String_Node_Str" + o);
                  }
                }
              }
              print("String_Node_Str");
            }
          }
 else {
            print("String_Node_Str");
            if (value instanceof Long) {
              long ref=(Long)value;
              print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str"+ ref);
            }
 else             if (value instanceof HashMapWrappedVirtualObject) {
              print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
              HashMapWrappedVirtualObject hashMapWrappedVirtualObject=(HashMapWrappedVirtualObject)value;
              write(hashMapWrappedVirtualObject);
            }
 else {
            }
          }
        }
      }
 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(HashMapVirtualObject object) throws IOException {
  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 (o instanceof Long) {
                  referred++;
                }
 else                 if (o instanceof HashMapWrappedVirtualObject) {
                  wrapped++;
                }
              }
              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 (o == null) {
                  LOGGER.info("String_Node_Str" + object.eClass().getName() + "String_Node_Str"+ object.getOid()+ "String_Node_Str"+ eStructuralFeature.getName());
                }
 else {
                  if (!f) {
                    print("String_Node_Str");
                  }
 else {
                    f=false;
                  }
                  if (o instanceof Long) {
                    long ref=(Long)o;
                    if (wrapped != 0 && referred != 0) {
                      print("String_Node_Str");
                      print("String_Node_Str");
                      print("String_Node_Str" + ref);
                      print("String_Node_Str");
                    }
 else {
                      print("String_Node_Str" + ref);
                    }
                  }
 else                   if (o instanceof HashMapWrappedVirtualObject) {
                    write((HashMapWrappedVirtualObject)o);
                  }
 else {
                    LOGGER.info("String_Node_Str" + o);
                  }
                }
              }
              print("String_Node_Str");
            }
          }
 else {
            print("String_Node_Str");
            if (value instanceof Long) {
              long ref=(Long)value;
              print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str"+ ref);
            }
 else             if (value instanceof HashMapWrappedVirtualObject) {
              print("String_Node_Str" + eStructuralFeature.getName() + "String_Node_Str");
              HashMapWrappedVirtualObject hashMapWrappedVirtualObject=(HashMapWrappedVirtualObject)value;
              write(hashMapWrappedVirtualObject);
            }
 else {
            }
          }
        }
      }
 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");
}