diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-02-24 19:46:20 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-02-24 19:46:20 +0100 |
commit | 3777557b0069026d0ba5ace3ff66fca6c7354d92 (patch) | |
tree | cacf774dacfcb0f53f6df23b9131930c53ec1520 /searchlib/src/main/java/com | |
parent | 81ad685e7517f9d56bca42d85eaf4c7ce24a9ba9 (diff) |
Refactor
Diffstat (limited to 'searchlib/src/main/java/com')
-rw-r--r-- | searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java index 6277721e8f5..35974c39f69 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java @@ -4,6 +4,7 @@ package com.yahoo.searchlib.rankingexpression; import com.yahoo.searchlib.rankingexpression.rule.Arguments; import com.yahoo.searchlib.rankingexpression.rule.CompositeNode; import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode; +import com.yahoo.searchlib.rankingexpression.rule.NameNode; import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode; import com.yahoo.searchlib.rankingexpression.rule.SerializationContext; import com.yahoo.tensor.evaluation.TypeContext; @@ -72,6 +73,37 @@ public class Reference extends TypeContext.Name { } /** + * A <i>simple feature reference</i> is a reference with a single identifier argument + * (and an optional output). + */ + public boolean isSimple() { + return simpleArgument().isPresent(); + } + + /** + * If the arguments of this contains a single argument which is an identifier, it is returned. + * Otherwise null is returned. + */ + public Optional<String> simpleArgument() { + if (arguments.expressions().size() != 1) return Optional.empty(); + ExpressionNode argument = arguments.expressions().get(0); + + if (argument instanceof ReferenceNode) { + ReferenceNode refArgument = (ReferenceNode) argument; + + if ( ! refArgument.reference().isIdentifier()) return Optional.empty(); + + return Optional.of(refArgument.getName()); + } + else if (argument instanceof NameNode) { + return Optional.of(((NameNode) argument).getValue()); + } + else { + return Optional.empty(); + } + } + + /** * Returns whether this is a simple identifier - no arguments or output */ public boolean isIdentifier() { |