docs: static void extractGenericsConnections(Map<GenericsTypeName, GenericsType> connections, ClassNode type, ClassNode target) {
          if (target == null || type == target || !isUsingGenericsOrIsArrayUsingGenerics(target)) return;
          if (type == null || type == UNKNOWN_PARAMETER_TYPE) return;
          if (type.isArray() && target.isArray()) {
              extractGenericsConnections(connections, type.getComponentType(), target.getComponentType());
          } else if (target.isGenericsPlaceHolder() || type.equals(target) || !implementsInterfaceOrIsSubclassOf(type, target)) {
              // structural match route
              if (target.isGenericsPlaceHolder()) {
                  connections.put(new GenericsTypeName(target.getGenericsTypes()[0].getName()), new GenericsType(type));
              } else {
                  extractGenericsConnections(connections, type.getGenericsTypes(), target.getGenericsTypes());
              }
          } else {
              // have first to find matching super class or interface
              ClassNode superClass = getSuperClass(type, target);
  
              if (superClass != null) {
                  ClassNode corrected = getCorrectedClassNode(type, superClass, true);
                  extractGenericsConnections(connections, corrected, target);
              } else {
                  // if we reach here, we have an unhandled case 
                  throw new GroovyBugError("The type " + type + " seems not to normally extend " + target + ". Sorry, I cannot handle this.");
              }
          }
      }