Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45a9da50 authored by Adam Powell's avatar Adam Powell
Browse files

Throw a more descriptive exception when adding null to a ViewGroup

Help developers during debugging bad calls to addView by throwing an
IllegalArgumentException earlier rather than implicitly tossing NPE
the first time the child view is accessed.

Change-Id: I4a554635815a5d0b415f637b93592fb45973f26d
parent e6411c76
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -3671,6 +3671,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
     * @see #generateDefaultLayoutParams()
     */
    public void addView(View child, int index) {
        if (child == null) {
            throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup");
        }
        LayoutParams params = child.getLayoutParams();
        if (params == null) {
            params = generateDefaultLayoutParams();
@@ -3728,6 +3731,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
            System.out.println(this + " addView");
        }

        if (child == null) {
            throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup");
        }

        // addViewInner() will call child.requestLayout() when setting the new LayoutParams
        // therefore, we call requestLayout() on ourselves before, so that the child's request
        // will be blocked at our level
@@ -3855,6 +3862,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
     */
    protected boolean addViewInLayout(View child, int index, LayoutParams params,
            boolean preventRequestLayout) {
        if (child == null) {
            throw new IllegalArgumentException("Cannot add a null child view to a ViewGroup");
        }
        child.mParent = null;
        addViewInner(child, index, params, preventRequestLayout);
        child.mPrivateFlags = (child.mPrivateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN;