Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: ✨ display parameters when using @JsonSerialize(using = ToStringSerializer.class) as strings #715

Merged
merged 1 commit into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/com/ly/doc/constants/DocAnnotationConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,16 @@ public interface DocAnnotationConstants {

String SHORT_JSON_PROPERTY = "JsonProperty";

/**
* com.fasterxml.jackson.databind.annotation.JsonSerialize
*/
String SHORT_JSON_SERIALIZE = "JsonSerialize";

/**
* the value of `@JsonSerialize(using = ToStringSerializer.class)`
*/
String TO_STRING_SERIALIZER_USING = "ToStringSerializer.class";

/**
* issue #484 gson alias annotation
*/
Expand Down
31 changes: 8 additions & 23 deletions src/main/java/com/ly/doc/helper/JsonBuildHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,18 @@
*/
package com.ly.doc.helper;

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

import com.ly.doc.builder.ProjectDocConfigBuilder;
import com.ly.doc.constants.DocAnnotationConstants;
import com.ly.doc.constants.DocGlobalConstants;
import com.ly.doc.constants.DocTags;
import com.ly.doc.constants.ValidatorAnnotations;
import com.ly.doc.model.*;
import com.ly.doc.utils.*;
import com.power.common.util.CollectionUtil;
import com.power.common.util.StringUtil;
import com.ly.doc.builder.ProjectDocConfigBuilder;
import com.ly.doc.constants.DocTags;
import com.ly.doc.constants.ValidatorAnnotations;
import com.ly.doc.model.ApiConfig;
import com.ly.doc.model.ApiReturn;
import com.ly.doc.model.CustomField;
import com.ly.doc.model.DocJavaField;
import com.ly.doc.model.DocJavaMethod;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaAnnotation;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaField;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.JavaType;
import com.thoughtworks.qdox.model.*;

import java.util.*;

import static com.ly.doc.constants.DocTags.IGNORE_RESPONSE_BODY_ADVICE;

Expand Down Expand Up @@ -281,7 +266,7 @@ public static String buildJson(String typeName, String genericCanonicalName,
}
}
}
String typeSimpleName = field.getType().getSimpleName();
String typeSimpleName = docField.getTypeSimpleName();
String fieldGicName = docField.getGenericCanonicalName();
CustomField.Key key = CustomField.Key.create(docField.getDeclaringClassName(), fieldName);

Expand Down
12 changes: 12 additions & 0 deletions src/main/java/com/ly/doc/model/DocJavaField.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ public class DocJavaField {
private String declaringClassName;


private String typeSimpleName;


public static DocJavaField builder() {
return new DocJavaField();
}
Expand Down Expand Up @@ -240,4 +243,13 @@ public DocJavaField setGenericFullyQualifiedName(String genericFullyQualifiedNam
this.genericFullyQualifiedName = genericFullyQualifiedName;
return this;
}

public String getTypeSimpleName() {
return typeSimpleName;
}

public DocJavaField setTypeSimpleName(String typeSimpleName) {
this.typeSimpleName = typeSimpleName;
return this;
}
}
40 changes: 23 additions & 17 deletions src/main/java/com/ly/doc/utils/JavaClassUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@
*/
package com.ly.doc.utils;

