{"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":52,"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":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/google/gson/blob/8b8628c65699bc4421696183c62ae0c1b9b281dc/gson/src/main/java/com/google/gson/internal/NonNullElementWrapperList.java#L34-L70","documentation":"Thrown by NonNullElementWrapperList.nonNull(E) (NullPointerException 'Element must be non-null') when add(int, E) or set(int, E) receives a null element. NonNullElementWrapperList wraps an ArrayList and enforces a no-null-elements contract on all mutating operations; reads and queries (contains/indexOf) are exempt so they behave like normal List null handling.","triggerScenarios":"Calling list.add(index, null) or list.set(index, null) on a NonNullElementWrapperList. Gson uses this list internally (e.g. for JsonArray element storage in configurations that reject nulls); adding a null JsonElement triggers the guard.","commonSituations":"Deserializing JSON arrays containing nulls into a JsonArray or list type that disallows null elements; programmatically building a list/array and appending null for missing items; mixing nullable sources into a non-null list.","solutions":["Filter nulls before adding: elements.stream().filter(Objects::nonNull).forEach(list::add).","Substitute a non-null placeholder (e.g. JsonNull.INSTANCE if the API accepts it, or an empty/default element).","Use a plain ArrayList if null elements are genuinely required."],"exampleFix":"// before\nNonNullElementWrapperList<String> list = new NonNullElementWrapperList<>(new ArrayList<>());\nlist.add(null); // throws\n\n// after: filter nulls\nfor (String s : source) if (s != null) list.add(s);","handlingStrategy":"validation","validationCode":"static <E> void addNonNull(List<E> list, E e) {\n  if (e != null) list.add(e);\n}\n// usage: source.forEach(e -> addNonNull(list, e));","typeGuard":"static <E> boolean isNonNullOrSkip(E e) { return e != null; }","tryCatchPattern":"try {\n  list.add(e);\n} catch (NullPointerException ex) {\n  if (ex.getMessage().contains(\"non-null\")) {\n    // skip null or substitute a default element\n  } else throw ex;\n}","preventionTips":["Filter nulls before adding to a NonNullElementWrapperList.","Substitute a non-null placeholder (e.g. empty/default element).","Use a plain ArrayList when null elements are required."],"tags":["gson","collection","list","null","nonnull"],"analyzedSha":"8b8628c65699bc4421696183c62ae0c1b9b281dc","analyzedAt":"2026-08-04T19:12:22.202Z","schemaVersion":2}