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));
}