Я обнаружил эту проблему на трекере проблем Checker Framework: https://github.com/typetools/checker-framework/issues/1307
Объясняет запрос «улучшения» для добавления @Repeatable
к следующим аннотациям CF:
> @DefaultQualifier -- DONE
> @EnsuresKeyFor
> @EnsuresKeyForIf
> @EnsuresLockHeldIf
> @EnsuresLTLengthOf
> @EnsuresLTLengthOfIf
> @EnsuresMinLenIf
> @EnsuresNonNullIf
> @EnsuresQualifier -- DONE
> @EnsuresQualifierIf -- DONE
> @FieldInvariant
> @GuardSatisfied
> @HasSubsequence
> @MethodVal
> @MinLenFieldInvariant
> @RequiresQualifier -- DONE
> @SubstringIndexFor
И обсуждение содержит обходной путь, поскольку EnsuresQualifiersIf
уже повторяется:
@EnsuresQualifiersIf({
@EnsuresQualifierIf(result=true, qualifier=NonNull.class, expression="getFoo()"),
@EnsuresQualifierIf(result=false, qualifier=NonNull.class, expression="getBar()")
})
boolean hasFoo();
И в моем случае это получается:
@EnsuresQualifiersIf({
@EnsuresQualifierIf(result=true, qualifier=NonNull.class, expression="getFieldNames()"),
@EnsuresQualifierIf(result=true, qualifier=NonNull.class, expression="getFieldName(i)")
})
public boolean hasFieldNames() {
return fFieldNames != null;
}