docs: private void visitMopMethodList(List<MethodNode> methods, boolean isThis, Set<MopKey> useOnlyIfDeclaredHereToo, List<String> orNameMentionedHere) {
          Map<MopKey, MethodNode> mops = new HashMap<MopKey, MethodNode>();
          LinkedList<MethodNode> mopCalls = new LinkedList<MethodNode>();
          for (MethodNode mn : methods) {
              // mop methods are helper for this and super calls and do direct calls
              // to the target methods. Such a method cannot be abstract or a bridge
              if ((mn.getModifiers() & (ACC_ABSTRACT | ACC_BRIDGE)) != 0) continue;
              if (mn.isStatic()) continue;
              // no this$ methods for non-private isThis=true
              // super$ method for non-private isThis=false
              // --> results in XOR
              boolean isPrivate = Modifier.isPrivate(mn.getModifiers());
              if (isThis ^ isPrivate) continue;
              String methodName = mn.getName();
              if (isMopMethod(methodName)) {
                  mops.put(new MopKey(methodName, mn.getParameters()), mn);
                  continue;
              }
              if (methodName.startsWith("<")) continue;
              if (!useOnlyIfDeclaredHereToo.contains(new MopKey(methodName, mn.getParameters())) &&
                  !orNameMentionedHere.contains(methodName))
              {
                  continue;
              }
              String name = getMopMethodName(mn, isThis);
              MopKey key = new MopKey(name, mn.getParameters());
              if (mops.containsKey(key)) continue;
              mops.put(key, mn);
              mopCalls.add(mn);
          }
          generateMopCalls(mopCalls, isThis);
          mopCalls.clear();
          mops.clear();
      }