package io.vertx.codegen.doc;

import io.vertx.codegen.Helper;
import io.vertx.codegen.type.TypeInfo;

import javax.lang.model.element.Element;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

A doc tag.
Author:Julien Viet
/** * A doc tag. * * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */
public class Tag { final String name; final String value; public Tag(String name, String value) { this.name = name; this.value = value; }
Returns:the tag name
/** * @return the tag name */
public String getName() { return name; }
Returns:the tag value
/** * @return the tag value */
public String getValue() { return value; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o instanceof Tag) { Tag that = (Tag) o; return name.equals(that.name) && value.equals(that.value); } return false; } @Override public String toString() { return "@" + name + " " + value; } public static class Param extends Tag { private static final Pattern PARAM_PATTERN = Pattern.compile("^\\s*(\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*)(?:\\s((?:\\n|.)*))?"); final String paramName; final String paramDescription; public Param(Tag other) { this(other.name, other.value); } public Param(String name, String value) { super(name, value); // Matcher matcher = PARAM_PATTERN.matcher(value); if (matcher.matches()) { paramName = matcher.group(1); String desc = matcher.group(2); if (desc != null) { desc = Helper.normalizeWhitespaces(desc); } paramDescription = desc != null && !desc.trim().isEmpty() ? desc.trim() : null; } else { paramName = null; paramDescription = null; } } public String getParamName() { return paramName; } public String getParamDescription() { return paramDescription; } }
A link tag providing information of element target of the link.
/** * A link tag providing information of element target of the link. */
public static class Link extends Tag { final Element targetElement; final TypeInfo targetType; final String label; public Link(String rawValue, Element targetElement, TypeInfo type, String label) { super("link", rawValue); this.targetElement = targetElement; this.targetType = type; this.label = label; }
Returns:the target element like a type, a method, a constructor or a field
/** * @return the target element like a type, a method, a constructor or a field */
public Element getTargetElement() { return targetElement; }
Returns:the target element owner type, either the type if the target element is a type, otherwise the type declaring the element as its member
/** * @return the target element owner type, either the type if the target element is a type, otherwise * the type declaring the element as its member */
public TypeInfo getTargetType() { return targetType; }
Returns:the target label, it may be an empty string
/** * @return the target label, it may be an empty string */
public String getLabel() { return label; } } }