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

fix: https://github.com/smart-doc-group/smart-doc/issues/615 #621

Merged
merged 1 commit into from
Oct 10, 2023
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
## smart-doc版本

### 版本号:2.7.8
- 更新日期:
- 更新内容:
1. 修复Java 16+版本反射获取字段是jdk中的类时异常 [#615](https://github.com/smart-doc-group/smart-doc/issues/615)

### 版本号:2.7.7

- 更新日期: 2023-09-11
Expand Down
38 changes: 17 additions & 21 deletions src/main/java/com/ly/doc/utils/JavaClassUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,17 @@ private static List<DocJavaField> getFields(JavaClass cls1, int counter, Map<Str
List<DocJavaField> fieldList = new ArrayList<>();
if (Objects.isNull(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())
|| "ZonedDateTime".equals(cls1.getSimpleName())) {
}
// ignore enum class
if (cls1.isEnum()){
return fieldList;
}
// ignore class in jdk
String className = cls1.getFullyQualifiedName();
if (cls1.isInterface() &&
!JavaClassValidateUtil.isCollection(className) &&
!JavaClassValidateUtil.isMap(className)) {
if (JavaClassValidateUtil.isJdkClass(className)) {
return fieldList;
}
if (cls1.isInterface()) {
List<JavaMethod> methods = cls1.getMethods();
for (JavaMethod javaMethod : methods) {
String methodName = javaMethod.getName();
Expand Down Expand Up @@ -140,22 +140,18 @@ private static List<DocJavaField> getFields(JavaClass cls1, int counter, Map<Str
addedFields.put(methodName, docJavaField);
}
}
// ignore enum parent class
if (actualJavaTypes == null) {
actualJavaTypes = new HashMap<>(10);

JavaClass parentClass = cls1.getSuperJavaClass();
if (Objects.nonNull(parentClass)) {
getFields(parentClass, counter, addedFields, actualJavaTypes, classLoader);
}
if (!cls1.isEnum()) {
JavaClass parentClass = cls1.getSuperJavaClass();
if (Objects.nonNull(parentClass) && !"java.lang.Object".equals(parentClass.getName())) {
getFields(parentClass, counter, addedFields, actualJavaTypes, classLoader);
}

List<JavaType> implClasses = cls1.getImplements();
for (JavaType type : implClasses) {
JavaClass javaClass = (JavaClass) type;
getFields(javaClass, counter, addedFields, actualJavaTypes, classLoader);
}
List<JavaType> implClasses = cls1.getImplements();
for (JavaType type : implClasses) {
JavaClass javaClass = (JavaClass) type;
getFields(javaClass, counter, addedFields, actualJavaTypes, classLoader);
}

actualJavaTypes.putAll(getActualTypesMap(cls1));
List<JavaMethod> javaMethods = cls1.getMethods();
for (JavaMethod method : javaMethods) {
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/ly/doc/utils/JavaClassValidateUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,16 @@ public static boolean isPrimitive(String type0) {
}
}

/**
* validate jdk class
*
* @param type java typeName
* @return boolean
*/
public static boolean isJdkClass(String type) {
return type.startsWith("java") || type.startsWith("javax") || type.startsWith("com.sum");
}

/**
* validate java collection
*
Expand Down