docs: public void writeClass(String strClassName, ClassProject.CodeType codeType)
      {
          FieldStuff fieldStuff = new FieldStuff();
          ClassInfo recClassInfo = (ClassInfo)this.getMainRecord();
          if (!this.readThisClass(strClassName))  // Get the field this is based on
              return;
          if (RESOURCE_CLASS.equals(recClassInfo.getField(ClassInfo.BASE_CLASS_NAME).toString()))
          {
              this.writeFieldResources(strClassName);
              return;     // Resource only class
          }
  
          this.writeHeading(strClassName, this.getPackage(codeType), CodeType.THICK);        // Write the first few lines of the files
          this.writeIncludes(CodeType.THICK);
      // Now include any BaseField classes not included in this source (method include)
          try   {
              FieldData recFieldData = (FieldData)this.getRecord(FieldData.FIELD_DATA_FILE);
  
              this.writeRecordClassDetail(strClassName);  // Write the Thick Record Class
  
              this.writeFieldResources(strClassName);
  
              this.writeThinRecord(strClassName);
  
              this.writeRecordInterface(strClassName);  // Write the Record Class Interface
  
          // Now write out the BaseField classes
              Record recFileHdr = this.getRecord(FileHdr.FILE_HDR_FILE);
          
              FieldIterator fieldIterator = new FieldIterator(recFileHdr, recClassInfo, recFieldData, true);
              while (fieldIterator.hasNext())
              {
                  recFieldData = (FieldData)fieldIterator.next();
                  ClassInfo recClassInfo2 = null;
                  boolean ignoreThisField = this.ignoreFieldData(recFieldData);
                  this.getFieldData(fieldStuff, false);
                  if ((recFieldData.getField(FieldData.FIELD_TYPE).getString().equalsIgnoreCase(FieldTypeField.VIRTUAL_FIELD)) || (fieldStuff.bNotNullField))
                      ignoreThisField = false;
                  if (ignoreThisField)
                      continue;
                  if ((recClassInfo2 = this.readFieldClass()) != null)
                      if (recClassInfo2.getField(ClassInfo.CLASS_SOURCE_FILE).equals(recClassInfo.getField(ClassInfo.CLASS_SOURCE_FILE)))
                  {   // If they are in the same source file, write the field class also.
                      String strFieldDataHandle = recFieldData.getHandle(DBConstants.OBJECT_ID_HANDLE).toString();
                      Map<String,Object> properties = new Hashtable<String,Object>();
                      properties.put(FieldData.FIELD_DATA_FILE, strFieldDataHandle);
                      if ((recClassInfo2.getEditMode() == DBConstants.EDIT_CURRENT)
                          || (recClassInfo2.getEditMode() == DBConstants.EDIT_IN_PROGRESS))
                      {
                          String strClassInfoHandle = recClassInfo2.getHandle(DBConstants.OBJECT_ID_HANDLE).toString();
                          properties.put(ClassInfo.CLASS_INFO_FILE, strClassInfoHandle);
                      }
                      else
                      {
                          properties.put(recClassInfo2.getField(ClassInfo.CLASS_NAME).getFieldName(), recClassInfo2.getField(ClassInfo.CLASS_NAME).toString());
                          properties.put(recClassInfo2.getField(ClassInfo.BASE_CLASS_NAME).getFieldName(), recClassInfo2.getField(ClassInfo.BASE_CLASS_NAME).toString());
                          properties.put(recClassInfo2.getField(ClassInfo.CLASS_PACKAGE).getFieldName(), this.getPackage(codeType));
                          properties.put(recClassInfo2.getField(ClassInfo.CLASS_PROJECT_ID).getFieldName(), recClassInfo2.getField(ClassInfo.CLASS_PROJECT_ID).toString());
                      }
  
                          WriteFieldClass classWriter = new WriteFieldClass(this.getTask(), null, properties);
                          String strFieldClassName = null;
                          classWriter.writeClass(strFieldClassName, codeType);
                          classWriter.free();
                          classWriter = null;
                  }
              }
              recFieldData.close();
          } catch (DBException ex)   {
              ex.printStackTrace();
          }
      }