private void fillAllLeaves(final Object[] array, final int[] path, final List<Leaf<T>> result) { for ( int key = 0; key < array.length; key++ ) { final Object value = array[key]; if ( value == null ) continue; final int[] newPath = appendToPath(path, key); if ( value instanceof Object[] ) { fillAllLeaves((Object[]) value, newPath, result); } else { result.add(new Leaf<T>(newPath, (T)value)); } } }