docs: private static int getAnonCompilePriority(IJavaElement elt, IJavaElement firstAncestor, IJavaElement topAncestor,
              boolean is50OrHigher) {
          if (is50OrHigher) {
              return getAnonCompilePriority50(elt, firstAncestor, topAncestor);
          }
  
          IJavaElement firstNonAnon = getFirstNonAnonymous(elt, topAncestor);
  
          // get rid of children from local types
          if (topAncestor != firstNonAnon && isLocal(firstNonAnon)) {
              return 5; // local anon. types have same prio as anon. from regular
                        // code
          }
  
          IJavaElement initBlock = getLastAncestor(elt, IJavaElement.INITIALIZER);
          // test is for anon. classes from initializer blocks
          if (initBlock != null) {
              if (isAnyParentLocal(firstAncestor, topAncestor)) {
                  return 5; // init blocks from local types have same prio as
                            // regular
              }
              if (firstAncestor == topAncestor) {
                  return 10; // instance init from top level type has top prio
              }
              if ( /* firstNonAnon != topAncestor && */!isStatic((IMember) firstNonAnon)) {
                  return 8; // init blocks from non static types have top 2 prio
              }
              return 7; // init blocks from static classes
          }
  
          if (firstNonAnon != topAncestor) {
              if (!isStatic((IMember) firstNonAnon)) {
                  return 7; // children of member types first
              }
              return 6; // children of static types
          }
  
          // anon. types from "regular" code
          return 5;
      }