docs: public String prepare() throws XDocletException
      {
          String             checkLevel = (String)getDocletContext().getConfigParam(CONFIG_PARAM_CHECKS);
          ArrayList          queue      = new ArrayList();
          ClassDescriptorDef classDef, baseDef;
          XClass             original;
          boolean            isFinished;
  
          // determine inheritance relationships
          for (Iterator it = _model.getClasses(); it.hasNext();)
          {
              classDef   = (ClassDescriptorDef)it.next();
              original   = classDef.getOriginalClass();
              isFinished = false;
              queue.clear();
              while (!isFinished)
              {
                  if (original == null)
                  {
                      isFinished = true;
                      for (Iterator baseIt = queue.iterator(); baseIt.hasNext();)
                      {
                          original = (XClass)baseIt.next();
                          baseDef  = _model.getClass(original.getQualifiedName());
                          baseIt.remove();
                          if (baseDef != null)
                          {
                              classDef.addDirectBaseType(baseDef);
                          }
                          else
                          {
                              isFinished = false;
                              break;
                          }
                      }
                  }
                  if (!isFinished)
                  {    
                      if (original.getInterfaces() != null)
                      {
                          for (Iterator baseIt = original.getInterfaces().iterator(); baseIt.hasNext();)
                          {
                              queue.add(baseIt.next());
                          }
                      }
                      if (original.getSuperclass() != null)
                      {
                          queue.add(original.getSuperclass());
                      }
                      original = null;
                  }
              }
          }
          try
          {
              _model.process();
              _model.checkConstraints(checkLevel);
          }
          catch (ConstraintException ex)
          {
              throw new XDocletException(ex.getMessage());
          }
          return "";
      }