src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java Wed Oct 25 18:12:15 2017 -0700
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/VisibleMemberMap.java Wed Oct 25 21:19:38 2017 -0700
@@ -272,9 +272,20 @@
return result;
}
+ // Cache to improve performance
+ private HashMap<ExecutableElement, Boolean> overridenMethodCache = new HashMap<>();
+
private boolean hasOverridden(ExecutableElement method) {
+ return overridenMethodCache.computeIfAbsent(method, m -> hasOverriddenCompute(m));
+ }
+
+ private boolean hasOverriddenCompute(ExecutableElement method) {
+ if (kind != Kind.METHODS) {
+ throw new AssertionError("Unexpected kind: " + kind);
+ }
for (TypeElement t : visibleClasses) {
- for (ExecutableElement inheritedMethod : ElementFilter.methodsIn(classMap.get(t).members)) {
+ for (Element member : classMap.get(t).members) {
+ ExecutableElement inheritedMethod = (ExecutableElement)member;
if (utils.elementUtils.overrides(method, inheritedMethod, t)) {
return true;
}