for #75
This commit is contained in:
parent
e48201ab83
commit
a2f9cce8f9
|
@ -0,0 +1,132 @@
|
|||
|
||||
|
||||
```java
|
||||
/**
|
||||
* Get fields
|
||||
*
|
||||
* @param cls1 The JavaClass object
|
||||
* @param counter Recursive counter
|
||||
* @param addedFields added fields,Field deduplication
|
||||
* @return list of JavaField
|
||||
*/
|
||||
public static List<DocJavaField> getFields(JavaClass cls1, int counter, HashMap<String, DocJavaField> addedFields) {
|
||||
List<DocJavaField> fieldList = new ArrayList<>();
|
||||
if (null == cls1) {
|
||||
return fieldList;
|
||||
} else if ("Object".equals(cls1.getSimpleName()) || "Timestamp".equals(cls1.getSimpleName()) ||
|
||||
"Date".equals(cls1.getSimpleName()) || "Locale".equals(cls1.getSimpleName())
|
||||
|| "ClassLoader".equals(cls1.getSimpleName()) || JavaClassValidateUtil.isMap(cls1.getFullyQualifiedName())
|
||||
|| cls1.isEnum() || "Serializable".equals(cls1.getSimpleName())) {
|
||||
return fieldList;
|
||||
} else {
|
||||
String className = cls1.getFullyQualifiedName();
|
||||
if (cls1.isInterface() &&
|
||||
!JavaClassValidateUtil.isCollection(className) &&
|
||||
!JavaClassValidateUtil.isMap(className)) {
|
||||
List<JavaMethod> methods = cls1.getMethods();
|
||||
for (JavaMethod javaMethod : methods) {
|
||||
String methodName = javaMethod.getName();
|
||||
int paramSize = javaMethod.getParameters().size();
|
||||
boolean enable = false;
|
||||
if (methodName.startsWith("get") && !"get".equals(methodName) && paramSize == 0) {
|
||||
methodName = StringUtil.firstToLowerCase(methodName.substring(3));
|
||||
enable = true;
|
||||
} else if (methodName.startsWith("is") && !"is".equals(methodName) && paramSize == 0) {
|
||||
methodName = StringUtil.firstToLowerCase(methodName.substring(2));
|
||||
enable = true;
|
||||
}
|
||||
if (!enable || addedFields.containsKey(methodName)) {
|
||||
continue;
|
||||
}
|
||||
String comment = javaMethod.getComment();
|
||||
JavaField javaField = new DefaultJavaField(javaMethod.getReturns(), methodName);
|
||||
DocJavaField docJavaField = DocJavaField.builder()
|
||||
.setJavaField(javaField)
|
||||
.setComment(comment)
|
||||
.setDocletTags(javaMethod.getTags())
|
||||
.setAnnotations(javaMethod.getAnnotations())
|
||||
.setFullyQualifiedName(javaField.getType().getFullyQualifiedName())
|
||||
.setGenericCanonicalName(javaField.getType().getGenericCanonicalName());
|
||||
addedFields.put(methodName, docJavaField);
|
||||
}
|
||||
}
|
||||
// ignore enum parent class
|
||||
if (!cls1.isEnum()) {
|
||||
JavaClass parentClass = cls1.getSuperJavaClass();
|
||||
getFields(parentClass, counter, addedFields);
|
||||
List<JavaType> implClasses = cls1.getImplements();
|
||||
for (JavaType type : implClasses) {
|
||||
JavaClass javaClass = (JavaClass) type;
|
||||
getFields(javaClass, counter, addedFields);
|
||||
}
|
||||
}
|
||||
Map<String, JavaType> actualJavaTypes = getActualTypesMap(cls1);
|
||||
List<JavaMethod> javaMethods = cls1.getMethods();
|
||||
for (JavaMethod method : javaMethods) {
|
||||
String methodName = method.getName();
|
||||
int paramSize = method.getParameters().size();
|
||||
if (methodName.startsWith("get") && !"get".equals(methodName) && paramSize == 0) {
|
||||
methodName = StringUtil.firstToLowerCase(methodName.substring(3));
|
||||
} else if (methodName.startsWith("is") && !"is".equals(methodName) && paramSize == 0) {
|
||||
methodName = StringUtil.firstToLowerCase(methodName.substring(2));
|
||||
}
|
||||
if (addedFields.containsKey(methodName)) {
|
||||
String comment = method.getComment();
|
||||
DocJavaField docJavaField = addedFields.get(methodName);
|
||||
docJavaField.setAnnotations(method.getAnnotations());
|
||||
docJavaField.setComment(comment);
|
||||
addedFields.put(methodName, docJavaField);
|
||||
}
|
||||
}
|
||||
for (JavaField javaField : cls1.getFields()) {
|
||||
String fieldName = javaField.getName();
|
||||
DocJavaField docJavaField = DocJavaField.builder();
|
||||
boolean typeChecked = false;
|
||||
String gicName = javaField.getType().getGenericCanonicalName();
|
||||
String subTypeName = javaField.getType().getFullyQualifiedName();
|
||||
String actualType = null;
|
||||
if (JavaClassValidateUtil.isCollection(subTypeName) &&
|
||||
!JavaClassValidateUtil.isCollection(gicName)) {
|
||||
String[] gNameArr = DocClassUtil.getSimpleGicName(gicName);
|
||||
actualType = JavaClassUtil.getClassSimpleName(gNameArr[0]);
|
||||
docJavaField.setArray(true);
|
||||
typeChecked = true;
|
||||
}
|
||||
if (JavaClassValidateUtil.isPrimitive(subTypeName) && !typeChecked) {
|
||||
docJavaField.setPrimitive(true);
|
||||
typeChecked = true;
|
||||
}
|
||||
if (JavaClassValidateUtil.isFile(subTypeName) && !typeChecked) {
|
||||
docJavaField.setFile(true);
|
||||
typeChecked = true;
|
||||
}
|
||||
if (javaField.getType().isEnum() && !typeChecked) {
|
||||
docJavaField.setEnum(true);
|
||||
}
|
||||
for (Map.Entry<String, JavaType> entry : actualJavaTypes.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
JavaType value = entry.getValue();
|
||||
if (gicName.contains(key)) {
|
||||
subTypeName = subTypeName.replaceAll(key, value.getFullyQualifiedName());
|
||||
gicName = gicName.replaceAll(key, value.getGenericCanonicalName());
|
||||
actualType = value.getFullyQualifiedName();
|
||||
}
|
||||
}
|
||||
docJavaField.setComment(javaField.getComment())
|
||||
.setJavaField(javaField).setFullyQualifiedName(subTypeName)
|
||||
.setGenericCanonicalName(gicName).setActualJavaType(actualType)
|
||||
.setAnnotations(javaField.getAnnotations());
|
||||
if (addedFields.containsKey(fieldName)) {
|
||||
addedFields.put(fieldName, docJavaField);
|
||||
continue;
|
||||
}
|
||||
addedFields.put(fieldName, docJavaField);
|
||||
}
|
||||
List<DocJavaField> parentFieldList = addedFields.values().stream()
|
||||
.filter(v -> Objects.nonNull(v)).collect(Collectors.toList());
|
||||
fieldList.addAll(parentFieldList);
|
||||
}
|
||||
return fieldList;
|
||||
}
|
||||
|
||||
```
|
Loading…
Reference in New Issue