Skip to content

Commit 31c99b3

Browse files
committed
changes report for #3065
1 parent 7db34e2 commit 31c99b3

File tree

3 files changed

+56
-9
lines changed

3 files changed

+56
-9
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,10 @@ protected OpenAPI getOpenApi(String serverBaseUrl, Locale locale) {
419419
return openAPI;
420420
}
421421
finally {
422+
JavadocProvider javadocProvider = operationParser.getJavadocProvider();
423+
if (javadocProvider != null) {
424+
javadocProvider.clean();
425+
}
422426
this.reentrantLock.unlock();
423427
}
424428
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/JavadocProvider.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,9 @@ public interface JavadocProvider {
102102
* @return the first sentence based on javadoc guidelines
103103
*/
104104
String getFirstSentence(String text);
105+
106+
/**
107+
* Clean the temp resources.
108+
*/
109+
default void clean() {}
105110
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/SpringDocJavadocProvider.java

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828

2929
import java.lang.reflect.Field;
3030
import java.lang.reflect.Method;
31-
import java.util.List;
32-
import java.util.Map;
31+
import java.util.*;
3332
import java.util.stream.Collectors;
3433

3534
import com.github.therapi.runtimejavadoc.ClassJavadoc;
@@ -56,6 +55,11 @@ public class SpringDocJavadocProvider implements JavadocProvider {
5655
*/
5756
private final CommentFormatter formatter = new CommentFormatter();
5857

58+
/**
59+
* The Class javadoc cache.
60+
*/
61+
private final Map<Class<?>, ClassJavadoc> classJavadocCache = new HashMap<>();
62+
5963

6064
/**
6165
* Gets class description.
@@ -65,7 +69,7 @@ public class SpringDocJavadocProvider implements JavadocProvider {
6569
*/
6670
@Override
6771
public String getClassJavadoc(Class<?> cl) {
68-
ClassJavadoc classJavadoc = RuntimeJavadoc.getJavadoc(cl);
72+
ClassJavadoc classJavadoc = getJavadoc(cl);
6973
return formatter.format(classJavadoc.getComment());
7074
}
7175

@@ -77,7 +81,7 @@ public String getClassJavadoc(Class<?> cl) {
7781
*/
7882
@Override
7983
public Map<String, String> getRecordClassParamJavadoc(Class<?> cl) {
80-
ClassJavadoc classJavadoc = RuntimeJavadoc.getJavadoc(cl);
84+
ClassJavadoc classJavadoc = getJavadoc(cl);
8185
return classJavadoc.getRecordComponents().stream()
8286
.collect(Collectors.toMap(ParamJavadoc::getName, recordClass -> formatter.format(recordClass.getComment())));
8387
}
@@ -90,7 +94,7 @@ public Map<String, String> getRecordClassParamJavadoc(Class<?> cl) {
9094
*/
9195
@Override
9296
public String getMethodJavadocDescription(Method method) {
93-
MethodJavadoc methodJavadoc = RuntimeJavadoc.getJavadoc(method);
97+
MethodJavadoc methodJavadoc = getJavadoc(method);
9498
return formatter.format(methodJavadoc.getComment());
9599
}
96100

@@ -102,7 +106,7 @@ public String getMethodJavadocDescription(Method method) {
102106
*/
103107
@Override
104108
public String getMethodJavadocReturn(Method method) {
105-
MethodJavadoc methodJavadoc = RuntimeJavadoc.getJavadoc(method);
109+
MethodJavadoc methodJavadoc = getJavadoc(method);
106110
return formatter.format(methodJavadoc.getReturns());
107111
}
108112

@@ -113,7 +117,7 @@ public String getMethodJavadocReturn(Method method) {
113117
* @return the method throws (name-description map)
114118
*/
115119
public Map<String, String> getMethodJavadocThrows(Method method) {
116-
return RuntimeJavadoc.getJavadoc(method)
120+
return getJavadoc(method)
117121
.getThrows()
118122
.stream()
119123
.collect(toMap(ThrowsJavadoc::getName, javadoc -> formatter.format(javadoc.getComment())));
@@ -128,7 +132,7 @@ public Map<String, String> getMethodJavadocThrows(Method method) {
128132
*/
129133
@Override
130134
public String getParamJavadoc(Method method, String name) {
131-
MethodJavadoc methodJavadoc = RuntimeJavadoc.getJavadoc(method);
135+
MethodJavadoc methodJavadoc = getJavadoc(method);
132136
List<ParamJavadoc> paramsDoc = methodJavadoc.getParams();
133137
return paramsDoc.stream().filter(paramJavadoc1 -> name.equals(paramJavadoc1.getName())).findAny()
134138
.map(paramJavadoc1 -> formatter.format(paramJavadoc1.getComment())).orElse(null);
@@ -142,7 +146,7 @@ public String getParamJavadoc(Method method, String name) {
142146
*/
143147
@Override
144148
public String getFieldJavadoc(Field field) {
145-
FieldJavadoc fieldJavadoc = RuntimeJavadoc.getJavadoc(field);
149+
FieldJavadoc fieldJavadoc = getJavadoc(field);
146150
return formatter.format(fieldJavadoc.getComment());
147151
}
148152

@@ -173,4 +177,38 @@ public String getFirstSentence(String text) {
173177
}
174178
return text;
175179
}
180+
181+
private ClassJavadoc getJavadoc(Class<?> cl) {
182+
ClassJavadoc classJavadoc = classJavadocCache.get(cl);
183+
if (classJavadoc != null) {
184+
return classJavadoc;
185+
}
186+
classJavadoc = RuntimeJavadoc.getJavadoc(cl);
187+
classJavadocCache.put(cl, classJavadoc);
188+
return classJavadoc;
189+
}
190+
191+
private MethodJavadoc getJavadoc(Method method) {
192+
ClassJavadoc classJavadoc = getJavadoc(method.getDeclaringClass());
193+
List<String> paramTypes = Arrays.stream(method.getParameterTypes())
194+
.map(Class::getCanonicalName)
195+
.toList();
196+
return classJavadoc.getMethods()
197+
.stream()
198+
.filter(it -> Objects.equals(method.getName(), it.getName()) && Objects.equals(paramTypes, it.getParamTypes()))
199+
.findFirst().orElseGet(() -> MethodJavadoc.createEmpty(method));
200+
}
201+
202+
private FieldJavadoc getJavadoc(Field field) {
203+
ClassJavadoc classJavadoc = getJavadoc(field.getDeclaringClass());
204+
return classJavadoc.getFields()
205+
.stream()
206+
.filter(it -> Objects.equals(field.getName(), it.getName()))
207+
.findFirst().orElseGet(() -> FieldJavadoc.createEmpty(field.getName()));
208+
}
209+
210+
@Override
211+
public void clean() {
212+
classJavadocCache.clear();
213+
}
176214
}

0 commit comments

Comments
 (0)