{"record":{"id":"a316226c79d2c501","repo":"apache/beam","slug":"iterable-at-position-i-was-null","errorCode":null,"errorMessage":"Iterable at position ${i} was null.","messagePattern":"Iterable at position (.+?) was null\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/fn/stream/PrefetchableIterables.java","lineNumber":117,"sourceCode":"      return (PrefetchableIterable<T>) iterable;\n    }\n    return new Default<T>() {\n      @Override\n      public PrefetchableIterator<T> createIterator() {\n        return PrefetchableIterators.maybePrefetchable(iterable.iterator());\n      }\n    };\n  }\n\n  /**\n   * Concatentates the {@link Iterable}s.\n   *\n   * <p>See {@link PrefetchableIterators#concat} for additional details.\n   */\n  public static <T> PrefetchableIterable<T> concat(Iterable<T>... iterables) {\n    for (int i = 0; i < iterables.length; ++i) {\n      if (iterables[i] == null) {\n        throw new IllegalArgumentException(\"Iterable at position \" + i + \" was null.\");\n      }\n    }\n    if (iterables.length == 0) {\n      return emptyIterable();\n    } else if (iterables.length == 1) {\n      return maybePrefetchable(iterables[0]);\n    }\n    return new Default<T>() {\n      @SuppressWarnings(\"methodref.receiver\")\n      @Override\n      public PrefetchableIterator<T> createIterator() {\n        return PrefetchableIterators.concatIterators(\n            FluentIterable.from(iterables).transform(Iterable::iterator).iterator());\n      }\n    };\n  }\n\n  /** Limits the {@link PrefetchableIterable} to the specified number of elements. */","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/fn/stream/PrefetchableIterables.java#L99-L135","documentation":"PrefetchableIterables.concat validates that every varargs iterable is non-null before composing them into one PrefetchableIterable. A null element would cause a NullPointerException later during iteration, so the library fails fast with this IllegalArgumentException identifying the offending position.","triggerScenarios":"Calling PrefetchableIterables.concat(iterableA, null, iterableB) or passing an array of iterables where any element is null.","commonSituations":"Building a combined iterable from optional sources where some sources were absent (map lookup or cache miss returned null); refactoring from Arrays.asList which tolerated nulls until iteration.","solutions":["Filter null entries from the array/collection before concatenating","Substitute an empty iterable for absent sources","Fix the upstream producer so it returns an empty iterable instead of null","When all inputs may be missing, call concat() with no args (returns emptyIterable)"],"exampleFix":"// before\nPrefetchableIterable<T> it = PrefetchableIterables.concat(a, maybeNull, b);\n// after\nPrefetchableIterable<T> it = PrefetchableIterables.concat(\n    a,\n    maybeNull != null ? maybeNull : PrefetchableIterables.<T>emptyIterable(),\n    b);","handlingStrategy":"type-guard","validationCode":"for (int i = 0; i < iterables.length; i++) {\n  java.util.Objects.requireNonNull(iterables[i], \"iterable at \" + i);\n}","typeGuard":"static <T> Iterable<T> orEmpty(Iterable<T> it) {\n  return it != null ? it : PrefetchableIterables.<T>emptyIterable();\n}","tryCatchPattern":"try {\n  return PrefetchableIterables.concat(iterables);\n} catch (IllegalArgumentException e) {\n  return PrefetchableIterables.emptyIterable();\n}","preventionTips":["Never return null iterables from producer methods; return empty iterables","Filter nulls from collections before concatenation","Use @Nullable annotations on iterable-producing APIs"],"tags":["java","null","argument-validation","iterables"],"backgroundTag":"null-argument","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}