Program: 75994
Project: 75994
Buggy source:
/** 
 * Return a description of the object.  The level of detail depends on the argument, which is an or-ing of the static final constants defined in this class (NamedObj).  Lines are indented according to to the level argument using the protected method _getIndentPrefix(). Zero, one or two brackets can be specified to surround the returned description.  If one is specified it is the the leading bracket. This is used by derived classes that will append to the description. Those derived classes are responsible for the closing bracket. An argument other than 0, 1, or 2 is taken to be equivalent to 0. This method is read-synchronized on the workspace.
 * @param detail The level of detail.
 * @param indent The amount of indenting.
 * @param bracket The number of surrounding brackets (0, 1, or 2).
 * @return A description of the object.
 */
protected String _description(int detail,int indent,int bracket){
  try {
    _workspace.getReadAccess();
    String result=_getIndentPrefix(indent);
    if (bracket == 1 || bracket == 2)     result+="String_Node_Str";
    if ((detail & CLASSNAME) != 0) {
      result+=getClass().getName();
      if ((detail & FULLNAME) != 0) {
        result+="String_Node_Str";
      }
    }
    if ((detail & FULLNAME) != 0) {
      result+="String_Node_Str" + getFullName() + "String_Node_Str";
    }
    if ((detail & ATTRIBUTES) != 0) {
      if ((detail & (CLASSNAME | FULLNAME)) != 0) {
        result+="String_Node_Str";
      }
      result+="String_Node_Str";
      if ((detail & DEEP) == 0) {
        detail&=~ATTRIBUTES;
      }
      Iterator params=attributeList().iterator();
      while (params.hasNext()) {
        Attribute p=(Attribute)params.next();
        result+=p._description(detail,indent + 1,2) + "String_Node_Str";
      }
      result+=_getIndentPrefix(indent) + "String_Node_Str";
    }
    if (bracket == 2)     result+="String_Node_Str";
    return result;
  }
  finally {
    _workspace.doneReading();
  }
}

Fixed version (ground truth):
/** 
 * Return a description of the object.  The level of detail depends on the argument, which is an or-ing of the static final constants defined in this class (NamedObj).  Lines are indented according to to the level argument using the protected method _getIndentPrefix(). Zero, one or two brackets can be specified to surround the returned description.  If one is specified it is the the leading bracket. This is used by derived classes that will append to the description. Those derived classes are responsible for the closing bracket. An argument other than 0, 1, or 2 is taken to be equivalent to 0. This method is read-synchronized on the workspace.
 * @param detail The level of detail.
 * @param indent The amount of indenting.
 * @param bracket The number of surrounding brackets (0, 1, or 2).
 * @return A description of the object.
 */
protected String _description(int detail,int indent,int bracket){
  try {
    _workspace.getReadAccess();
    String result=_getIndentPrefix(indent);
    if (bracket == 1 || bracket == 2)     result+="String_Node_Str";
    if ((detail & CLASSNAME) != 0) {
      result+=getClass().getName();
      if ((detail & FULLNAME) != 0) {
        result+="String_Node_Str";
      }
    }
    if ((detail & FULLNAME) != 0) {
      result+="String_Node_Str" + getFullName() + "String_Node_Str";
    }
    if ((detail & ATTRIBUTES) != 0) {
      if ((detail & (CLASSNAME | FULLNAME)) != 0) {
        result+="String_Node_Str";
      }
      result+="String_Node_Str";
      if ((detail & DEEP) == 0) {
        detail&=~ATTRIBUTES;
      }
      Iterator parameters=attributeList().iterator();
      while (parameters.hasNext()) {
        Attribute parameter=(Attribute)parameters.next();
        result+=parameter._description(detail,indent + 1,2) + "String_Node_Str";
      }
      result+=_getIndentPrefix(indent) + "String_Node_Str";
    }
    if (bracket == 2)     result+="String_Node_Str";
    return result;
  }
  finally {
    _workspace.doneReading();
  }
}