Program: 160641
Project: 160641
Buggy source:
@SuppressWarnings({"String_Node_Str","String_Node_Str"}) public static void fillDataObject(BiMap<? extends Long,? extends EObject> mapResult,EObject eObject,DataObject dataObject){
  for (  EStructuralFeature eStructuralFeature : eObject.eClass().getEAllStructuralFeatures()) {
    Object eGet=eObject.eGet(eStructuralFeature);
    if (eStructuralFeature instanceof EAttribute) {
      if (!eStructuralFeature.getName().endsWith("String_Node_Str")) {
        if (eStructuralFeature.isMany()) {
          ListDataValue listDataValue=StoreFactory.eINSTANCE.createListDataValue();
          listDataValue.setFieldName(eStructuralFeature.getName());
          dataObject.getValues().add(listDataValue);
          if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDoubleObject() || eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble()) {
            EStructuralFeature asStringFeature=eObject.eClass().getEStructuralFeature(eStructuralFeature.getName() + "String_Node_Str");
            List list=(List)eObject.eGet(asStringFeature);
            for (            Object o : list) {
              SimpleDataValue dataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
              dataValue.setStringValue(o.toString());
              listDataValue.getValues().add(dataValue);
            }
          }
 else {
            List list=(List)eGet;
            for (            Object o : list) {
              SimpleDataValue dataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
              if (eGet != null) {
                dataValue.setStringValue(o.toString());
              }
 else {
                dataValue.setStringValue(null);
              }
              listDataValue.getValues().add(dataValue);
            }
          }
        }
 else {
          SimpleDataValue dataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
          if (eGet != null) {
            dataValue.setStringValue(eGet.toString());
          }
 else {
            dataValue.setStringValue(null);
          }
          dataValue.setFieldName(eStructuralFeature.getName());
          dataObject.getValues().add(dataValue);
        }
      }
    }
 else     if (eStructuralFeature instanceof EReference) {
      if (eStructuralFeature.isMany()) {
        if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble() || eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDoubleObject()) {
          List list=(List)eObject.eGet(eObject.eClass().getEStructuralFeature(eStructuralFeature.getName() + "String_Node_Str"));
          ListDataValue dataValue=StoreFactory.eINSTANCE.createListDataValue();
          dataValue.setFieldName(eStructuralFeature.getName());
          dataObject.getValues().add(dataValue);
          for (          Object o : list) {
            SimpleDataValue simpleDataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
            simpleDataValue.setStringValue(o.toString());
            dataValue.getValues().add(simpleDataValue);
          }
        }
 else {
          EList<? extends EObject> list=(EList<EObject>)eGet;
          for (          EObject item : list) {
            ListDataValue dataValue=StoreFactory.eINSTANCE.createListDataValue();
            dataValue.setFieldName(eStructuralFeature.getName());
            dataObject.getValues().add(dataValue);
            if (item instanceof WrappedValue || item instanceof IfcGloballyUniqueId) {
              EObject referenceEObject=(EObject)item;
              SimpleDataValue simpleDataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
              simpleDataValue.setStringValue(referenceEObject.eGet(referenceEObject.eClass().getEStructuralFeature("String_Node_Str")).toString());
              dataValue.getValues().add(simpleDataValue);
            }
 else {
              Long oid=mapResult.inverse().get(item);
              String guid=getGuid(item);
              ReferenceDataValue referenceDataValue=StoreFactory.eINSTANCE.createReferenceDataValue();
              referenceDataValue.setTypeName(item.eClass().getName());
              referenceDataValue.setOid(oid);
              referenceDataValue.setGuid(guid);
              dataValue.getValues().add(referenceDataValue);
            }
          }
        }
      }
 else {
        EObject eObject2=(EObject)eGet;
        if (eObject2 != null) {
          if (eObject2 instanceof WrappedValue || eObject2 instanceof IfcGloballyUniqueId) {
            EObject referenceEObject=(EObject)eGet;
            if (referenceEObject instanceof IfcLengthMeasure) {
              System.out.println();
            }
            SimpleDataValue e=StoreFactory.eINSTANCE.createSimpleDataValue();
            EStructuralFeature wrappedValueFeature=referenceEObject.eClass().getEStructuralFeature("String_Node_Str");
            Object eGet2=referenceEObject.eGet(wrappedValueFeature);
            if (eGet2 != null) {
              e.setStringValue(eGet2.toString());
            }
 else {
              e.setStringValue(null);
            }
            e.setFieldName(eStructuralFeature.getName());
            dataObject.getValues().add(e);
          }
 else {
            Long oid=mapResult.inverse().get(eObject2);
            String guid=getGuid(eObject2);
            ReferenceDataValue reference=StoreFactory.eINSTANCE.createReferenceDataValue();
            reference.setTypeName(eObject2.eClass().getName());
            reference.setOid(oid);
            reference.setGuid(guid);
            reference.setFieldName(eStructuralFeature.getName());
            dataObject.getValues().add(reference);
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
@SuppressWarnings({"String_Node_Str","String_Node_Str"}) public static void fillDataObject(BiMap<? extends Long,? extends EObject> mapResult,EObject eObject,DataObject dataObject){
  for (  EStructuralFeature eStructuralFeature : eObject.eClass().getEAllStructuralFeatures()) {
    Object eGet=eObject.eGet(eStructuralFeature);
    if (eStructuralFeature instanceof EAttribute) {
      if (!eStructuralFeature.getName().endsWith("String_Node_Str")) {
        if (eStructuralFeature.isMany()) {
          ListDataValue listDataValue=StoreFactory.eINSTANCE.createListDataValue();
          listDataValue.setFieldName(eStructuralFeature.getName());
          dataObject.getValues().add(listDataValue);
          if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDoubleObject() || eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble()) {
            EStructuralFeature asStringFeature=eObject.eClass().getEStructuralFeature(eStructuralFeature.getName() + "String_Node_Str");
            List list=(List)eObject.eGet(asStringFeature);
            for (            Object o : list) {
              SimpleDataValue dataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
              dataValue.setStringValue(o.toString());
              listDataValue.getValues().add(dataValue);
            }
          }
 else {
            List list=(List)eGet;
            for (            Object o : list) {
              SimpleDataValue dataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
              if (eGet != null) {
                dataValue.setStringValue(o.toString());
              }
 else {
                dataValue.setStringValue(null);
              }
              listDataValue.getValues().add(dataValue);
            }
          }
        }
 else {
          SimpleDataValue dataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
          if (eGet != null) {
            dataValue.setStringValue(eGet.toString());
          }
 else {
            dataValue.setStringValue(null);
          }
          dataValue.setFieldName(eStructuralFeature.getName());
          dataObject.getValues().add(dataValue);
        }
      }
    }
 else     if (eStructuralFeature instanceof EReference) {
      if (eStructuralFeature.isMany()) {
        if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble() || eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDoubleObject()) {
          List list=(List)eObject.eGet(eObject.eClass().getEStructuralFeature(eStructuralFeature.getName() + "String_Node_Str"));
          ListDataValue dataValue=StoreFactory.eINSTANCE.createListDataValue();
          dataValue.setFieldName(eStructuralFeature.getName());
          dataObject.getValues().add(dataValue);
          for (          Object o : list) {
            SimpleDataValue simpleDataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
            simpleDataValue.setStringValue(o.toString());
            dataValue.getValues().add(simpleDataValue);
          }
        }
 else {
          EList<? extends EObject> list=(EList<EObject>)eGet;
          for (          EObject item : list) {
            ListDataValue dataValue=StoreFactory.eINSTANCE.createListDataValue();
            dataValue.setFieldName(eStructuralFeature.getName());
            dataObject.getValues().add(dataValue);
            if (item instanceof WrappedValue || item instanceof IfcGloballyUniqueId) {
              EObject referenceEObject=(EObject)item;
              SimpleDataValue simpleDataValue=StoreFactory.eINSTANCE.createSimpleDataValue();
              simpleDataValue.setStringValue(referenceEObject.eGet(referenceEObject.eClass().getEStructuralFeature("String_Node_Str")).toString());
              dataValue.getValues().add(simpleDataValue);
            }
 else {
              Long oid=mapResult.inverse().get(item);
              String guid=getGuid(item);
              ReferenceDataValue referenceDataValue=StoreFactory.eINSTANCE.createReferenceDataValue();
              referenceDataValue.setTypeName(item.eClass().getName());
              referenceDataValue.setOid(oid);
              referenceDataValue.setGuid(guid);
              dataValue.getValues().add(referenceDataValue);
            }
          }
        }
      }
 else {
        EObject eObject2=(EObject)eGet;
        if (eObject2 != null) {
          if (eObject2 instanceof WrappedValue || eObject2 instanceof IfcGloballyUniqueId) {
            EObject referenceEObject=(EObject)eGet;
            SimpleDataValue e=StoreFactory.eINSTANCE.createSimpleDataValue();
            EStructuralFeature wrappedValueFeature=referenceEObject.eClass().getEStructuralFeature("String_Node_Str");
            Object eGet2=referenceEObject.eGet(wrappedValueFeature);
            if (eGet2 != null) {
              e.setStringValue(eGet2.toString());
            }
 else {
              e.setStringValue(null);
            }
            e.setFieldName(eStructuralFeature.getName());
            dataObject.getValues().add(e);
          }
 else {
            Long oid=mapResult.inverse().get(eObject2);
            String guid=getGuid(eObject2);
            ReferenceDataValue reference=StoreFactory.eINSTANCE.createReferenceDataValue();
            reference.setTypeName(eObject2.eClass().getName());
            reference.setOid(oid);
            reference.setGuid(guid);
            reference.setFieldName(eStructuralFeature.getName());
            dataObject.getValues().add(reference);
          }
        }
      }
    }
  }
}