docs: public static <A extends Result, B extends VisualizationItem> void findNewResultVis(VisualizerContext context, Object start, Class<? super A> type1, Class<? super B> type2, BiConsumer<A, B> handler) {
      final Hierarchy<Object> hier = context.getVisHierarchy();
      // Search start in first hierarchy:
      if(start instanceof Result) {
        for(It<A> it1 = context.getHierarchy().iterDescendantsSelf((Result) start).filter(type1); it1.valid(); it1.advance()) {
          final A result = it1.get();
          // Find descendant results in result hierarchy:
          for(It<Result> it3 = context.getHierarchy().iterDescendantsSelf(result); it3.valid(); it3.advance()) {
            // Find descendant in visualization hierarchy:
            for(It<B> it2 = hier.iterDescendantsSelf(it3.get()).filter(type2); it2.valid(); it2.advance()) {
              handler.accept(result, it2.get());
            }
          }
        }
      }
      // Search start in second hierarchy:
      if(start instanceof VisualizationItem) {
        for(It<B> it2 = hier.iterDescendantsSelf(start).filter(type2); it2.valid(); it2.advance()) {
          final B vis = it2.get();
          // Find ancestor result in visualization hierarchy:
          for(It<Result> it3 = hier.iterAncestorsSelf(vis).filter(Result.class); it3.valid(); it3.advance()) {
            // Find ancestor in result hierarchy:
            for(It<A> it1 = context.getHierarchy().iterAncestorsSelf(it3.get()).filter(type1); it1.valid(); it1.advance()) {
              handler.accept(it1.get(), vis);
            }
          }
        }
      }
    }