diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-04-07 12:20:20 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-04-07 12:20:20 +0200 |
commit | 40ce89bf86c98b171ca411c29d3d45a866839fe7 (patch) | |
tree | 6c13ecfdd7fe73d1b61a8c8d1600560a1a34ba8e /searchlib/src/main | |
parent | 7e5934e2c0ee8fb39b2e8952eb869a4667a23f00 (diff) |
Allow creatibng reference nodes from simple reference strings
Diffstat (limited to 'searchlib/src/main')
-rw-r--r-- | searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java | 65 | ||||
-rwxr-xr-x | searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java | 4 |
2 files changed, 35 insertions, 34 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 33d1def4696..391f8ecc773 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java @@ -33,12 +33,6 @@ public class Reference extends Name implements Comparable<Reference> { private final static Pattern identifierPattern = Pattern.compile("[A-Za-z0-9_@.\"-$]+"); - public static Reference fromIdentifier(String identifier) { - if ( ! identifierPattern.matcher(identifier).matches()) - throw new IllegalArgumentException("Identifiers can only contain [A-Za-z0-9_@.\"-$]+, but was '" + identifier + "'"); - return new Reference(identifier, Arguments.EMPTY, null, true); - } - public Reference(String name, Arguments arguments, String output) { this(name, arguments, output, false); } @@ -57,32 +51,6 @@ public class Reference extends Name implements Comparable<Reference> { public String output() { return output; } - /** - * Creates a reference to a simple feature consisting of a name and a single argument - */ - public static Reference simple(String name, String argumentValue) { - return new Reference(name, new Arguments(new ReferenceNode(argumentValue)), null); - } - - /** - * Returns the given simple feature as a reference, or empty if it is not a valid simple - * feature string on the form name(argument). - */ - public static Optional<Reference> simple(String feature) { - int startParenthesis = feature.indexOf('('); - if (startParenthesis < 0) - return Optional.empty(); - int endParenthesis = feature.lastIndexOf(')'); - String featureName = feature.substring(0, startParenthesis); - if (startParenthesis < 1 || endParenthesis < startParenthesis) return Optional.empty(); - String argument = feature.substring(startParenthesis + 1, endParenthesis); - if (argument.startsWith("'") || argument.startsWith("\"")) - argument = argument.substring(1); - if (argument.endsWith("'") || argument.endsWith("\"")) - argument = argument.substring(0, argument.length() - 1); - return Optional.of(simple(featureName, argument)); - } - /** Returns true if this was created by fromIdentifier. Identifiers have no arguments or outputs. */ public boolean isIdentifier() { return isIdentifier; } @@ -172,4 +140,37 @@ public class Reference extends Name implements Comparable<Reference> { return this.toString().compareTo(o.toString()); } + /** Creates a reference from a simple identifier. */ + public static Reference fromIdentifier(String identifier) { + if ( ! identifierPattern.matcher(identifier).matches()) + throw new IllegalArgumentException("Identifiers can only contain [A-Za-z0-9_@.\"-$]+, but was '" + identifier + "'"); + return new Reference(identifier, Arguments.EMPTY, null, true); + } + + /** + * Creates a reference to a simple feature consisting of a name and a single argument + */ + public static Reference simple(String name, String argumentValue) { + return new Reference(name, new Arguments(new ReferenceNode(argumentValue)), null); + } + + /** + * Returns the given simple feature as a reference, or empty if it is not a valid simple + * feature string on the form name(argument). + */ + public static Optional<Reference> simple(String feature) { + int startParenthesis = feature.indexOf('('); + if (startParenthesis < 0) + return Optional.empty(); + int endParenthesis = feature.lastIndexOf(')'); + String featureName = feature.substring(0, startParenthesis); + if (startParenthesis < 1 || endParenthesis < startParenthesis) return Optional.empty(); + String argument = feature.substring(startParenthesis + 1, endParenthesis); + if (argument.startsWith("'") || argument.startsWith("\"")) + argument = argument.substring(1); + if (argument.endsWith("'") || argument.endsWith("\"")) + argument = argument.substring(0, argument.length() - 1); + return Optional.of(simple(featureName, argument)); + } + } diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java index aa6a6df0960..85a12a49958 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java @@ -23,9 +23,9 @@ public final class ReferenceNode extends CompositeNode { private final Reference reference; - /* Creates a node with a simple identifier reference */ + /* Parses this string into a reference */ public ReferenceNode(String name) { - this.reference = Reference.fromIdentifier(name); + this.reference = Reference.simple(name).orElseGet(() -> Reference.fromIdentifier(name)); } public ReferenceNode(String name, List<? extends ExpressionNode> arguments, String output) { |