diff --git a/src/main/java/io/apidocx/parse/parser/ParseHelper.java b/src/main/java/io/apidocx/parse/parser/ParseHelper.java index cb4e75d..14f5cfb 100644 --- a/src/main/java/io/apidocx/parse/parser/ParseHelper.java +++ b/src/main/java/io/apidocx/parse/parser/ParseHelper.java @@ -161,10 +161,10 @@ public List getApiTags(PsiMethod method) { /** * 获取参数描述 */ - public String getParameterDescription(PsiParameter parameter, Map paramTagMap, + public String getParameterDescription(PsiMethod method, PsiParameter parameter, Map paramTagMap, List values) { // @ApiParam > @param - String summary = PsiSwaggerUtils.getParameterDescription(parameter); + String summary = PsiSwaggerUtils.getParameterDescription(method, parameter); if (StringUtils.isEmpty(summary)) { summary = paramTagMap.get(parameter.getName()); } diff --git a/src/main/java/io/apidocx/parse/parser/RequestParser.java b/src/main/java/io/apidocx/parse/parser/RequestParser.java index c3a5ba2..8ca76f1 100644 --- a/src/main/java/io/apidocx/parse/parser/RequestParser.java +++ b/src/main/java/io/apidocx/parse/parser/RequestParser.java @@ -278,7 +278,7 @@ private Property doParseParameter(PsiMethod method, PsiParameter parameter) { required = parseHelper.getParameterRequired(parameter); } Map paramTags = PsiDocCommentUtils.getTagParamTextMap(method); - String description = parseHelper.getParameterDescription(parameter, paramTags, property.getPropertyValues()); + String description = parseHelper.getParameterDescription(method, parameter, paramTags, property.getPropertyValues()); property.setIn(in); property.setName(name); property.setDescription(description); diff --git a/src/main/java/io/apidocx/parse/util/PsiAnnotationUtils.java b/src/main/java/io/apidocx/parse/util/PsiAnnotationUtils.java index 064f09b..9608f27 100644 --- a/src/main/java/io/apidocx/parse/util/PsiAnnotationUtils.java +++ b/src/main/java/io/apidocx/parse/util/PsiAnnotationUtils.java @@ -12,10 +12,12 @@ import com.intellij.psi.PsiExpression; import com.intellij.psi.PsiField; import com.intellij.psi.PsiModifierListOwner; +import com.intellij.psi.PsiParameter; import com.intellij.psi.PsiReference; import com.intellij.psi.PsiTypeElement; import com.intellij.psi.impl.JavaConstantExpressionEvaluator; import java.math.BigDecimal; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -34,6 +36,13 @@ public static PsiAnnotation getAnnotation(PsiModifierListOwner element, String f return element.getAnnotation(fqn); } + /** + * 获取指定注解 + */ + public static PsiAnnotation[] getAnnotations(PsiModifierListOwner element, String fqn) { + return Arrays.stream(element.getAnnotations()).filter(annotation -> fqn.equals(annotation.getQualifiedName())).toArray(PsiAnnotation[]::new); + } + /** * 获取指定注解 */ @@ -187,4 +196,5 @@ public static BigDecimal getBigDecimalAttributeValueByAnnotation(PsiAnnotation a } return null; } + } diff --git a/src/main/java/io/apidocx/parse/util/PsiSwaggerUtils.java b/src/main/java/io/apidocx/parse/util/PsiSwaggerUtils.java index 8dcf2d6..4252899 100644 --- a/src/main/java/io/apidocx/parse/util/PsiSwaggerUtils.java +++ b/src/main/java/io/apidocx/parse/util/PsiSwaggerUtils.java @@ -42,7 +42,7 @@ public static String getApiSummary(PsiMethod psiMethod) { return null; } - public static String getParameterDescription(PsiParameter psiParameter) { + public static String getParameterDescription(PsiMethod method, PsiParameter psiParameter) { PsiAnnotation apiParam = PsiAnnotationUtils.getAnnotation(psiParameter, SwaggerConstants.ApiParam); if (apiParam != null) { return PsiAnnotationUtils.getStringAttributeValueByAnnotation(apiParam); @@ -51,6 +51,14 @@ public static String getParameterDescription(PsiParameter psiParameter) { if (parameter != null) { return PsiAnnotationUtils.getStringAttributeValueByAnnotation(parameter, "description"); } + PsiAnnotation[] parameters = PsiAnnotationUtils.getAnnotations(psiParameter, SwaggerConstants.Parameter); + for (PsiAnnotation p : parameters) { + String name = PsiAnnotationUtils.getStringAttributeValueByAnnotation(p, "name"); + if (name != null && name.equals(psiParameter.getName())) { + return PsiAnnotationUtils.getStringAttributeValueByAnnotation(p, "description"); + } + } + return null; }