protected void validateOverridingRules()

in nullaway/src/main/java/com/uber/nullaway/handlers/contract/fieldcontract/RequiresNonNullHandler.java [88:128]


  protected void validateOverridingRules(
      Set<String> overridingFieldNames,
      NullAway analysis,
      VisitorState state,
      MethodTree tree,
      Symbol.MethodSymbol overriddenMethod) {
    if (overridingFieldNames == null) {
      return;
    }
    Set<String> overriddenFieldNames = getAnnotationValueArray(overriddenMethod, annotName, false);
    if (overriddenFieldNames == null) {
      overriddenFieldNames = Collections.emptySet();
    }
    overriddenFieldNames = ContractUtils.trimReceivers(overriddenFieldNames);
    if (overriddenFieldNames.containsAll(overridingFieldNames)) {
      return;
    }
    overridingFieldNames.removeAll(overriddenFieldNames);
    StringBuilder errorMessage = new StringBuilder();
    errorMessage.append(
        "precondition inheritance is violated, method in child class cannot have a stricter precondition than its closest overridden method, adding @requiresNonNull for fields [");
    Iterator<String> iterator = overriddenFieldNames.iterator();
    while (iterator.hasNext()) {
      errorMessage.append(iterator.next());
      if (iterator.hasNext()) {
        errorMessage.append(", ");
      }
    }
    errorMessage.append("] makes this method precondition stricter");

    state.reportMatch(
        analysis
            .getErrorBuilder()
            .createErrorDescription(
                new ErrorMessage(
                    ErrorMessage.MessageTypes.WRONG_OVERRIDE_PRECONDITION, errorMessage.toString()),
                tree,
                analysis.buildDescription(tree),
                state,
                null));
  }