class DefaultRecursiveComparisonIntrospectionStrategy implements RecursiveComparisonIntrospectionStrategy {

  // use ConcurrentHashMap in case this strategy instance is used in a multi-thread context
  private final Map<Class<?>, Set<String>> fieldNamesPerClass = new ConcurrentHashMap<>();

  @Override
  public Set<String> getChildrenNodeNamesOf(Object node) {<FILL_FUNCTION_BODY>}

  @Override
  public Object getChildNodeValue(String childNodeName, Object instance) {
    return COMPARISON.getSimpleValue(childNodeName, instance);
  }
}

    if (node == null) return new HashSet<>();
    // Caches the names after getting them for efficiency, a node can be introspected multiple times for example if
    // it belongs to an unordered collection as all actual elements are compared to all expected elements.
    return fieldNamesPerClass.computeIfAbsent(node.getClass(), Objects::getFieldsNames);
  
<no_super_class>