Ejemplo n.º 1
0
  /**
   * Returns the function documentation from a given {@link IPHPDocBlock}.
   *
   * @param block - The block to convert to a {@link FunctionDocumentation}.
   * @return FunctionDocumentation or null.
   */
  public static FunctionDocumentation getFunctionDocumentation(IPHPDoc block) {
    if (block == null) {
      return null;
    }
    FunctionDocumentation result = new FunctionDocumentation();

    StringBuilder docBuilder = new StringBuilder();
    docBuilder.append(block.getShortDescription());
    String longDescription = block.getLongDescription();
    if (!StringUtil.isEmpty(longDescription)) {
      docBuilder.append('\n');
      docBuilder.append(longDescription);
    }

    result.setDescription(docBuilder.toString());

    IPHPDocTag[] tags = block.getTags();
    if (tags != null) {
      for (IPHPDocTag tag : tags) {
        switch (tag.getTagKind()) {
          case PHPDocTag.VAR:
            {
              String value = tag.getValue();
              if (value == null) {
                continue;
              }
              TypedDescription typeDescr = new TypedDescription();
              typeDescr.addType(value);
              result.addVar(typeDescr);
              break;
            }
          case PHPDocTag.PARAM:
            String value = tag.getValue();
            if (value == null) {
              continue;
            }
            String[] parsedValue = parseParamTagValue(value);
            TypedDescription typeDescr = new TypedDescription();
            typeDescr.setName(parsedValue[0]);
            if (parsedValue[1] != null) {
              typeDescr.addType(parsedValue[1]);
            }
            if (parsedValue[2] != null) {
              typeDescr.setDescription(parsedValue[2]);
            }
            result.addParam(typeDescr);
            break;
          case PHPDocTag.RETURN:
            String returnTagValue = tag.getValue().trim();
            if (returnTagValue == null) {
              continue;
            }
            String[] returnTypes = returnTagValue.split("\\|"); // $NON-NLS-1$
            for (String returnType : returnTypes) {
              returnTagValue = clean(returnType.trim());
              returnTagValue = firstWord(returnTagValue);
              result.getReturn().addType(returnTagValue);
            }
            break;
        }
      }
    }

    return result;
  }