in nullaway/src/main/java/com/uber/nullaway/handlers/RestrictiveAnnotationHandler.java [108:144]
public MethodParameterNullness onOverrideMethodInvocationParametersNullability(
Context context,
Symbol.MethodSymbol methodSymbol,
boolean isAnnotated,
MethodParameterNullness argumentNullness) {
if (isAnnotated) {
// We ignore isAnnotated code here, since annotations in code considered isAnnotated are
// already handled by NullAway's core algorithm.
return argumentNullness;
}
for (int i = 0; i < methodSymbol.getParameters().size(); ++i) {
boolean isVarargsParam =
methodSymbol.isVarArgs() && i == methodSymbol.getParameters().size() - 1;
Symbol.VarSymbol varargsParamSymbol =
isVarargsParam ? methodSymbol.getParameters().get(i) : null;
if (Nullness.paramHasNonNullAnnotation(methodSymbol, i, config)) {
if (varargsParamSymbol != null) {
// Special handling: ignore org.jetbrains.annotations.NotNull on varargs parameters
// to handle kotlinc generated jars (see #720)
boolean jetBrainsNotNullAnnotated =
NullabilityUtil.hasJetBrainsNotNullDeclarationAnnotation(varargsParamSymbol);
if (!jetBrainsNotNullAnnotated) {
argumentNullness.setParameterNullness(i, Nullness.NONNULL);
}
} else {
argumentNullness.setParameterNullness(i, Nullness.NONNULL);
}
} else if (Nullness.paramHasNullableAnnotation(methodSymbol, i, config)) {
argumentNullness.setParameterNullness(i, Nullness.NULLABLE);
}
if (varargsParamSymbol != null
&& Nullness.varargsArrayIsNonNull(varargsParamSymbol, config)) {
argumentNullness.setVarargsArrayNullness(Nullness.NONNULL);
}
}
return argumentNullness;
}