Program: 101977
Project: 101977
Buggy source:
/** 
 * Create EMF ProcedureParameter from the supplied RelationalReference
 * @param ref the parameter object
 * @param procedure the parent procedure
 * @param modelResource the  model resource
 * @return the ProcedureParameter EObject
 */
public EObject createParameter(RelationalReference ref,Procedure procedure,ModelResource modelResource){
  CoreArgCheck.isInstanceOf(RelationalParameter.class,ref);
  RelationalParameter parameterRef=(RelationalParameter)ref;
  ProcedureParameter parameter=FACTORY.createProcedureParameter();
  parameter.setProcedure(procedure);
  parameter.setName(parameterRef.getName());
  parameter.setNameInSource(parameterRef.getNameInSource());
  parameter.setDefaultValue(parameterRef.getDefaultValue());
  parameter.setDirection(getDirectionKind(parameterRef.getDirection()));
  parameter.setNativeType(parameterRef.getNativeType());
  parameter.setNullable(getNullableType(parameterRef.getNullable()));
  parameter.setPrecision(parameterRef.getPrecision());
  parameter.setRadix(parameterRef.getRadix());
  parameter.setScale(parameterRef.getScale());
  String dType=parameterRef.getDatatype();
  if (dType == null || dType.length() == 0) {
    dType=DatatypeProcessor.DEFAULT_DATATYPE;
  }
  EObject datatype=this.datatypeProcessor.findDatatype(dType);
  if (datatype != null) {
    parameter.setType(datatype);
    String dTypeName=this.modelEditor.getName(datatype);
    int datatypeLength=parameterRef.getLength();
    if (datatypeLength == 0 && DatatypeProcessor.DEFAULT_DATATYPE.equalsIgnoreCase(dTypeName)) {
      parameter.setLength(DatatypeProcessor.DEFAULT_DATATYPE_LENGTH);
    }
 else {
      parameter.setLength(datatypeLength);
    }
  }
  updateDeferredList(parameterRef,parameter);
  return parameter;
}

Fixed version (ground truth):
/** 
 * Create EMF ProcedureParameter from the supplied RelationalReference
 * @param ref the parameter object
 * @param procedure the parent procedure
 * @param modelResource the  model resource
 * @return the ProcedureParameter EObject
 */
public EObject createParameter(RelationalReference ref,Procedure procedure,ModelResource modelResource){
  CoreArgCheck.isInstanceOf(RelationalParameter.class,ref);
  RelationalParameter parameterRef=(RelationalParameter)ref;
  ProcedureParameter parameter=FACTORY.createProcedureParameter();
  parameter.setProcedure(procedure);
  parameter.setName(parameterRef.getName());
  parameter.setNameInSource(parameterRef.getNameInSource());
  parameter.setDefaultValue(parameterRef.getDefaultValue());
  parameter.setDirection(getDirectionKind(parameterRef.getDirection()));
  parameter.setNativeType(parameterRef.getNativeType());
  parameter.setNullable(getNullableType(parameterRef.getNullable()));
  parameter.setPrecision(parameterRef.getPrecision());
  parameter.setRadix(parameterRef.getRadix());
  parameter.setScale(parameterRef.getScale());
  String dType=parameterRef.getDatatype();
  if (dType == null || dType.length() == 0) {
    dType=DatatypeProcessor.DEFAULT_DATATYPE;
  }
  EObject datatype=this.datatypeProcessor.findDatatype(dType);
  if (datatype != null) {
    parameter.setType(datatype);
    String dTypeName=this.getModelEditor().getName(datatype);
    int datatypeLength=parameterRef.getLength();
    if (datatypeLength == 0 && DatatypeProcessor.DEFAULT_DATATYPE.equalsIgnoreCase(dTypeName)) {
      parameter.setLength(DatatypeProcessor.DEFAULT_DATATYPE_LENGTH);
    }
 else {
      parameter.setLength(datatypeLength);
    }
  }
  updateDeferredList(parameterRef,parameter);
  return parameter;
}