docs: public SuppressionInfo withExtendedSuppressions(
        Symbol sym,
        VisitorState state,
        Set<Class<? extends Annotation>> customSuppressionAnnosToLookFor) {
      boolean newInGeneratedCode = inGeneratedCode || isGenerated(sym, state);
      boolean anyModification = newInGeneratedCode != inGeneratedCode;
  
      /* Handle custom suppression annotations. */
      Set<Class<? extends Annotation>> newCustomSuppressions = null;
      for (Class<? extends Annotation> annotationType : customSuppressionAnnosToLookFor) {
        // Don't need to check already-suppressed annos
        if (customSuppressions.contains(annotationType)) {
          continue;
        }
        if (ASTHelpers.hasAnnotation(sym, annotationType, state)) {
          anyModification = true;
          if (newCustomSuppressions == null) {
            newCustomSuppressions = new HashSet<>(customSuppressions);
          }
          newCustomSuppressions.add(annotationType);
        }
      }
  
      /* Handle {@code @SuppressWarnings} and {@code @SuppressLint}. */
      Set<String> newSuppressions = null;
      // Iterate over annotations on this symbol, looking for SuppressWarnings
      for (Attribute.Compound attr : sym.getAnnotationMirrors()) {
        if ((attr.type.tsym == state.getSymtab().suppressWarningsType.tsym)
            || attr.type.tsym.getQualifiedName().contentEquals("android.annotation.SuppressLint")) {
          for (Pair<MethodSymbol, Attribute> value : attr.values) {
            if (value.fst.name.contentEquals("value")) {
              if (value.snd
                  instanceof Attribute.Array) { // SuppressWarnings/SuppressLint take an array
                for (Attribute suppress : ((Attribute.Array) value.snd).values) {
                  String suppressedWarning = (String) suppress.getValue();
                  if (!suppressWarningsStrings.contains(suppressedWarning)) {
                    anyModification = true;
                    if (newSuppressions == null) {
                      newSuppressions = new HashSet<>(suppressWarningsStrings);
                    }
                    newSuppressions.add(suppressedWarning);
                  }
                }
              } else {
                throw new RuntimeException(
                    "Expected SuppressWarnings/SuppressLint annotation to take array type");
              }
            }
          }
        }
      }
  
      // Since this is invoked every time we descend into a new node, let's save some garbage
      // by returning the same instance if there were no changes.
      if (!anyModification) {
        return this;
      }
  
      if (newCustomSuppressions == null) {
        newCustomSuppressions = customSuppressions;
      }
      if (newSuppressions == null) {
        newSuppressions = suppressWarningsStrings;
      }
      return new SuppressionInfo(newSuppressions, newCustomSuppressions, newInGeneratedCode);
    }