docs: public static IType findAnonymous(IType parentType, String name) {
          for (int i = 0; i < name.length(); i++) {
              if (!Character.isDigit(name.charAt(i))) {
                  return null;
              }
          }
  
          // -1 because compiler starts generated classes always with 1
          int anonIndex = Integer.parseInt(name) - 1;
          if (anonIndex < 0) {
              return null;
          }
  
          List<IType> list = new ArrayList<>();
          /*
           * For JDK >= 1.5 in Eclipse 3.1+ the naming schema for nested anonymous
           * classes was changed from A$1, A$2, A$3, A$4, ..., A$n to A$1, A$1$1,
           * A$1$2, A$1$2$1, ..., A$2, A$2$1, A$2$2, ..., A$x$y
           */
          boolean allowNested = !is50OrHigher(parentType);
  
          IParent declaringType;
          if (allowNested) {
              declaringType = (IType) getLastAncestor(parentType, IJavaElement.TYPE);
          } else {
              declaringType = parentType.getDeclaringType();
          }
          if (declaringType == null) {
              declaringType = parentType;
          }
  
          try {
              collectAllAnonymous(list, declaringType, allowNested);
          } catch (JavaModelException e) {
              FindbugsPlugin.getDefault().logException(e, "collectAllAnonymous() failed");
          }
  
          if (list.size() <= anonIndex) {
              return null;
          }
          sortAnonymous(list, parentType);
  
          return list.get(anonIndex);
      }