aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/yql/JavaListTypeChecker.java
blob: aede19f090f1576062ee38c86bce4c73935e381d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.yql;

import com.google.common.base.Preconditions;

import java.util.List;

class JavaListTypeChecker extends OperatorTypeChecker {

    private final Class<?> elementType;

    public JavaListTypeChecker(Operator parent, int idx, Class<?> elementType) {
        super(parent, idx);
        this.elementType = elementType;
    }

    @Override
    public void check(Object argument) {
        Preconditions.checkNotNull(argument, "Argument %s of %s must not be null", idx, parent);
        Preconditions.checkArgument(argument instanceof List, "Argument %s of %s must be a List<%s>", idx, parent, elementType.getName(), argument.getClass().getName());
        List<?> lst = (List<?>) argument;
        for (Object elt : lst) {
            Preconditions.checkNotNull(elt, "Argument %s of %s List elements may not be null", idx, parent);
            Preconditions.checkArgument(elementType.isInstance(elt), "Argument %s of %s List elements must be %s (is %s)", idx, parent, elementType.getName(), elt.getClass().getName());
        }
    }

}