{"record":{"id":"1f9424faee099cb4","repo":"google/gson","slug":"element-must-be-non-null","errorCode":null,"errorMessage":"Element must be non-null","messagePattern":"Element must be non-null","errorType":"exception","errorClass":"NullPointerException","httpStatus":null,"severity":"error","filePath":"gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java","lineNumber":54,"sourceCode":"\n  @SuppressWarnings(\"NonApiType\")\n  public NonNullElementWrapperList(ArrayList<E> delegate) {\n    this.delegate = Objects.requireNonNull(delegate);\n  }\n\n  @Override\n  public E get(int index) {\n    return delegate.get(index);\n  }\n\n  @Override\n  public int size() {\n    return delegate.size();\n  }\n\n  private E nonNull(E element) {\n    if (element == null) {\n      throw new NullPointerException(\"Element must be non-null\");\n    }\n    return element;\n  }\n\n  @Override\n  public E set(int index, E element) {\n    return delegate.set(index, nonNull(element));\n  }\n\n  @Override\n  public void add(int index, E element) {\n    delegate.add(index, nonNull(element));\n  }\n\n  @Override\n  public E remove(int index) {\n    return delegate.remove(index);\n  }","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/google/gson/blob/310ac341f2f92a454b229bf21f70d2d18b2b6db7/gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java#L36-L72","documentation":"NonNullElementWrapperList is a List wrapper that rejects null elements on mutating operations (set/add). Its nonNull() helper throws NullPointerException('Element must be non-null') when a null is passed (NonNullElementWrapperList.java:53). Read-only query methods like contains/indexOf deliberately permit null arguments.","triggerScenarios":"Calling add(index, null) or set(index, null) on a NonNullElementWrapperList; building such a list from a source that contains nulls via addAll with a null element.","commonSituations":"Deserializing JSON arrays that include null elements and routing them through a non-null wrapper list; converting between list types where the source permits nulls; legacy code adding optional/sentinel nulls.","solutions":["Filter nulls out of the source collection before adding: list.addAll(src.stream().filter(Objects::nonNull).toList()).","Replace nulls with a sentinel object if absence must be represented positionally.","If nulls are valid, do not use NonNullElementWrapperList; use the underlying ArrayList directly."],"exampleFix":"// before\nwrappedList.add(index, possiblyNull);\n// after\nif (possiblyNull != null) wrappedList.add(index, possiblyNull);","handlingStrategy":"validation","validationCode":"if (element == null) throw new IllegalArgumentException(\"null element not allowed\"); list.add(index, element);","typeGuard":"static <E> boolean addable(NonNullElementWrapperList<E> l, E e) { return e != null; }","tryCatchPattern":"try { list.add(i, e); } catch (NullPointerException ex) { /* null element */ }","preventionTips":["Filter nulls from source collections before addAll on a NonNullElementWrapperList.","Use Optional or a sentinel object instead of null for absent elements.","If nulls are valid, do not wrap in NonNullElementWrapperList."],"tags":["gson","collections","null","list"],"backgroundTag":null,"analyzedSha":"310ac341f2f92a454b229bf21f70d2d18b2b6db7","analyzedAt":"2026-08-10T02:58:47.455Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}