@Override
  public @Nullable NullabilityAnnotationInfo getNullabilityByContainerAnnotation(@NotNull PsiAnnotation anno,
                                                                                 @NotNull PsiElement context,
                                                                                 PsiAnnotation.TargetType @NotNull [] types,
                                                                                 boolean superPackage) {
    if (superPackage) return null;
    if (anno.hasQualifiedName(DEFAULT_NOT_NULL)) {
      PsiAnnotationMemberValue value = anno.findAttributeValue(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME);
      String[] targets = DEFAULT_LOCATIONS;
      if (value instanceof PsiArrayInitializerMemberValue) {
        targets = StreamEx.of(((PsiArrayInitializerMemberValue)value).getInitializers())
          .select(PsiReferenceExpression.class)
          .map(PsiReferenceExpression::getReferenceName)
          .nonNull()
          .toArray(String[]::new);
      }
      else if (value instanceof PsiLiteralExpression && Boolean.FALSE.equals(((PsiLiteralExpression)value).getValue())) {
        targets = ArrayUtil.EMPTY_STRING_ARRAY;
      }
      boolean targetApplies = StreamEx.of(targets).map(TARGET_MAP::get).nonNull()
        .anyMatch(loc -> loc == PsiAnnotation.TargetType.TYPE_USE ? types.length == 1 && types[0] == loc : ArrayUtil.contains(loc, types));
      return new NullabilityAnnotationInfo(anno, targetApplies ? Nullability.NOT_NULL : Nullability.UNKNOWN, true);
    }
    return null;
  }
@Override
  public @Nullable NullabilityAnnotationInfo getNullabilityByContainerAnnotation(@NotNull PsiAnnotation anno,
                                                                                 @NotNull PsiElement context,
                                                                                 PsiAnnotation.TargetType @NotNull [] types,
                                                                                 boolean superPackage)