Program: 160598
Project: 160598
Buggy source:
private void writeList(PrintWriter out,EObject object,EStructuralFeature feature) throws SerializerException {
  List<?> list=(List<?>)object.eGet(feature);
  List<?> doubleStingList=null;
  if (feature.getEType() == EcorePackage.eINSTANCE.getEDouble() && model.isUseDoubleStrings()) {
    EStructuralFeature doubleStringFeature=feature.getEContainingClass().getEStructuralFeature(feature.getName() + "String_Node_Str");
    if (doubleStringFeature == null) {
      throw new SerializerException("String_Node_Str" + feature.getName() + "String_Node_Str"+ "String_Node_Str");
    }
    doubleStingList=(List<?>)object.eGet(doubleStringFeature);
  }
  if (list.isEmpty()) {
    if (!feature.isUnsettable()) {
      out.print(OPEN_CLOSE_PAREN);
    }
 else {
      out.print("String_Node_Str");
    }
  }
 else {
    out.print(OPEN_PAREN);
    boolean first=true;
    int index=0;
    for (    Object listObject : list) {
      if (!first) {
        out.print(COMMA);
      }
      if ((listObject instanceof IdEObject) && model.contains((IdEObject)listObject)) {
        IdEObject eObject=(IdEObject)listObject;
        out.print(DASH);
        out.print(String.valueOf(getExpressId(eObject)));
      }
 else {
        if (listObject == null) {
          out.print(DOLLAR);
        }
 else {
          if (listObject instanceof IdEObject && feature.getEType().getEAnnotation("String_Node_Str") != null) {
            IdEObject eObject=(IdEObject)listObject;
            Object realVal=eObject.eGet(eObject.eClass().getEStructuralFeature("String_Node_Str"));
            if (realVal instanceof Double) {
              Object stringVal=eObject.eGet(eObject.eClass().getEStructuralFeature("String_Node_Str"));
              if (stringVal != null && model.isUseDoubleStrings()) {
                out.print(stringVal);
              }
 else {
                out.print(realVal);
              }
            }
 else {
              writePrimitive(out,realVal);
            }
          }
 else           if (listObject instanceof EObject) {
            IdEObject eObject=(IdEObject)listObject;
            EClass class1=eObject.eClass();
            EStructuralFeature structuralFeature=class1.getEStructuralFeature(WRAPPED_VALUE);
            if (structuralFeature != null) {
              Object realVal=eObject.eGet(structuralFeature);
              out.print(upperCases.get(class1));
              out.print(OPEN_PAREN);
              if (realVal instanceof Double) {
                Object stringVal=eObject.eGet(class1.getEStructuralFeature(structuralFeature.getName() + "String_Node_Str"));
                if (stringVal != null && model.isUseDoubleStrings()) {
                  out.print(stringVal);
                }
 else {
                  out.print(realVal);
                }
              }
 else {
                writePrimitive(out,realVal);
              }
              out.print(CLOSE_PAREN);
            }
          }
 else {
            if (doubleStingList != null) {
              if (index < doubleStingList.size()) {
                String val=(String)doubleStingList.get(index);
                if (val == null) {
                  writePrimitive(out,listObject);
                }
 else {
                  out.write(val);
                }
              }
 else {
                writePrimitive(out,listObject);
              }
            }
 else {
              writePrimitive(out,listObject);
            }
          }
        }
      }
      first=false;
      index++;
    }
    out.print(CLOSE_PAREN);
  }
}

Fixed version (ground truth):
private void writeList(PrintWriter out,EObject object,EStructuralFeature feature) throws SerializerException {
  if (object instanceof IfcRoot) {
    if (((IfcRoot)object).getGlobalId().equals("String_Node_Str")) {
      System.out.println();
    }
  }
  List<?> list=(List<?>)object.eGet(feature);
  List<?> doubleStingList=null;
  if (feature.getEType() == EcorePackage.eINSTANCE.getEDouble() && model.isUseDoubleStrings()) {
    EStructuralFeature doubleStringFeature=feature.getEContainingClass().getEStructuralFeature(feature.getName() + "String_Node_Str");
    if (doubleStringFeature == null) {
      throw new SerializerException("String_Node_Str" + feature.getName() + "String_Node_Str"+ "String_Node_Str");
    }
    doubleStingList=(List<?>)object.eGet(doubleStringFeature);
  }
  if (list.isEmpty()) {
    if (!feature.isUnsettable()) {
      out.print(OPEN_CLOSE_PAREN);
    }
 else {
      out.print("String_Node_Str");
    }
  }
 else {
    out.print(OPEN_PAREN);
    boolean first=true;
    int index=0;
    for (    Object listObject : list) {
      if (!first) {
        out.print(COMMA);
      }
      if ((listObject instanceof IdEObject) && model.contains((IdEObject)listObject)) {
        IdEObject eObject=(IdEObject)listObject;
        out.print(DASH);
        out.print(String.valueOf(getExpressId(eObject)));
      }
 else {
        if (listObject == null) {
          out.print(DOLLAR);
        }
 else {
          if (listObject instanceof IdEObject && feature.getEType().getEAnnotation("String_Node_Str") != null) {
            IdEObject eObject=(IdEObject)listObject;
            Object realVal=eObject.eGet(eObject.eClass().getEStructuralFeature("String_Node_Str"));
            if (realVal instanceof Double) {
              Object stringVal=eObject.eGet(eObject.eClass().getEStructuralFeature("String_Node_Str"));
              if (stringVal != null && model.isUseDoubleStrings()) {
                out.print(stringVal);
              }
 else {
                out.print(realVal);
              }
            }
 else {
              writePrimitive(out,realVal);
            }
          }
 else           if (listObject instanceof EObject) {
            IdEObject eObject=(IdEObject)listObject;
            EClass class1=eObject.eClass();
            EStructuralFeature structuralFeature=class1.getEStructuralFeature(WRAPPED_VALUE);
            if (structuralFeature != null) {
              Object realVal=eObject.eGet(structuralFeature);
              out.print(upperCases.get(class1));
              out.print(OPEN_PAREN);
              if (realVal instanceof Double) {
                Object stringVal=eObject.eGet(class1.getEStructuralFeature(structuralFeature.getName() + "String_Node_Str"));
                if (stringVal != null && model.isUseDoubleStrings()) {
                  out.print(stringVal);
                }
 else {
                  out.print(realVal);
                }
              }
 else {
                writePrimitive(out,realVal);
              }
              out.print(CLOSE_PAREN);
            }
 else {
              LOGGER.info("String_Node_Str" + object + "String_Node_Str"+ feature.getName()+ "String_Node_Str"+ eObject);
            }
          }
 else {
            if (doubleStingList != null) {
              if (index < doubleStingList.size()) {
                String val=(String)doubleStingList.get(index);
                if (val == null) {
                  writePrimitive(out,listObject);
                }
 else {
                  out.write(val);
                }
              }
 else {
                writePrimitive(out,listObject);
              }
            }
 else {
              writePrimitive(out,listObject);
            }
          }
        }
      }
      first=false;
      index++;
    }
    out.print(CLOSE_PAREN);
  }
}