Intellij-Javadocs: https://tsergey.github.io/intellij-javadocs/
Intellij-Javadocs Wiki: https://github.com/tsergey/intellij-javadocs/wiki
Javadoc-Templates: https://github.com/TSergey/intellij-javadocs/wiki/Javadoc-templates
Freemarker-Library v2.3.23: http://freemarker.incubator.apache.org/docs/ref_builtins.html
Intellij-Community Psi-Api Source: https://github.com/JetBrains/intellij-community/tree/master/java/java-psi-api
1、 use
intellij-javadocs.jar
replaceC:\Users\user\AppData\Roaming\JetBrains\IntelliJIdea2024.x\plugins\intellij-javadocs\lib\intellij-javadocs-x.x.x.jar
to set all project default config2、 use
intellij-javadocs.xml
replace\projectPath\.idea\intellij-javadocs-x.x.x.xml
to set the project config
set keymap use
ctrl
+alt
+/
replaceshift
+ctrl
+alt
+G
to generate javadocs for all elementsset keymap use
ctrl
+alt
+\
replaceshift
+ctrl
+alt
+Z
to remove javadocs for all elements
- Code
package io.github.nichetoolkit.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
import io.github.nichetoolkit.rest.RestException;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import java.io.Serializable;
@Deprecated
@SuppressWarnings({"UnnecessaryParentheses", "unused"})
public interface InterfaceExample<I,E extends InterfaceExample<I,E>> extends Serializable {
@JsonIgnore
String INTERFACE_FIELD_EXAMPLE = "INTERFACE_FIELD_EXAMPLE";
@JsonValue
@NonNull
String getInterfaceField();
@JsonCreator
void setInterfaceField(@NonNull String interfaceField);
@NonNull
default String[] methodExample(@Nullable Integer param1, @NonNull String param2, @NonNull String param3) throws RestException {
return new String[0];
}
@Deprecated
default void voidMethodExample(@Nullable Integer param1, @NonNull String... params) throws RestException {}
@NonNull
default int[] methodExample(@Nullable Integer param1, @NonNull int... params) throws RestException {
return new int[0];
}
}
- Doc
package io.github.nichetoolkit.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
import io.github.nichetoolkit.rest.RestException;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import java.io.Serializable;
/**
* <code>InterfaceExample</code>
* <p>The interface example interface.</p>
* @param <I> {@link java.lang.Object} <p>The parameter can be of any type.</p>
* @param <E> {@link io.github.nichetoolkit.example.InterfaceExample} <p>The generic parameter is <code>InterfaceExample</code> type.</p>
* @author Cyan ([email protected])
* @see java.io.Serializable
* @see java.lang.Deprecated
* @see java.lang.SuppressWarnings
* @since Jdk1.8
* @deprecated <p>The interface example interface has be deprecated.</p>
*/
@Deprecated
@SuppressWarnings({"UnnecessaryParentheses", "unused"})
public interface InterfaceExample<I,E extends InterfaceExample<I,E>> extends Serializable {
/**
* <code>INTERFACE_FIELD_EXAMPLE</code>
* {@link java.lang.String} <p>The constant <code>INTERFACE_FIELD_EXAMPLE</code> field.</p>
* @see java.lang.String
* @see com.fasterxml.jackson.annotation.JsonIgnore
*/
@JsonIgnore
String INTERFACE_FIELD_EXAMPLE = "INTERFACE_FIELD_EXAMPLE";
/**
* <code>getInterfaceField</code>
* <p>The get interface field getter method.</p>
* @return {@link java.lang.String} <p>The get interface field return object is <code>String</code> type.</p>
* @see java.lang.String
* @see com.fasterxml.jackson.annotation.JsonValue
* @see org.springframework.lang.NonNull
*/
@JsonValue
@NonNull
String getInterfaceField();
/**
* <code>setInterfaceField</code>
* <p>The set interface field setter method.</p>
* @param interfaceField {@link java.lang.String} <p>The interface field parameter is <code>String</code> type.</p>
* @see java.lang.String
* @see org.springframework.lang.NonNull
* @see com.fasterxml.jackson.annotation.JsonCreator
*/
@JsonCreator
void setInterfaceField(@NonNull String interfaceField);
/**
* <code>methodExample</code>
* <p>The method example method.</p>
* @param param1 {@link java.lang.Integer} <p>The param 1 parameter is <code>Integer</code> type.</p>
* @param param2 {@link java.lang.String} <p>The param 2 parameter is <code>String</code> type.</p>
* @param param3 {@link java.lang.String} <p>The param 3 parameter is <code>String</code> type.</p>
* @return {@link java.lang.String} <p>The method example return object is <code>String</code> type.</p>
* @throws RestException {@link io.github.nichetoolkit.rest.RestException} <p>The rest exception is <code>RestException</code> type.</p>
* @see java.lang.Integer
* @see org.springframework.lang.Nullable
* @see java.lang.String
* @see org.springframework.lang.NonNull
* @see io.github.nichetoolkit.rest.RestException
*/
@NonNull
default String[] methodExample(@Nullable Integer param1, @NonNull String param2, @NonNull String param3) throws RestException {
return new String[0];
}
/**
* <code>voidMethodExample</code>
* <p>The void method example method.</p>
* @param param1 {@link java.lang.Integer} <p>The param 1 parameter is <code>Integer</code> type.</p>
* @param params {@link java.lang.String} <p>The params parameter is <code>String</code> type.</p>
* @throws RestException {@link io.github.nichetoolkit.rest.RestException} <p>The rest exception is <code>RestException</code> type.</p>
* @see java.lang.Integer
* @see org.springframework.lang.Nullable
* @see java.lang.String
* @see org.springframework.lang.NonNull
* @see java.lang.Deprecated
* @see io.github.nichetoolkit.rest.RestException
* @deprecated <p>The void method example method has be deprecated.</p>
*/
@Deprecated
default void voidMethodExample(@Nullable Integer param1, @NonNull String... params) throws RestException {}
/**
* <code>methodExample</code>
* <p>The method example method.</p>
* @param param1 {@link java.lang.Integer} <p>The param 1 parameter is <code>Integer</code> type.</p>
* @param params int <p>The params parameter is <code>int</code> type.</p>
* @return int <p>The method example return object is <code>int</code> type.</p>
* @throws RestException {@link io.github.nichetoolkit.rest.RestException} <p>The rest exception is <code>RestException</code> type.</p>
* @see java.lang.Integer
* @see org.springframework.lang.Nullable
* @see org.springframework.lang.NonNull
* @see io.github.nichetoolkit.rest.RestException
*/
@NonNull
default int[] methodExample(@Nullable Integer param1, @NonNull int... params) throws RestException {
return new int[0];
}
}
- Code
package io.github.nichetoolkit.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
import io.github.nichetoolkit.rest.RestKey;
import java.util.Optional;
@Deprecated
@SuppressWarnings({"UnnecessaryParentheses", "unused"})
public enum EnumExample implements RestKey<String> {
CASE1("case1"),
CASE2("case2"),
;
@JsonIgnore
private static final String ENUM_FIELD_EXAMPLE = "ENUM_FIELD_EXAMPLE";
private final String key;
EnumExample(String key) {
this.key = key;
}
@JsonValue
@Override
public String getKey() {
return this.key;
}
@JsonCreator
public static EnumExample parseKey(String key) {
EnumExample enumExample = RestKey.parseKey(EnumExample.class, key);
return Optional.ofNullable(enumExample).orElse(CASE1);
}
}
- doc
package io.github.nichetoolkit.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
import io.github.nichetoolkit.rest.RestKey;
import java.util.Optional;
/**
* <code>EnumExample</code>
* <p>The enum example enumeration.</p>
* @author Cyan ([email protected])
* @see io.github.nichetoolkit.rest.RestKey
* @see java.lang.Deprecated
* @see java.lang.SuppressWarnings
* @since Jdk1.8
* @deprecated <p>The enum example enumeration has be deprecated.</p>
*/
@Deprecated
@SuppressWarnings({"UnnecessaryParentheses", "unused"})
public enum EnumExample implements RestKey<String> {
/**
* <code>CASE1</code>
* <p>The case 1 enum example field.</p>
*/
CASE1("case1"),
/**
* <code>CASE2</code>
* <p>The case 2 enum example field.</p>
*/
CASE2("case2"),
;
/**
* <code>ENUM_FIELD_EXAMPLE</code>
* {@link java.lang.String} <p>The constant <code>ENUM_FIELD_EXAMPLE</code> field.</p>
* @see java.lang.String
* @see com.fasterxml.jackson.annotation.JsonIgnore
*/
@JsonIgnore
private static final String ENUM_FIELD_EXAMPLE = "ENUM_FIELD_EXAMPLE";
/**
* <code>key</code>
* {@link java.lang.String} <p>The <code>key</code> field.</p>
* @see java.lang.String
*/
private final String key;
/**
* <code>EnumExample</code>
* <p>Instantiates a new enum example.</p>
* @param key {@link java.lang.String} <p>The key parameter is <code>String</code> type.</p>
* @see java.lang.String
*/
EnumExample(String key) {
this.key = key;
}
@JsonValue
@Override
public String getKey() {
return this.key;
}
/**
* <code>parseKey</code>
* <p>The parse key method.</p>
* @param key {@link java.lang.String} <p>The key parameter is <code>String</code> type.</p>
* @return {@link io.github.nichetoolkit.example.EnumExample} <p>The parse key return object is <code>EnumExample</code> type.</p>
* @see java.lang.String
* @see com.fasterxml.jackson.annotation.JsonCreator
*/
@JsonCreator
public static EnumExample parseKey(String key) {
EnumExample enumExample = RestKey.parseKey(EnumExample.class, key);
return Optional.ofNullable(enumExample).orElse(CASE1);
}
}
- Code
package io.github.nichetoolkit.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
import io.github.nichetoolkit.rest.RestException;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import java.io.Serializable;
@Deprecated
@SuppressWarnings({"UnnecessaryParentheses", "unused"})
public class ClassExample<I, E extends ClassExample<I, E>> implements Serializable {
@JsonIgnore
public static final String CLASS_FIELD_EXAMPLE = "CLASS_FIELD_EXAMPLE";
private String classField;
public ClassExample() {
}
public ClassExample(String classField) {
this.classField = classField;
}
@JsonValue
@NonNull
public String getClassField() {
return this.classField;
}
@JsonCreator
public void setClassField(@NonNull String classField) {
this.classField = classField;
}
@NonNull
public String[] methodExample(@Nullable Integer param1, @NonNull String param2, @NonNull String param3) throws RestException {
return new String[0];
}
@Deprecated
public void voidMethodExample(@Nullable Integer param1, @NonNull String... params) throws RestException {
}
@NonNull
public int[] methodExample(@Nullable Integer param1, @NonNull int... params) throws RestException {
return new int[0];
}
}
- doc
package io.github.nichetoolkit.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonValue;
import io.github.nichetoolkit.rest.RestException;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import java.io.Serializable;
/**
* <code>ClassExample</code>
* <p>The class example class.</p>
* @param <I> {@link java.lang.Object} <p>The parameter can be of any type.</p>
* @param <E> {@link io.github.nichetoolkit.example.ClassExample} <p>The generic parameter is <code>ClassExample</code> type.</p>
* @author Cyan ([email protected])
* @see java.io.Serializable
* @see java.lang.Deprecated
* @see java.lang.SuppressWarnings
* @since Jdk1.8
* @deprecated <p>The class example class has be deprecated.</p>
*/
@Deprecated
@SuppressWarnings({"UnnecessaryParentheses", "unused"})
public class ClassExample<I, E extends ClassExample<I, E>> implements Serializable {
/**
* <code>CLASS_FIELD_EXAMPLE</code>
* {@link java.lang.String} <p>The constant <code>CLASS_FIELD_EXAMPLE</code> field.</p>
* @see java.lang.String
* @see com.fasterxml.jackson.annotation.JsonIgnore
*/
@JsonIgnore
public static final String CLASS_FIELD_EXAMPLE = "CLASS_FIELD_EXAMPLE";
/**
* <code>classField</code>
* {@link java.lang.String} <p>The <code>classField</code> field.</p>
* @see java.lang.String
*/
private String classField;
/**
* <code>ClassExample</code>
* <p>Instantiates a new class example.</p>
*/
public ClassExample() {
}
/**
* <code>ClassExample</code>
* <p>Instantiates a new class example.</p>
* @param classField {@link java.lang.String} <p>The class field parameter is <code>String</code> type.</p>
* @see java.lang.String
*/
public ClassExample(String classField) {
this.classField = classField;
}
/**
* <code>getClassField</code>
* <p>The get class field getter method.</p>
* @return {@link java.lang.String} <p>The get class field return object is <code>String</code> type.</p>
* @see java.lang.String
* @see com.fasterxml.jackson.annotation.JsonValue
* @see org.springframework.lang.NonNull
*/
@JsonValue
@NonNull
public String getClassField() {
return this.classField;
}
/**
* <code>setClassField</code>
* <p>The set class field setter method.</p>
* @param classField {@link java.lang.String} <p>The class field parameter is <code>String</code> type.</p>
* @see java.lang.String
* @see org.springframework.lang.NonNull
* @see com.fasterxml.jackson.annotation.JsonCreator
*/
@JsonCreator
public void setClassField(@NonNull String classField) {
this.classField = classField;
}
/**
* <code>methodExample</code>
* <p>The method example method.</p>
* @param param1 {@link java.lang.Integer} <p>The param 1 parameter is <code>Integer</code> type.</p>
* @param param2 {@link java.lang.String} <p>The param 2 parameter is <code>String</code> type.</p>
* @param param3 {@link java.lang.String} <p>The param 3 parameter is <code>String</code> type.</p>
* @return {@link java.lang.String} <p>The method example return object is <code>String</code> type.</p>
* @throws RestException {@link io.github.nichetoolkit.rest.RestException} <p>The rest exception is <code>RestException</code> type.</p>
* @see java.lang.Integer
* @see org.springframework.lang.Nullable
* @see java.lang.String
* @see org.springframework.lang.NonNull
* @see io.github.nichetoolkit.rest.RestException
*/
@NonNull
public String[] methodExample(@Nullable Integer param1, @NonNull String param2, @NonNull String param3) throws RestException {
return new String[0];
}
/**
* <code>voidMethodExample</code>
* <p>The void method example method.</p>
* @param param1 {@link java.lang.Integer} <p>The param 1 parameter is <code>Integer</code> type.</p>
* @param params {@link java.lang.String} <p>The params parameter is <code>String</code> type.</p>
* @throws RestException {@link io.github.nichetoolkit.rest.RestException} <p>The rest exception is <code>RestException</code> type.</p>
* @see java.lang.Integer
* @see org.springframework.lang.Nullable
* @see java.lang.String
* @see org.springframework.lang.NonNull
* @see java.lang.Deprecated
* @see io.github.nichetoolkit.rest.RestException
* @deprecated <p>The void method example method has be deprecated.</p>
*/
@Deprecated
public void voidMethodExample(@Nullable Integer param1, @NonNull String... params) throws RestException {
}
/**
* <code>methodExample</code>
* <p>The method example method.</p>
* @param param1 {@link java.lang.Integer} <p>The param 1 parameter is <code>Integer</code> type.</p>
* @param params int <p>The params parameter is <code>int</code> type.</p>
* @return int <p>The method example return object is <code>int</code> type.</p>
* @throws RestException {@link io.github.nichetoolkit.rest.RestException} <p>The rest exception is <code>RestException</code> type.</p>
* @see java.lang.Integer
* @see org.springframework.lang.Nullable
* @see org.springframework.lang.NonNull
* @see io.github.nichetoolkit.rest.RestException
*/
@NonNull
public int[] methodExample(@Nullable Integer param1, @NonNull int... params) throws RestException {
return new int[0];
}
}
- Regexp
^.*(public|protected|private)*.+interface\s+\w+.*
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The ${name?lower_case} interface.</p>\n
<#-- the interface deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} interface has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the class see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign classSees = trim(element.qualifiedName)>
<#-- the interface generic parameter types -->
<#if element.typeParameters?has_content>
<#list element.typeParameters as parameter>
* @param <${parameter.name}>
<#if parameter.extendsListTypes?has_content>
<#list parameter.extendsListTypes as extendType>
<#assign rawType = extendType.rawType()>
<#assign presentableName = trim(rawType.getPresentableText(false))>
<#assign canonicalName = trim(rawType.getCanonicalText(false))>
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The generic parameter is <code>${presentableName}</code> type.</p> \n
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
<#else>
{@link java.lang.Object} <p>The parameter can be of any type.</p> \n
</#if>
</#list>
</#if>
<#-- the interface extends class types-->
<#if element.extendsListTypes?has_content>
<#list element.extendsListTypes as extendType>
<#assign canonicalName = trim(extendType.rawType().getCanonicalText(false))>
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
</#if>
<#-- the interface annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !classSees?contains(qualifiedName)>
<#assign classSees = classSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
* @author Cyan ([email protected]) \n
* @since Jdk1.8 \n
*/
- Regexp
^.*(public|protected|private)*.+enum\s+\w+.*
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The ${name?lower_case} enumeration.</p>\n
<#-- the enumeration deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} enumeration has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the class see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign classSees = trim(element.qualifiedName)>
<#-- the enumeration implements interface types-->
<#if element.implementsListTypes?has_content>
<#list element.implementsListTypes as implementType>
<#assign canonicalName = trim(implementType.rawType().getCanonicalText(false))>
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
</#if>
<#-- the enumeration annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !classSees?contains(qualifiedName)>
<#assign classSees = classSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
* @author Cyan ([email protected]) \n
* @since Jdk1.8 \n
*/
- Regexp
^.*(public|protected|private)*.+class\s+\w+.*
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The ${name?lower_case} class.</p>\n
<#-- the class deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} class has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the class see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign classSees = trim(element.qualifiedName)>
<#-- the class generic parameter types -->
<#if element.typeParameters?has_content>
<#list element.typeParameters as parameter>
* @param <${parameter.name}>
<#if parameter.extendsListTypes?has_content>
<#list parameter.extendsListTypes as extendType>
<#assign rawType = extendType.rawType()>
<#assign presentableName = trim(rawType.getPresentableText(false))>
<#assign canonicalName = trim(rawType.getCanonicalText(false))>
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The generic parameter is <code>${presentableName}</code> type.</p> \n
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
<#else>
{@link java.lang.Object} <p>The parameter can be of any type.</p> \n
</#if>
</#list>
</#if>
<#-- the class extends class types-->
<#if element.extendsListTypes?has_content>
<#list element.extendsListTypes as extendType>
<#assign canonicalName = trim(extendType.rawType().getCanonicalText(false))>
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
</#if>
<#-- the class implements interface types-->
<#if element.implementsListTypes?has_content>
<#list element.implementsListTypes as implementType>
<#assign canonicalName = trim(implementType.rawType().getCanonicalText(false))>
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
</#if>
<#-- the class annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !classSees?contains(qualifiedName)>
<#assign classSees = classSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
* @author Cyan ([email protected]) \n
* @since Jdk1.8 \n
*/
- Regexp
.+
- Template
/**\n
* <code>${element.name}</code>\n
<#if element.isInterface()>
* <p>The ${name?lower_case} interface.</p>\n
<#elseif element.isEnum()>
* <p>The ${name?lower_case} enumeration.</p>\n
<#else>
* <p>The ${name?lower_case}.</p>\n
</#if>
<#-- the class deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} class has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the class see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign classSees = trim(element.qualifiedName)>
<#-- the class generic parameter types -->
<#if element.typeParameters?has_content>
<#list element.typeParameters as parameter>
* @param <${parameter.name}>
<#if parameter.extendsListTypes?has_content>
<#list parameter.extendsListTypes as extendType>
<#assign rawType = extendType.rawType()>
<#assign presentableName = trim(rawType.getPresentableText(false))>
<#assign canonicalName = trim(rawType.getCanonicalText(false))>
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The generic parameter is <code>${presentableName}</code> type.</p> \n
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
<#else>
{@link java.lang.Object} <p>The parameter can be of any type.</p> \n
</#if>
</#list>
</#if>
<#-- the class extends class types-->
<#if element.extendsListTypes?has_content>
<#list element.extendsListTypes as extendType>
<#assign canonicalName = trim(extendType.rawType().getCanonicalText(false))>
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
</#if>
<#-- the class implements interface types-->
<#if element.implementsListTypes?has_content>
<#list element.implementsListTypes as implementType>
<#assign canonicalName = trim(implementType.rawType().getCanonicalText(false))>
<#if !classSees?contains(canonicalName)>
<#assign classSees = classSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
</#if>
<#-- the class annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !classSees?contains(qualifiedName)>
<#assign classSees = classSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
* @author Cyan ([email protected]) \n
* @since Jdk1.8 \n
*/
- Regexp
.+
- Template
/**\n
* <code>${element.name}</code>\n
* <p>Instantiates a new ${name?lower_case}.</p>\n
<#-- the method deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} method has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the method see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign methodSees = trim(element.parent.qualifiedName)>
<#-- the method parameters -->
<#if element.parameterList.parameters?has_content>
<#list element.parameterList.parameters as parameter>
<#assign parameterType = parameter.type>
<#assign presentableName = trim(parameterType.getPresentableText(false))>
<#assign canonicalName = trim(parameterType.getCanonicalText(false))>
* @param ${parameter.name}
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${paramNames[parameter.name]?lower_case} parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the parameter annotation types -->
<#if parameter.getAnnotations()?has_content>
<#list parameter.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
</#list>
</#if>
<#-- the method annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
<#-- the method throws exceptions -->
<#if element.throwsList.referenceElements?has_content>
<#list element.throwsList.referenceElements as exception>
<#assign referenceName = trim(exception.referenceName)>
<#assign qualifiedName = trim(exception.qualifiedName)>
* @throws ${referenceName}
<#if qualifiedName?contains(".")>
{@link ${qualifiedName}}
<#else>
${qualifiedName}
</#if>
<p>The ${exceptionNames[referenceName]?lower_case} is <code>${referenceName}</code> type.</p> \n
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
^.*(public|protected|private)*\s*.*(\w(\s*<.+>)*)+\s+get\w+\s*\(.*\).+
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The ${name?lower_case} getter method.</p>\n
<#-- the method deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} method has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the method see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign methodSees = trim(element.parent.qualifiedName)>
<#-- the method generic type parameters -->
<#if element.typeParameters?has_content>
<#list element.typeParameters as parameter>
* @param <${parameter.name}>
<#if parameter.extendsListTypes?has_content>
<#list parameter.extendsListTypes as extendType>
<#assign rawType = extendType.rawType()>
<#assign presentableName = trim(rawType.getPresentableText(false))>
<#assign canonicalName = trim(rawType.getCanonicalText(false))>
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The generic parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
<#else>
{@link java.lang.Object} <p>The parameter can be of any type.</p> \n
</#if>
</#list>
</#if>
<#-- the method parameters -->
<#if element.parameterList.parameters?has_content>
<#list element.parameterList.parameters as parameter>
<#assign parameterType = parameter.type>
<#assign presentableName = trim(parameterType.getPresentableText(false))>
<#assign canonicalName = trim(parameterType.getCanonicalText(false))>
* @param ${parameter.name}
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${paramNames[parameter.name]?lower_case} parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the parameter annotation types -->
<#if parameter.getAnnotations()?has_content>
<#list parameter.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
</#list>
</#if>
<#-- the method return type -->
<#if isNotVoid>
<#assign returnType = element.returnType>
<#assign presentableName = trim(returnType.getPresentableText(false))>
<#assign canonicalName = trim(returnType.getCanonicalText(false))>
* @return
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${name?lower_case} return object is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
</#if>
<#-- the method annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
<#-- the method throws exceptions -->
<#if element.throwsList.referenceElements?has_content>
<#list element.throwsList.referenceElements as exception>
<#assign referenceName = trim(exception.referenceName)>
<#assign qualifiedName = trim(exception.qualifiedName)>
* @throws ${referenceName}
<#if qualifiedName?contains(".")>
{@link ${qualifiedName}}
<#else>
${qualifiedName}
</#if>
<p>The ${exceptionNames[referenceName]?lower_case} is <code>${referenceName}</code> type.</p> \n
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
^.*(public|protected|private)*\s*.*(void|\w(\s*<.+>)*)+\s+set\w+\s*\(.*\).+
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The ${name?lower_case} setter method.</p>\n
<#-- the method deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} method has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the method see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign methodSees = trim(element.parent.qualifiedName)>
<#-- the method generic type parameters -->
<#if element.typeParameters?has_content>
<#list element.typeParameters as parameter>
* @param <${parameter.name}>
<#if parameter.extendsListTypes?has_content>
<#list parameter.extendsListTypes as extendType>
<#assign rawType = extendType.rawType()>
<#assign presentableName = trim(rawType.getPresentableText(false))>
<#assign canonicalName = trim(rawType.getCanonicalText(false))>
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The generic parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
<#else>
{@link java.lang.Object} <p>The parameter can be of any type.</p> \n
</#if>
</#list>
</#if>
<#-- the method parameters -->
<#if element.parameterList.parameters?has_content>
<#list element.parameterList.parameters as parameter>
<#assign parameterType = parameter.type>
<#assign presentableName = trim(parameterType.getPresentableText(false))>
<#assign canonicalName = trim(parameterType.getCanonicalText(false))>
* @param ${parameter.name}
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${paramNames[parameter.name]?lower_case} parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the parameter annotation types -->
<#if parameter.getAnnotations()?has_content>
<#list parameter.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
</#list>
</#if>
<#-- the method return type -->
<#if isNotVoid>
<#assign returnType = element.returnType>
<#assign presentableName = trim(returnType.getPresentableText(false))>
<#assign canonicalName = trim(returnType.getCanonicalText(false))>
* @return
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${name?lower_case} return object is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
</#if>
<#-- the method annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
<#-- the method throws exceptions -->
<#if element.throwsList.referenceElements?has_content>
<#list element.throwsList.referenceElements as exception>
<#assign referenceName = trim(exception.referenceName)>
<#assign qualifiedName = trim(exception.qualifiedName)>
* @throws ${referenceName}
<#if qualifiedName?contains(".")>
{@link ${qualifiedName}}
<#else>
${qualifiedName}
</#if>
<p>The ${exceptionNames[referenceName]?lower_case} is <code>${referenceName}</code> type.</p> \n
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
^.*((public\s+static)|(static\s+public))\s+void\s+main\s*\(\s*String\s*(\[\s*\]|\.\.\.)\s+\w+\s*\).+
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The entry point of application.</p>\n
<#-- the method deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} method has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the method see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign methodSees = trim(element.parent.qualifiedName)>
<#-- the method parameters -->
<#if element.parameterList.parameters?has_content>
* @param ${element.parameterList.parameters[0].name} {@link java.lang.String} <p>The input arguments.</p>\n
* @see java.lang.String \n
</#if>
<#-- the method annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
<#-- the method throws exceptions -->
<#if element.throwsList.referenceElements?has_content>
<#list element.throwsList.referenceElements as exception>
<#assign referenceName = trim(exception.referenceName)>
<#assign qualifiedName = trim(exception.qualifiedName)>
* @throws ${referenceName}
<#if qualifiedName?contains(".")>
{@link ${qualifiedName}}
<#else>
${qualifiedName}
</#if>
<p>The ${exceptionNames[referenceName]?lower_case} is <code>${referenceName}</code> type.</p> \n
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
.+
- Template
/**\n
* <code>${element.name}</code>\n
* <p>The ${name?lower_case} method.</p>\n
<#-- the method deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The ${name?lower_case} method has be deprecated.</p>\n
</#if>
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the method see global variable -->
<#-- the value of default is the method parent class qualified name -->
<#assign methodSees = trim(element.parent.qualifiedName)>
<#-- the method generic type parameters -->
<#if element.typeParameters?has_content>
<#list element.typeParameters as parameter>
* @param <${parameter.name}>
<#if parameter.extendsListTypes?has_content>
<#list parameter.extendsListTypes as extendType>
<#assign rawType = extendType.rawType()>
<#assign presentableName = trim(rawType.getPresentableText(false))>
<#assign canonicalName = trim(rawType.getCanonicalText(false))>
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The generic parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
* @see ${canonicalName} \n
</#if>
</#list>
<#else>
{@link java.lang.Object} <p>The parameter can be of any type.</p> \n
</#if>
</#list>
</#if>
<#-- the method parameters -->
<#if element.parameterList.parameters?has_content>
<#list element.parameterList.parameters as parameter>
<#assign parameterType = parameter.type>
<#assign presentableName = trim(parameterType.getPresentableText(false))>
<#assign canonicalName = trim(parameterType.getCanonicalText(false))>
* @param ${parameter.name}
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${paramNames[parameter.name]?lower_case} parameter is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the parameter annotation types -->
<#if parameter.getAnnotations()?has_content>
<#list parameter.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
</#list>
</#if>
<#-- the method return type -->
<#if isNotVoid>
<#assign returnType = element.returnType>
<#assign presentableName = trim(returnType.getPresentableText(false))>
<#assign canonicalName = trim(returnType.getCanonicalText(false))>
* @return
<#if canonicalName?contains(".")>
{@link ${canonicalName}}
<#else>
${canonicalName}
</#if>
<p>The ${name?lower_case} return object is <code>${presentableName}</code> type.</p> \n
<#if !methodSees?contains(canonicalName)>
<#assign methodSees = methodSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
</#if>
<#-- the method annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
<#-- the method throws exceptions -->
<#if element.throwsList.referenceElements?has_content>
<#list element.throwsList.referenceElements as exception>
<#assign referenceName = trim(exception.referenceName)>
<#assign qualifiedName = trim(exception.qualifiedName)>
* @throws ${referenceName}
<#if qualifiedName?contains(".")>
{@link ${qualifiedName}}
<#else>
${qualifiedName}
</#if>
<p>The ${exceptionNames[referenceName]?lower_case} is <code>${referenceName}</code> type.</p> \n
<#if !methodSees?contains(qualifiedName)>
<#assign methodSees = methodSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
^.*(public|protected|private)*.+static.*(\w\s\w)+.+
- Template
/**\n
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the field see global variable -->
<#-- the value of default is the field parent class qualified name -->
<#assign fieldSees = trim(element.parent.qualifiedName)>
<#assign fieldType = element.type>
<#assign canonicalName = trim(fieldType.getCanonicalText(false))>
* <code>${element.name}</code>\n
<#if canonicalName?contains(".")>
* {@link ${canonicalName}} <p>The constant <code>${element.name}</code> field.</p>\n
<#else>
* <p>The constant <code>${element.name}</code> field.</p>\n
</#if>
<#-- the field deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The <code>${element.name}</code> field has be deprecated.</p>\n
</#if>
<#-- the field type -->
<#if !fieldSees?contains(canonicalName)>
<#assign fieldSees = fieldSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the field annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !fieldSees?contains(qualifiedName)>
<#assign fieldSees = fieldSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
^.*(public|protected|private)*.*(\w\s\w)+.+
- Template
/**\n
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the field see global variable -->
<#-- the value of default is the field parent class qualified name -->
<#assign fieldSees = trim(element.parent.qualifiedName)>
<#assign fieldType = element.type>
<#assign canonicalName = trim(fieldType.getCanonicalText(false))>
* <code>${element.name}</code>\n
<#if element.parent.isInterface()>
<#if canonicalName?contains(".")>
* {@link ${canonicalName}} <p>The constant <code>${element.name}</code> field.</p>\n
<#else>
* <p>The constant <code>${element.name}</code> field.</p>\n
</#if>
<#else>
<#if canonicalName?contains(".")>
* {@link ${canonicalName}} <p>The <code>${element.name}</code> field.</p>\n
<#else>
* <p>The <code>${element.name}</code> field.</p>\n
</#if>
</#if>
<#-- the field deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The <code>${element.name}</code> field has be deprecated.</p>\n
</#if>
<#-- the field type -->
<#if !fieldSees?contains(canonicalName)>
<#assign fieldSees = fieldSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the field annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !fieldSees?contains(qualifiedName)>
<#assign fieldSees = fieldSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/
- Regexp
.+
- Template
/**\n
<#-- the trim function is to trim the string of name -->
<#function trim name>
<#if name?contains("<")>
<#return name?keep_before("<")>
<#elseif name?contains("[")>
<#return name?keep_before("[")>
<#elseif name?contains("...")>
<#return name?keep_before("...")>
<#else>
<#return name>
</#if>
</#function>
<#-- the field see global variable -->
<#-- the value of default is the field parent class qualified name -->
<#assign fieldSees = trim(element.parent.qualifiedName)>
<#assign fieldType = element.type>
<#assign canonicalName = trim(fieldType.getCanonicalText(false))>
* <code>${element.name}</code>\n
<#if element.parent.isInterface()>
<#if canonicalName?contains(".")>
* {@link ${canonicalName}} <p>The constant <code>${element.name}</code> field.</p>\n
<#else>
* <p>The constant <code>${element.name}</code> field.</p>\n
</#if>
<#elseif element.parent.isEnum()>
* <p>The ${name?lower_case} ${typeName?lower_case} field.</p>\n
<#else>
* <p>The ${name?lower_case} field.</p>\n
</#if>
<#-- the field deprecated annotation -->
<#if element.isDeprecated()>
* @deprecated <p>The <code>${element.name}</code> field has be deprecated.</p>\n
</#if>
<#-- the field type -->
<#if !fieldSees?contains(canonicalName)>
<#assign fieldSees = fieldSees + canonicalName>
<#if canonicalName?contains(".")>
* @see ${canonicalName} \n
</#if>
</#if>
<#-- the field annotation types -->
<#if element.getAnnotations()?has_content>
<#list element.getAnnotations() as annotation>
<#assign qualifiedName = trim(annotation.qualifiedName)>
<#if !fieldSees?contains(qualifiedName)>
<#assign fieldSees = fieldSees + qualifiedName>
* @see ${qualifiedName} \n
</#if>
</#list>
</#if>
*/