import com.ly.doc.builder.ProjectDocConfigBuilder;
import com.ly.doc.constants.*;
import com.ly.doc.model.ApiConfig;
import com.ly.doc.model.ApiDataDictionary;
import com.ly.doc.model.DocJavaField;
import com.ly.doc.model.torna.EnumInfo;
import com.ly.doc.model.torna.Item;
import com.power.common.model.EnumDictionary;
import com.power.common.util.CollectionUtil;
import com.power.common.util.EnumUtil;
import com.power.common.util.StringUtil;
import com.ly.doc.builder.ProjectDocConfigBuilder;
import com.ly.doc.model.DocJavaField;
import com.ly.doc.model.torna.EnumInfo;
import com.ly.doc.model.torna.Item;
import com.thoughtworks.qdox.JavaProjectBuilder;
import com.thoughtworks.qdox.model.*;
import com.thoughtworks.qdox.model.expression.AnnotationValue;
Expand Down Expand Up @@ -98,7 +98,7 @@ private static List<DocJavaField> getFields(JavaClass cls1, int counter, Map<Str
return fieldList;
}
// ignore enum class
if (cls1.isEnum()){
if (cls1.isEnum()) {
return fieldList;
}
// ignore class in jdk
Expand Down Expand Up @@ -183,9 +183,9 @@ private static List<DocJavaField> getFields(JavaClass cls1, int counter, Map<Str
}
}
if (!cls1.isInterface()) {
Map<String,String> recordComments = new HashMap<>(0);
Map<String, String> recordComments = new HashMap<>(0);
if (cls1.isRecord()) {
recordComments = DocUtil.getRecordCommentsByTag(cls1,DocTags.PARAM);
recordComments = DocUtil.getRecordCommentsByTag(cls1, DocTags.PARAM);
}
for (JavaField javaField : cls1.getFields()) {
String fieldName = javaField.getName();
Expand Down Expand Up @@ -247,15 +247,20 @@ private static List<DocJavaField> getFields(JavaClass cls1, int counter, Map<Str
gicName = genericFieldTypeName;
}
}
// if the annotation use to String serialize
boolean isToString = javaField.getAnnotations().stream()
.anyMatch(annotation -> DocAnnotationConstants.SHORT_JSON_SERIALIZE.equals(annotation.getType().getSimpleName())
&& DocAnnotationConstants.TO_STRING_SERIALIZER_USING.equals(annotation.getNamedParameter("using")));
docJavaField.setComment(comment)
.setJavaField(javaField)
.setFullyQualifiedName(subTypeName)
.setGenericCanonicalName(gicName)
.setGenericFullyQualifiedName(fieldType.getGenericFullyQualifiedName())
.setFullyQualifiedName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY: subTypeName)
.setGenericCanonicalName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY : gicName)
.setGenericFullyQualifiedName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY: fieldType.getGenericFullyQualifiedName())
.setActualJavaType(actualType)
.setAnnotations(javaField.getAnnotations())
.setFieldName(fieldName)
.setDeclaringClassName(className);
.setDeclaringClassName(className)
.setTypeSimpleName(isToString ? DocGlobalConstants.JAVA_STRING_FULLY : javaField.getType().getSimpleName());
if (addedFields.containsKey(fieldName)) {
addedFields.remove(fieldName);
addedFields.put(fieldName, docJavaField);
Expand All @@ -276,7 +281,8 @@ private static List<DocJavaField> getFields(JavaClass cls1, int counter, Map<Str

/**
* Get Common for methods with the same signature from interfaces
* @param cls cls
*
* @param cls cls
* @param method method
* @return common
*/
Expand All @@ -286,11 +292,11 @@ public static String getSameSignatureMethodCommonFromInterface(JavaClass cls, Ja

for (JavaMethod sameSignatureMethod : methodsBySignature) {
if (sameSignatureMethod == method
|| sameSignatureMethod.getDeclaringClass() == null
|| !sameSignatureMethod.getDeclaringClass().isInterface()) {
|| sameSignatureMethod.getDeclaringClass() == null
|| !sameSignatureMethod.getDeclaringClass().isInterface()) {
continue;
}
if (sameSignatureMethod.getComment() != null){
if (sameSignatureMethod.getComment() != null) {
return sameSignatureMethod.getComment();
}
}
Expand Down Expand Up @@ -351,7 +357,7 @@ public static String getEnumParams(JavaClass javaClass) {
List<JavaField> javaFields = javaClass.getEnumConstants();
StringBuilder stringBuilder = new StringBuilder();
for (JavaField javaField : javaFields) {
//string comment
// string comment
String exception = javaField.getInitializationExpression();
stringBuilder.append(javaField.getName());
stringBuilder.append("(").append(exception).append(")").append("<br/>");
Expand Down Expand Up @@ -415,7 +421,7 @@ public static EnumInfo getEnumInfo(JavaClass javaClass, ProjectDocConfigBuilder
if (Objects.nonNull(javaClass.getTagByName(DocTags.IGNORE))) {
return null;
}
//todo support the field described by @see
// todo support the field described by @see

ApiConfig apiConfig = builder.getApiConfig();
ClassLoader classLoader = apiConfig.getClassLoader();
Expand Down
Loading