summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-04-07 12:20:20 +0200
committerJon Bratseth <bratseth@gmail.com>2022-04-07 12:20:20 +0200
commit40ce89bf86c98b171ca411c29d3d45a866839fe7 (patch)
tree6c13ecfdd7fe73d1b61a8c8d1600560a1a34ba8e /searchlib
parent7e5934e2c0ee8fb39b2e8952eb869a4667a23f00 (diff)
Allow creatibng reference nodes from simple reference strings
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/Reference.java65
-rwxr-xr-xsearchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ReferenceNode.java4
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) {