private void visitMopMethodList(List<MethodNode> methods,boolean isThis,Set<MopKey> useOnlyIfDeclaredHereToo,List<String> orNameMentionedHere){
  HashMap<MopKey,MethodNode> mops=new HashMap<MopKey,MethodNode>();
  LinkedList<MethodNode> mopCalls=new LinkedList<MethodNode>();
  for (  MethodNode mn : methods) {
    if ((mn.getModifiers() & (ACC_ABSTRACT | ACC_BRIDGE)) != 0)     continue;
    if (mn.isStatic())     continue;
    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();
}

private void visitMopMethodList ( List < MethodNode > methods , boolean isThis , Set < MopKey > useOnlyIfDeclaredHereToo , List < String > orNameMentionedHere ) { HashMap < MopKey , MethodNode > mops = new HashMap < MopKey , MethodNode > ( ) ; LinkedList < MethodNode > mopCalls = new LinkedList < MethodNode > ( ) ; for ( MethodNode mn : methods ) { if ( ( mn . getModifiers ( ) & ( ACC_ABSTRACT | ACC_BRIDGE ) ) != 0 ) continue ; if ( mn . isStatic ( ) ) continue ; 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 ( ) ; }
filters a list of method for mop methods . for all methods that are no mop methods a mop method is created if the method is not public and the call would be a call on " this " ( isthis = = true ) . if the call is not on " this " , then the call is a call on " super " and all methods are used , unless they are already a mop method
