protected Object fillCollection(Object o, TypeToken typeToken, ITestContext iTestContext) {
        ITestParamState iTestState = iTestContext.getCurrentParam();
        Collection<Object> col = (Collection<Object>) o;
        Class collectionClass;
        if ( null != iTestContext.getCurrentParam() && null != iTestContext.getCurrentParam().getAttribute(ITestConstants.ATTRIBUTE_CLASS) ) {
            collectionClass = iTestConfig.getITestValueConverter()
                    .convert(Class.class, iTestContext.getCurrentParam().getAttribute(ITestConstants.ATTRIBUTE_CLASS));
        } else {
            collectionClass = typeToken.getRawType();
        }
        if ( !collectionClass.isInterface() ) {
            col = (Collection<Object>) newInstance(collectionClass, iTestContext);
        } else {
            if ( Set.class.isAssignableFrom(collectionClass) ) {
                col = (Collection<Object>) newInstance(HashSet.class, iTestContext);
            } else {
                col = (Collection<Object>) newInstance(ArrayList.class, iTestContext);
            }
        }
        if ( null == col ) {
        } else {
            col.clear();
        }
        int size = random.nextInt(RANDOM_MAX - RANDOM_MIN) + RANDOM_MIN;
        if ( null != iTestState && iTestState.getSizeParam() != null ) {
            size = iTestState.getSizeParam();
            //to overwrite expected value
            if ( 0 == size ) {
                iTestContext.enter(col, "<col>");
                iTestContext.leave(null);
            }
        }

        TypeToken elementType = resolveParametrizedType(typeToken, Collection.class, 0);
        for (int i = 0; i < size; i++) {
            iTestContext.enter(col, String.valueOf(i));
            Object value;
            value = generateRandom(elementType.getType(), iTestContext);
            col.add(value);
            iTestContext.leave(value);
        }
        return col;
    }