docs: public static boolean implementsInterfaceOrSubclassOf(final ClassNode source, final ClassNode targetType) {
          if (source.isDerivedFrom(targetType) || source.implementsInterface(targetType)) return true;
          if (targetType instanceof WideningCategories.LowestUpperBoundClassNode) {
              WideningCategories.LowestUpperBoundClassNode lub = (WideningCategories.LowestUpperBoundClassNode) targetType;
              if (implementsInterfaceOrSubclassOf(source, lub.getSuperClass())) return true;
              for (ClassNode classNode : lub.getInterfaces()) {
                  if (source.implementsInterface(classNode)) return true;
              }
          }
          return false;
      }