diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/yql/NodeTypeChecker.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/NodeTypeChecker.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/NodeTypeChecker.java b/container-search/src/main/java/com/yahoo/search/yql/NodeTypeChecker.java new file mode 100644 index 00000000000..c407689e107 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/yql/NodeTypeChecker.java @@ -0,0 +1,34 @@ +// Copyright 2016 Yahoo Inc. 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.Joiner; +import com.google.common.base.Preconditions; +import java.util.Set; + +/** + * Check that an argument is an OperatorNode of a particular operator set. + */ +class NodeTypeChecker extends OperatorTypeChecker { + + private final Class<? extends Operator> operatorType; + private final Set<? extends Operator> operators; + + public NodeTypeChecker(Operator parent, int idx, Class<? extends Operator> operatorType, Set<? extends Operator> operators) { + super(parent, idx); + this.operatorType = operatorType; + this.operators = operators; + } + + @Override + public void check(Object argument) { + Preconditions.checkNotNull(argument, "Argument %s of %s must not be null", idx, parent); + Preconditions.checkArgument(argument instanceof OperatorNode, "Argument %s of %s must be an OperatorNode<%s> (is %s).", idx, parent, operatorType.getName(), argument.getClass()); + OperatorNode<?> node = (OperatorNode<?>) argument; + Operator op = node.getOperator(); + Preconditions.checkArgument(operatorType.isInstance(op), "Argument %s of %s must be an OperatorNode<%s> (is: %s).", idx, parent, operatorType.getName(), op.getClass()); + if (!operators.isEmpty()) { + Preconditions.checkArgument(operators.contains(op), "Argument %s of %s must be %s (is %s).", idx, parent, Joiner.on("|").join(operators), op); + } + } + +} |