public void visit(ProcedureMethod method) {
   TypeClass[] paramTypes = method.getParamTypes();
   int len = paramTypes.length;
   listener.beginMethod(method.getName(), len);
   SqlType returnType = (SqlType) method.getReturnType();
   if (returnType != null) {
     listener.handleMethodReturn(returnType.getName());
     returnType.accept(this);
   }
   String[] paramNames = method.getParamNames();
   int[] paramModes = method.getParamModes();
   for (int idx = 0; idx < len; idx++) {
     SqlType argType = (SqlType) paramTypes[idx];
     int mode = paramModes[idx];
     String modeStr = "IN";
     if (mode == ProcedureMethod.OUT) {
       modeStr = "OUT";
     } else if (mode == ProcedureMethod.INOUT) {
       modeStr = "INOUT";
     }
     listener.beginMethodArg(paramNames[idx], modeStr, idx);
     argType.accept(this);
     listener.endMethodArg(paramNames[idx]);
   }
   listener.endMethod(method.getName());
 }
 public void visit(SqlObjectType sqlObjectType) {
   String targetTypeName = null;
   if (sqlObjectType.hasConversion()) {
     targetTypeName = sqlObjectType.getTargetTypeName();
   }
   int numAttributes = 0;
   List<AttributeField> fields = null;
   try {
     fields = sqlObjectType.getDeclaredFields(false);
     numAttributes = fields.size();
   } catch (Exception e) {
   }
   listener.beginObjectType(sqlObjectType.getName());
   listener.handleObjectType(sqlObjectType.getName(), targetTypeName, numAttributes);
   if (fields != null && numAttributes > 0) {
     for (int idx = 0; idx < numAttributes; idx++) {
       AttributeField field = fields.get(idx);
       TypeClass typeClass = field.getType();
       listener.handleAttributeField(field.getName(), idx);
       ((SqlType) typeClass).accept(this);
     }
   }
   try {
     listener.endObjectType(sqlObjectType.getName());
   } catch (Exception e) {
     /* ignore */
   }
 }
 public void visit(SqlTableType sqlTableType) {
   String targetTypeName = null;
   if (sqlTableType.hasConversion()) {
     targetTypeName = sqlTableType.getTargetTypeName();
   }
   listener.handleSqlTableType(sqlTableType.getName(), targetTypeName);
   try {
     TypeClass componentType = sqlTableType.getComponentType();
     ((SqlType) componentType).accept(this);
   } catch (Exception e) {
     // e.printStackTrace();
   }
 }